2012-04-12 11 views
1

私はトリッキーな問題があります。そして、CORBAを初めて知りましたので、私はそれを抜け出すことができません。実装へのORBへのアクセスを取得しますか?

実装オブジェクトを別の実装からインスタンス化するにはどうすればよいですか?

通常、私はインタフェースAを持っていれば、idlから生成されたA_POAクラスから拡張されたA_Impl.javaファイル内にA_Implクラスを作成します。

そして、サーバ側で私はこのような何かをするだろう:

AImpl my_a_impl = new A_Impl(); 
org.omg.CORBA.Object ref = orb.activate_object(my_a_impl); 
A my_a_object = A.narrow(ref); 

しかし、別のオブジェクトBのメソッドのいずれかを返すために必要なもの?

私のB_implクラスでは、orbへのアクセス権がないため、activate_objectメソッドを使用してオブジェクトへの参照を取得できません。

どうすればこのようなオブジェクトを返すことができますか?

ご協力いただければ幸いです。 ありがとうございます!

+3

CORBAでのサーバントと参照の違いを知る必要があります。これは非常に重要な違いで、サーバーのコーディングに役立ちます。ここには2つの優れたリソースがあります:http://www.ciaranmchale.com/corba-explained-simply/concepts-for-server-side-programming.htmlとhttp://documentation.progress.com/output/Iona/orbix/ 6.3/develop/corba_pguide/java/ServerBasics1.html –

+0

Thx!私は、CORBAオンラインで「チュートリアル」や「始めよう」というものを見つけるのに苦労しています。私はそれらがそれらのいくつかであることを願っています:) – jlengrand

答えて

0

私にとっては分かりにくい理由のようですが、コンストラクタはidlによって生成されません。 コンストラクタを作成することで、単にオブジェクトを参照として渡してクラスに表示させることができます。 はい...それと同じように簡単です:)

0

非常にオブジェクト*_Implから到達できるシングルトンクラスの現在のアクティブなオーブへの参照を入れてください。

1

CORBAには、既存のORBリファレンス(ORB_init())を取得するための関数が用意されています。ほとんどのORBでは、その関数はシングルトンのように動作し、呼び出すたびに同じORB IDを使用すると仮定すると、既存のORBオブジェクトを戻します。

+1

[ORB.init()](http://docs.oracle.com/javase/1.4.2/docs/api/org/omg/CORBA/ORB.html)は決して使用しないでください。 #init())関数を使用してオブジェクトを作成します。 docは "それが返すORBはTypeCodeオブジェクトのファクトリとしてのみ使用できるように制限されています"と伝えています。 – dash1e

+0

ORB_init()は、ORBオブジェクトの作成に使用されます。存在しない場合はORBオブジェクトを検索します。私は彼が自分のしもべオブジェクトを作るのにそれを使うべきではない(それは彼自身の責任である)。 –

+0

したがって、オブジェクトをアクティブにすることはできません。orb.activate_object( '。 – dash1e

関連する問題