Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド
「20.3.2 コード一覧」では,それぞれのインタセプタAPIメソッドは単純にインプリメントされており,これは標準出力に情報メッセージを出力します。
Borland Enterprise Server VisiBrokerインストレーションのexamples/vbe/interceptorsディレクトリには次の四つのアプリケーションの例があります。
サンプルを実行するには,通常どおりにファイルをコンパイルします。そして,サーバとクライアントを次に示すように起動します。
prompt>vbj -Dvbroker.orb.dynamicLibs=SampleServerLoader Server prompt>vbj -Dvbroker.orb.dynamicLibs=SampleClientLoader Client Kate
表20-2にインタセプタの例の実行結果を示します。クライアントとサーバによる実行が順を追って示してあります。
クライアント | サーバ |
---|---|
========> SampleServerLoader:Interceptors loaded ========> In POA / . Nothing to do. ========> In POA bank_agent_poa,1 ServerRequest interceptor installed Stub [repository_id=IDL:Bank/ AccountManager:1.0,key=ServiceId [service=/ bank_agent _poa,id={11 bytes: [B ][a ][n ][k ][M ][a ][n ][a ][g ][e ][r ]}]] is ready. |
|
Bind Interceptors loaded ========> SampleBindInterceptor bind ========> SampleBindInterceptor bind_succeeded ========> SampleClientInterceptor id MyClientInterceptor preinvoke_premarshal => open ========> SampleClientInterceptor id MyClientInterceptor preinvoke_postmarshal |
|
========> SampleServerInterceptor id MyServerInterceptor preinvoke => open Created john's account: Stub [repository_id=IDL:Bank/ Account:1.0,key=TransientId [ poaName=/,id={4 bytes: (0)(0)(0)(0)},sec=0,usec=0 ]] |
|
========> SampleClientInterceptor id MyClientInterceptor postinvoke ========> SampleBindInterceptor bind ========> SampleBindInterceptor bind_succeeded ========> SampleClientInterceptor id MyClientInterceptor preinvoke_premarshal => balance ========> SampleClientInterceptor id MyClientInterceptor preinvoke_postmarshal |
|
========>SampleServerInterceptor id MyServerInterceptor postinvoke_premarshal ========>SampleServerInterceptor id MyServerInterceptor postinvoke_postmarshal |
|
========>SampleClientInterceptor id MyClientInterceptor postinvoke The balance in john's account is $245.64 |
OADは実行されていないので,bind()メソッドの呼び出しは失敗し,サーバが処理を続行します。クライアントはアカウントオブジェクトにバインドしてから,balance()メソッドを起動します。このリクエストはサーバが受信して処理し,結果がクライアントに戻されます。クライアントは結果を出力します。
コードと結果のサンプルに示したように,クライアントとサーバの両方のインタセプタは,それぞれのプロセスの開始時点でインストールされます。インタセプタの登録についての情報については,「20.2.5 Borland Enterprise Server VisiBroker ORBへのインタセプタの登録」を参照してください。
次のコードでServiceLoaderインタフェースのインプリメント方法の例を示します。
import com.inprise.vbroker.properties.*; import com.inprise.vbroker.interceptor.*; import com.inprise.vbroker.InterceptorExt.*; public final class UtilityServiceLoader implements ServiceLoader, ServiceResolverInterceptor { private com.inprise.vbroker.orb.ORB _orb = null; private String[ ] __serviceNames = { "TimeService", "WeatherService"}; public void init(org.omg.CORBA.ORB orb) { //Just in case they are needed by resolve() _orb =(com.inprise.vbroker.orb.ORB)orb; PropertyManager pm =_orb.getPropertyManager(); //use the PropertyManager to query property settings //if needed (not used in this example) /****Installing the Initial Reference *****/ InterceptorManagerControl control =_orb.interceptorManager(); ServiceResolverInterceptorManager manager = (ServiceResolverInterceptorManager)control.get_manager ("ServiceResolver"); for (int i =0;i <_serviceNames.length;i++){ manager.add(_serviceNames [i ],this); } /****end of installation ***/ if (_orb.debug) _orb.println("UtilityServices package has been initialized"); } public void init_complete(org.omg.CORBA.ORB orb){ //can be used for post-initialization processing if desired } public void shutdown(org.omg.CORBA.ORB orb){ _orb =null; _serviceNames =null; } public org.omg.CORBA.Object resolve(java.lang.String service){ org.omg.CORBA.Object srv =null; byte[ ] serviceId =service.getBytes(); try { if (service =="TimeService"){ srv =UtilityServices.TimeServiceHelper.bind(_orb, "/time_service_poa",serviceId); } else if (service =="WeatherService"){ srv =UtilityServices.WeatherServiceHelper.bind(_orb, "/weather_service_poa",serviceId); } }catch (org.omg.CORBA.SystemException e){ if (_orb.debug) _orb.println("UtilityServices package resolve error:"+e); srv =null; } return srv; } }
All Rights Reserved. Copyright (C) 2006, Hitachi, Ltd.
COPYRIGHT (C) 1992-2004 Borland Software Corporation. All rights reserved.