言語
開発環境
Webアプリ/ミドル
データベース
OS/ネットワーク
ITスキル
海外サイト翻訳
書籍検索
用語検索
CORBAとはCommon Object Request Broker Architectureの略です。 OMG(Object Management Group)が定めた分散オブジェクト技術の仕様で、 これを用いることによってネットワーク上に分散しているプログラムを利用したり、 相互に連動させて動かしたりすることができます。
OMG IDLとはOMG(Object Management Group)が定めたインターフェースのを記述する言語です。 IDLとはInterface Definition Languageの略です。下が今回使用するインターフェース定義です。
module HelloApp
{
interface Hello
{
string sayHello();
oneway void shutdown();
};
};
idljというコマンドで生成できます。 -fallオプションを指定することによって、スタブとスケルトンのJavaソースファイルを生成できます。
コマンドプロンプト
C:\JavaHello\CORBA>idlj -fall Hello.idl
C:\JavaHello\CORBA>
これでHelloAppフォルダの下に以下のファイルが生成されます。
HelloPOA.java サーバーのスケルトンクラス
extends org.omg.PortableServer.Servant
implements HelloApp.HelloOperations, org.omg.CORBA.portable.InvokeHandler
_HelloStub.java クライアントのスタブクラス
extends org.omg.CORBA.portable.ObjectImpl
implements HelloApp.Hello
Hello.java IDLインターフェースのJava版
extends HelloOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity
HelloOperations.java IDLで定義したsayHello()メソッドを持つインターフェース
HelloHelper.java CORBAオブジェクトを適切なタイプにキャストするために使うnarrow()メソッドを持つクラス。
CORBAストリームへの書き込みと、読み込みを行うメソッドを持ち、このメソッドはHelloHolderクラスで利用される。
HelloHolder.java Helloインターフェースをパブリックメンバに持つ。
CORBAストリームへの書き込みと、読み込みを行うためにHelloHeloperクラスを使用する。
implements org.omg.CORBA.portable.Streamable
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;
class HelloImpl extends HelloPOA {
private ORB orb;
public void setORB(ORB orb_val) {
orb = orb_val;
}
public String sayHello() {
return "Hello World";
}
public void shutdown() {
orb.shutdown(false);
}
}
public class HelloWorldCorbaServer {
public static void main(String args[]) {
try{
// ORBの生成と初期化を行う
ORB orb = ORB.init(args, null);
// RootPOAの参照を取得
POA rootpoa = POAHelper.narrow(
orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
// サーバントを生成し、それにORBを登録
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB(orb);
// サーバントからHelloオブジェクトの参照を取得
org.omg.CORBA.Object ref
= rootpoa.servant_to_reference(helloImpl);
Hello href = HelloHelper.narrow(ref);
// ネームサービスを検索してネームサービスの参照を取得
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContextExt ncRef
= NamingContextExtHelper.narrow(objRef);
// Helloオブジェクトの参照をネームサービスに登録
String name = "Hello";
NameComponent path[] = ncRef.to_name( name );
ncRef.rebind(path, href);
System.out.println(
"HelloWorldCorbaServerが起動しました");
// クライアントからの呼び出しを待ちます
orb.run();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("HelloWorldCorbaServerを停止します");
}
}
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
public class HelloWorldCorbaClient {
static Hello helloImpl;
public static void main(String args[]) {
try{
// ORBの生成と初期化を行います
ORB orb = ORB.init(args, null);
// ネームサービスを検索してネームサービスの参照を取得
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContextExt ncRef
= NamingContextExtHelper.narrow(objRef);
// ネームサービスからHelloオブジェクトの参照を取得
String name = "Hello";
helloImpl = HelloHelper.narrow(
ncRef.resolve_str(name));
// sayHello()メソッドを実行します
System.out.println(helloImpl.sayHello());
} catch (Exception e) {
e.printStackTrace();
}
}
}
コマンドプロンプト
C:\JavaHello\CORBA>javac *.java HelloApp\*.java
C:\JavaHello\CORBA>
orbdはObject Request Broker Daemonの略です。 ORBのデーモンプログラムで、クライアントがネームサービスの使用してオブジェクトを取得し、 そのオブジェクトを利用できるようにします。コマンドライン引数にポート番号を指定します。
コマンドプロンプト
C:\>start orbd -ORBInitialPort 1050
正常に起動すると画面には何も表示されない状態になります。
コマンドプロンプト
C:\JavaHello\CORBA>java HelloWorldCorbaServer -ORBInitialPort 1050 -ORBInitialHost localhost
HelloWorldCorbaServerが起動しました
ORBのデーモンプグラム(orbd)が動いているサーバーのポート番号とホスト名を指定します。 ここではlocalhostで動いているで上記のようになります。
コマンドプロンプト
C:\JavaHello\CORBA>java HelloWorldCorbaClient -ORBInitialPort 1050 -ORBInitialHost localhost
Hello World
C:\JavaHello\CORBA>
Loarding…
グループサイト zealseeds zealseedsラーニング zealseedsブックス 名か字 名科辞典 幸福の木の育て方
Copyright (C) 2007-2011 zealseeds. All Rights Reserved.お問合せ