Orbacus名字服务的使用
Orbacus 是 IONA 提供的开源 COBRA 实现,但其相关技术文档去很不详尽,而且还有错误,以下是以举例的方式说明了如何使用其提供的名字服务。
1 启动名字服务
java -Dooc.orb.oa.endpoint="iiop --port 9998" -classpath OBNaming.jar;OB.jar com.ooc.CosNaming.Server
其中通过 ooc.orb.oa.endpoint="iiop --port 9998" 设置服务的端口
2 服务器段代码:
import helloorb.Hello;
import helloorb.Hello_Impl;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import com. ooc .CORBA.ORB;
import com.ooc.OBPortableServer.POA;
import com.ooc.OBPortableServer.POAHelper;
import com.ooc.OBPortableServer.POAManager;
public class ByNamingServer {
public static void main(String[] args) {
java.util.Properties props = System.getProperties();
props.put( "org.omg.CORBA.ORBClass" , "com.ooc.CORBA.ORB" );
props.put( "org.omg.CORBA.ORBSingletonClass" ,
"com.ooc.CORBA.ORBSingleton" );
org.omg.CORBA.ORB orb = null ;
try {
orb = ORB.init(args, props);
org.omg.CORBA.Object poaObj = null ;
try {
poaObj = orb.resolve_initial_references( "RootPOA" );
} catch (org.omg.CORBA.ORBPackage.InvalidName ex) {
throw new RuntimeException();
}
POA rootPOA = POAHelper.narrow(poaObj);
org.omg.PortableServer.POAManager manager = rootPOA
.the_POAManager();
org.omg.CORBA.Object obj = null ;
try {
String nameService= "corbaloc::127.0.0.1:9998/NameService" ;
obj = orb.string_to_object(nameService);
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException();
}
if (obj == null ) {
throw new RuntimeException();
}
NamingContextExt nc = null ;
try {
Hello_Impl helloImpl = new Hello_Impl();
Hello hello = helloImpl._this(orb);
NameComponent[] a2Name = new NameComponent[1];
a2Name[0] = new NameComponent();
a2Name[0]. id = "HelloServer" ;
a2Name[0]. kind = "" ;
nc = NamingContextExtHelper.narrow(obj);
nc.rebind(a2Name, hello);
manager.activate();
} catch (Exception ex) {
ex.printStackTrace();
throw new RuntimeException();
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
3 客户端代码
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import helloorb.Hello;
import helloorb.HelloHelper;
public class ByNamingClient {
public static void main(String args[]) {
java.util.Properties props = System.getProperties();
props.put( "org.omg.CORBA.ORBClass" , "com.ooc.CORBA.ORB" );
props.put( "org.omg.CORBA.ORBSingletonClass" ,
"com.ooc.CORBA.ORBSingleton" );
int status = 0;
org.omg.CORBA.ORB orb = null ;
try {
orb = org.omg.CORBA.ORB.init(args, props);
status = run(orb);
} catch (Exception ex) {
ex.printStackTrace();
status = 1;
}
if (orb != null ) {
try {
orb.destroy();
} catch (Exception ex) {
ex.printStackTrace();
status = 1;
}
}
System.exit(status);
}
static int run(org.omg.CORBA.ORB orb) {
org.omg.CORBA.Object obj = null ;
/* try {
String refFile = "Hello.ref";
java.io.BufferedReader in = new java.io.BufferedReader(
new java.io.FileReader(refFile));
String ref = in.readLine();
obj = orb.string_to_object(ref);
} catch (java.io.IOException ex) {
ex.printStackTrace();
return 1;
}*/
try {
obj = orb.string_to_object( "corbaloc::127.0.0.1:9998/NameService" );
NamingContextExt nc = NamingContextExtHelper.narrow(obj);
/* NameComponent[] a2Name = new NameComponent[1];
a2Name[0] = new NameComponent();
a2Name[0].id = "HelloServer";
a2Name[0].kind = "";*/
Hello hello = HelloHelper.narrow(nc.resolve_str( "HelloServer" ));
hello.say_hello();
} catch (Exception e){
e.printStackTrace();
}
return 0;
}
}