Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド
コードサンプル21-3に,TimeWrap.hファイルに定義されたTimingUntypedObjectWrapperのインプリメンテーションを示します。アンタイプドオブジェクトラッパーはVISObjectWrapper::UntypedObjectWrapperクラスから派生していなければなりません。ユーザはアンタイプドオブジェクトラッパー中のpre_methodとpost_methodの両メソッドのインプリメンテーションを提供できます。
ファクトリがインストールされたら,ファクトリのコンストラクタによって自動的にまたはVISObjectWrapper::ChainUntypedObjectWrapperFactory::createメソッドの起動によって手動で,クライアントがオブジェクトにバインドする際,またはサーバがオブジェクトインプリメンテーションでメソッドを起動する際に,アンタイプドオブジェクトラッパーオブジェクトが自動的に生成されます。
コードサンプル21-3に示すpre_methodは,TimeWrap.Cで定義されたTimerBeginメソッドを起動します。このメソッドは,現在の時間を取得するためにClosureオブジェクトを使用します。同様に,post_methodはTimerDeltaメソッドを起動し,pre_methodが呼び出されてからどれくらい時間がたったかを調べ,経過時間を出力します。
class TimingObjectWrapper : public VISObjectWrapper:: UntypedObjectWrapper { public: TimingObjectWrapper( const char* key=NULL) : _key(key) {} void pre_method(const char* operation, CORBA::Object_ptr target, VISClosure& closure) { cout << "*Timing: [" << flush; if ((char *)_key) cout << _key << flush; else cout << "<no key>" << flush; cout << "] pre_method\t" << operation << "\t->" << endl; TimerBegin(closure, operation); } void post_method(const char* operation, CORBA::Object_ptr target, CORBA::Environment& env, VISClosure& closure) { cout << "*Timing: [" << flush; if ((char *)_key) cout << _key << flush; else cout << "<no key>" << flush; cout << "] post_method\t" ; TimerDelta(closure, operation); } private: CORBA::String_var _key; };
コードサンプル21-4に,TimingUntypedObjectWrapperのインプリメンテーションを示します。アンタイプドオブジェクトラッパーはUntypedObjectWrapperクラスから派生していなければなりません。ユーザはアンタイプドオブジェクトラッパー中のpre_methodとpost_methodの両メソッドのインプリメンテーションを提供できます。
ファクトリがインストールされたら,ファクトリのコンストラクタによって自動的にまたはChainUntypedObjectWrapperFactory::addメソッドの起動によって手動で,クライアントがオブジェクトにバインドする際,またはサーバがオブジェクトインプリメンテーションでメソッドを起動する際に,アンタイプドオブジェクトラッパーオブジェクトが自動的に生成されます。
コードサンプル21-4に示すpre_methodは,現在の時間を取得し,それをプライベート変数に保存し,メッセージを出力します。同様に,post_methodも現在の時間を取得し,pre_methodが呼び出されてからどれくらい時間がたったかを調べ,経過時間を出力します。
package UtilityObjectWrappers; import com.inprise.vbroker.interceptor.*; public class TimingUntypedObjectWrapper implements UntypedObjectWrapper { private long time; public void pre_method(String operation, org.omg.CORBA.Object target, Closure closure) { System.out.println("Timing: " + ((com.inprise.vbroker.CORBA.Object) target). _object_name() + "->" + operation + "()"); time = System.currentTimeMillis(); } public void post_method(String operation, org.omg.CORBA.Object target, org.omg.CORBA.Environment env, Closure closure) { long diff = System.currentTimeMillis() - time; System.out.println("Timing: Time for call \t" + ((com.inprise.vbroker.CORBA.Object)target). _object_name() + "->" + operation + "() = " + diff + " ms."); } }
pre_methodとpost_methodは表21-2のパラメタを受け取ります。
表21-2 pre_methodおよびpost_methodメソッドの共通引数
パラメタ | 説明 |
---|---|
operation | 目的のオブジェクトでリクエストしたオペレーションの名前 |
target | 目的のオブジェクト |
closure | このオブジェクトラッパーのメソッド呼び出し用にデータを保存する領域 |
post_methodはEnvironmentパラメタも受け取ります。Environmentパラメタは,メソッド呼び出しの前の手順で起こる可能性のある例外をユーザに通知する際に使えます。
All Rights Reserved. Copyright (C) 2006, Hitachi, Ltd.
COPYRIGHT (C) 1992-2004 Borland Software Corporation. All rights reserved.