Manpages

名 前

tnameserv − Java IDL ネ ー ム サ ー バ の 起 動 ス ク リ プ ト

形 式

tnameserv −ORBInitialPort port_number

機 能 説 明

CORBACOS (Common Object Services) ネ ー ム サ ー ビ ス は 、 フ ァ イ ル シ ス テ ム が フ ァ イ ル に 対 し て デ ィ レ ク ト リ 構 造 を 提 供 し て い る の と 同 じ よ う に 、 オ ブ ジ ェ ク ト 参 照 に 対 し て ツ リ ー 構 造 の デ ィ レ ク ト リ を 提 供 し ま す 。 Java IDL の ネ ー ム サ ー ビ ス は 、 COS ネ ー ム サ ー ビ ス の 仕 様 を 単 純 な 形 で 実 装 し た も の で す 。

オ ブ ジ ェ ク ト 参 照 は 名 前 空 間 に 名 前 で 格 納 さ れ 、 オ ブ ジ ェ ク ト 参 照 と 名 前 の 組 は 、 そ れ ぞ れ 「 ネ ー ム バ イ ン デ ィ ン グ 」 と 呼 ば れ ま す 。 ネ ー ム バ イ ン デ ィ ン グ は 「 ネ ー ミ ン グ コ ン テ キ ス ト 」 に 組 み 込 む こ と が で き ま す 。 ネ ー ミ ン グ コ ン テ キ ス ト は そ れ 自 体 が ネ ー ム バ イ ン デ ィ ン グ で あ り 、 フ ァ イ ル シ ス テ ム の サ ブ デ ィ レ ク ト リ と 同 じ 編 成 機 能 を 持 ち ま す 。 す べ て の バ イ ン デ ィ ン グ は 「 初 期 ネ ー ミ ン グ コ ン テ キ ス ト 」 に 格 納 さ れ ま す 。 名 前 空 間 に お い て 、 初 期 ネ ー ミ ン グ コ ン テ キ ス ト は 唯 一 の 持 続 的 バ イ ン デ ィ ン グ で す 。 そ れ 以 外 の ネ ー ミ ン グ コ ン テ キ ス ト は 、 Java IDL の ネ ー ム サ ー バ プ ロ セ ス が 停 止 し 、 再 起 動 さ れ る と 失 わ れ ま す 。

ア プ レ ッ ト ま た は ア プ リ ケ ー シ ョ ン か ら COS ネ ー ム サ ー ビ ス を 使 用 す る た め に は 、 そ の ORB は ネ ー ム サ ー ビ ス が 動 作 し て い る ホ ス ト の 名 前 と ポ ー ト を 知 っ て い る か 、 そ の ネ ー ム サ ー バ の 文 字 列 化 さ れ た 初 期 ネ ー ミ ン グ コ ン テ キ ス ト に ア ク セ ス で き な け れ ば な り ま せ ん 。 ネ ー ム サ ー ビ ス は 、 Java IDL の ネ ー ム サ ー バ で も そ の 他 の COS 準 拠 の ネ ー ム サ ー ビ ス で も か ま い ま せ ん 。

使 用 法

Java IDL ネ ー ム サ ー バ の 起 動
Java IDL ネ ー ム サ ー バ は 、 ネ ー ム サ ー ビ ス を 使 用 す る ア プ リ ケ ー シ ョ ン ま た は ア プ レ ッ ト よ り 前 に 起 動 し て お か な け れ ば な り ま せ ん 。 Java IDL 製 品 を イ ン ス ト ー ル す る と 、 Java IDL ネ ー ム サ ー バ を 起 動 す る ス ク リ プ ト (tnameserv) が 作 成 さ れ ま す 。 バ ッ ク グ ラ ウ ン ド で 動 作 す る よ う に 、 ネ ー ム サ ー バ を 起 動 し て く だ さ い 。

特 に 指 定 し な い 場 合 、 Java IDL ネ ー ム サ ー バ は 、 ORBresolve_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 は オ ブ ジ ェ ク ト 参 照 、 Personalcalendarschedule の 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);
}
}
}

関 連 項 目

kill(1)