名 前
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);
}
}
}