名 前
tnameserv − Java IDL ネ ー ム サ ー バ の 起 動 ス ク リ プ ト
形 式
tnameserv −ORBInitialPort port_number
機 能 説 明
CORBA の COS (Common Object Services) ネ ー ム サ ー ビ ス は 、 フ ァ イ ル シ ス テ ム が フ ァ イ ル に 対 し て デ ィ レ ク ト リ 構 造 を 提 供 し て い る の と 同 じ よ う に 、 オ ブ ジ ェ ク ト 参 照 に 対 し て ツ リ ー 構 造 の デ ィ レ ク ト リ を 提 供 し ま す 。 Java IDL の ネ ー ム サ ー ビ ス は 、 COS ネ ー ム サ ー ビ ス の 仕 様 を 単 純 な 形 で 実 装 し た も の で す 。 オ ブ ジ ェ ク ト 参 照 は 名 前 空 間 に 名 前 で 格 納 さ れ 、 オ ブ ジ ェ ク ト 参 照 と 名 前 の 組 は 、 そ れ ぞ れ 「 ネ ー ム バ イ ン デ ィ ン グ 」 と 呼 ば れ ま す 。 ネ ー ム バ イ ン デ ィ ン グ は 「 ネ ー ミ ン グ コ ン テ キ ス ト 」 に 組 み 込 む こ と が で き ま す 。 ネ ー ミ ン グ コ ン テ キ ス ト は そ れ 自 体 が ネ ー ム バ イ ン デ ィ ン グ で あ り 、 フ ァ イ ル シ ス テ ム の サ ブ デ ィ レ ク ト リ と 同 じ 編 成 機 能 を 持 ち ま す 。 す べ て の バ イ ン デ ィ ン グ は 「 初 期 ネ ー ミ ン グ コ ン テ キ ス ト 」 に 格 納 さ れ ま す 。 名 前 空 間 に お い て 、 初 期 ネ ー ミ ン グ コ ン テ キ ス ト は 唯 一 の 持 続 的 バ イ ン デ ィ ン グ で す 。 そ れ 以 外 の ネ ー ミ ン グ コ ン テ キ ス ト は 、 Java IDL の ネ ー ム サ ー バ プ ロ セ ス が 停 止 し 、 再 起 動 さ れ る と 失 わ れ ま す 。 ア プ レ ッ ト ま た は ア プ リ ケ ー シ ョ ン か ら COS ネ ー ム サ ー ビ ス を 使 用 す る た め に は 、 そ の ORB は ネ ー ム サ ー ビ ス が 動 作 し て い る ホ ス ト の 名 前 と ポ ー ト を 知 っ て い る か 、 そ の ネ ー ム サ ー バ の 文 字 列 化 さ れ た 初 期 ネ ー ミ ン グ コ ン テ キ ス ト に ア ク セ ス で き な け れ ば な り ま せ ん 。 ネ ー ム サ ー ビ ス は 、 Java IDL の ネ ー ム サ ー バ で も そ の 他 の COS 準 拠 の ネ ー ム サ ー ビ ス で も か ま い ま せ ん 。
使 用 法
Java IDL
ネ ー ム サ ー バ
の 起 動
Java IDL ネ ー ム サ
ー バ は 、 ネ ー
ム サ ー ビ ス を
使 用 す る ア プ
リ ケ ー シ ョ ン
ま た は ア プ レ
ッ ト よ り 前 に
起 動 し て お か
な け れ ば な り
ま せ ん 。 Java IDL
製 品 を イ ン ス
ト ー ル す る と
、 Java IDL ネ ー ム
サ ー バ を 起 動
す る ス ク リ プ
ト (tnameserv) が 作 成 さ
れ ま す 。 バ ッ
ク グ ラ ウ ン ド
で 動 作 す る よ
う に 、 ネ ー ム
サ ー バ を 起 動
し て く だ さ い
。 特 に 指 定 し
な い 場 合 、 Java
IDL ネ ー ム サ
ー バ は 、 ORB
の resolve_initial_references() メ
ソ ッ ド と
list_initial_references() メ ソ ッ
ド の 実 装 に 使
用 す る ブ ー ト
ス ト ラ ッ プ プ
ロ ト コ ル に 対
し て ポ ー ト 900 で
待 機 し ま す 。
ほ か の ポ ー ト (
1050 な ど ) を 指 定
す る に は 、 次
の よ う に し ま
す 。
example% tnameserv −ORBInitialPort 1050 ネ ー ム サ ー バ の ク ラ イ ア ン ト に は 、 新 し い ポ ー ト 番 号 を 知 ら せ る 必 要 が あ り ま す 。 こ の た め 、 ORB オ ブ ジ ェ ク ト の 作 成 時 に org.omg.CORBA.ORBInitialPort プ ロ パ テ ィ に 新 し い ポ ー ト 番 号 を 設 定 し ま す 。
Java IDL
ネ ー ム サ ー バ
の 停 止
Java IDL ネ ー ム サ
ー バ を 停 止 す
る に は 、 kill(1) な
ど の オ ペ レ ー
テ ィ ン グ シ ス
テ ム の コ マ ン
ド を 使 い ま す
。 な お 、 ネ ー
ム サ ー バ を 終
了 さ せ る と 、 Java
IDL ネ ー ム サ
ー ビ ス に 登 録
さ れ て い る 名
前 は 失 わ れ ま
す 。 サ ン プ ル
ク ラ イ ア ン ト :
オ ブ ジ ェ ク ト
の 追 加 以 下 に
示 す サ ン プ ル
プ ロ グ ラ ム は
、 名 前 を 名 前
空 間 に 追 加 す
る 方 法 を 示 す
も の で す 。 こ
の サ ン プ ル プ
ロ グ ラ ム は 、
こ の ま ま の 状
態 で 完 全 に 動
作 す る ネ ー ム
サ ー バ ク ラ イ
ア ン ト で 、 次
の よ う な 単 純
な ツ リ ー を 作
成 す る も の で
す 。 初 期 ネ ー
ミ ン グ コ ン テ
キ ス ト
\
\
plans Personal
\
\
calendar schedule こ の 例 で
、 plans は オ ブ ジ
ェ ク ト 参 照 、
Personal は calendar と
schedule の 2 つ の オ
ブ ジ ェ ク ト 参
照 が 含 ま れ る
ネ ー ミ ン グ コ
ン テ キ ス ト で
す 。
import
java.util.Properties;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
public class
NameClient
{
public static void main(String args[])
{
try { 前 述 の 「
JavaIDLネ ー ム サ
ー バ の 起 動 」
で は 、 ネ ー ム
サ ー バ は ポ ー
ト 1050 を 使 用 し
て 起 動 し ま し
た 。 次 の コ ー
ド で 、 こ の ポ
ー ト 番 号 を ク
ラ イ ア ン ト プ
ロ グ ラ ム に 知
ら せ ま す 。
Properties
props = new Properties();
props.put("org.omg.CORBA.ORBInitialPort",
"1050");
ORB orb = ORB.init(args, props); 次 の
コ ー ド で は 、
初 期 ネ ー ミ ン
グ コ ン テ キ ス
ト を 取 得 し 、
そ れ を ctx に 代
入 し ま す 。 2 行
目 で は 、 ctx を
ダ ミ ー の オ ブ
ジ ェ ク ト 参 照
objref に コ ピ ー し
ま す 。 こ の objref
に は 、 あ と で
さ ま ざ ま な 名
前 を 割 り 当 て
て 名 前 空 間 に
追 加 し ま す 。
NamingContext
ctx = NamingContextHelper.narrow
(orb.resolve_initial_references("NameService"));
NamingContext objref = ctx; 次 の コ
ー ド で は 、 text 型
の 名 前 「 plans」 を
作 成 し 、 そ れ
を ダ ミ ー の オ
ブ ジ ェ ク ト 参
照 に バ イ ン ド
し ま す 。 そ の
後 、 rebind を 使 用
し て 初 期 ネ ー
ミ ン グ コ ン テ
キ ス ト の 下 に
「 plans」 を 追 加 し
て い ま す 。 rebind
メ ソ ッ ド を 使
用 す れ ば 、 bind
を 使 用 し た 場
合 に 発 生 す る
例 外 を 発 生 さ
せ ず に 、 こ の
プ ロ グ ラ ム を
何 度 も 繰 り 返
し 実 行 で き ま
す 。
NameComponent
nc1 = new NameComponent("plans",
"text");
NameComponent[] name1 = {nc1};
ctx.rebind(name1, objref);
System.out.println("plans rebind sucessful!");
次 の コ ー ド で
は 、 directory 型 の 「
Personal」 と い う ネ
ー ミ ン グ コ ン
テ キ ス ト を 作
成 し ま す 。 そ
の 結 果 得 ら れ
る オ ブ ジ ェ ク
ト 参 照 ctx2 を こ
の 名 前 に バ イ
ン ド し 、 初 期
ネ ー ミ ン グ コ
ン テ キ ス ト に
追 加 し ま す 。
NameComponent
nc2 = new NameComponent("Personal",
"directory");
NameComponent[] name2 = {nc2};
NamingContext ctx2 = ctx.bind_new_context(name2);
System.out.println("new naming context
added.."); 残 り の コ
ー ド で は 、 ダ
ミ ー の オ ブ ジ
ェ ク ト 参 照 を
「 schedule」 と 「 calendar」
と い う 名 前 で
ネ ー ミ ン グ コ
ン テ キ ス ト 「
Personal」 (ctx2) に バ イ
ン ド し ま す 。
NameComponent
nc3 = new NameComponent("schedule",
"text");
NameComponent[] name3 = {nc3};
ctx2.rebind(name3, objref);
System.out.println("schedule rebind
sucessful!");
NameComponent
nc4 = new NameComponent("calender",
"text");
NameComponent[] name4 = {nc4};
ctx2.rebind(name4, objref);
System.out.println("calender rebind sucessful!");
}
catch (Exception e) {
e.printStackTrace(System.err); } } } サ ン
プ ル ク ラ イ ア
ン ト : 名 前 空 間
の ブ ラ ウ ズ 次
の サ ン プ ル プ
ロ グ ラ ム で は
、 名 前 空 間 を
ブ ラ ウ ズ す る
方 法 を 示 し ま
す 。
import
java.util.Properties;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
public class
NameClientList
{
public static void main(String args[])
{
try { 前 述 の 「
JavaIDLネ ー ム サ
ー バ の 起 動 」
で 、 ネ ー ム サ
ー バ は ポ ー ト
1050 を 使 用 し て
起 動 し ま し た
。 次 の コ ー ド
で 、 こ の ポ ー
ト 番 号 を ク ラ
イ ア ン ト プ ロ
グ ラ ム に 知 ら
せ ま す 。
Properties
props = new Properties();
props.put("org.omg.CORBA.ORBInitialPort",
"1050");
ORB orb = ORB.init(args, props); 次 の
コ ー ド で は 、
初 期 ネ ー ミ ン
グ コ ン テ キ ス
ト を 取 得 し て
い ま す 。
NamingContext
nc = NamingContextHelper.narrow
(orb.resolve_initial_references("NameService"));
list メ ソ ッ ド は 、 ネ ー ミ ン グ コ ン テ キ ス ト に 追 加 さ れ て い る バ イ ン デ ィ ン グ を リ ス ト し ま す 。 こ の 場 合 、 最 大 1000 個 ま で の バ イ ン デ ィ ン グ が 初 期 ネ ー ミ ン グ コ ン テ キ ス ト か ら BindingListHolder に 返 さ れ ま す 。 残 り の バ イ ン デ ィ ン グ は 、 BindingIteratorHolder に 返 さ れ ま す 。
BindingListHolder
bl = new BindingListHolder();
BindingIteratorHolder blIt= new BindingIteratorHolder();
nc.list(1000, bl, blIt); 次 の コ
ー ド で は 、 返
さ れ た BindingListHolder か
ら バ イ ン デ ィ
ン グ の 配 列 を
取 得 し ま す 。
バ イ ン デ ィ ン
グ が な い 場 合
は 、 プ ロ グ ラ
ム は 終 了 し ま
す 。
Binding
bindings[] = bl.value;
if (bindings.length == 0) return; 残 り
の コ ー ド で は
、 バ イ ン デ ィ
ン グ に 対 し て
ル ー プ 処 理 を
行 い 、 名 前 を
出 力 し ま す 。
for (int i=0; i < bindings.length; i++) {
// get the
object reference for each binding
org.omg.CORBA.Object obj = nc.resolve
(bindings[i].binding_name); |
String objStr =
orb.object_to_string(obj);
int lastIx = bindings[i].binding_name.length-1;
// check to
see if this is a naming context
if (bindings[i].binding_type == BindingType.ncontext) {
System.out.println
("Context: " + bindings[i].binding_name[lastIx].id); } |
else {
System.out.println
("Object: " + bindings[i].binding_name[lastIx].id); } } } |
catch (Exception e) {
e.printStackTrace(System.err); } } }