Topics
Enterprise Architecture
Paco Gómez著
2007年11月14日(翻訳記事2008年2月7日)
位置ベースの情報システムは、継続的なデータストリームを生み出します。例えば、物流企業所有の各トラックの現在位置を捕捉する場合などが考えられます。BEA WebLogic Event Server(WLEvS) は位置データをリアルタイムに処理して、特定の場所への接近の状況や、事前に設定された経路からの逸脱など、重要なパターンを効率的に検出できます。 BEA WebLogic Event Serverの強力な機能は、位置情報をほかの種類のデータと関連付け、イベント処理言語(EPL)によって、大量のデータフィードの処理、複雑なビジネスルールの取得を行うことができます。
この記事では、位置ベースシステムのユースケースに加えて、BEA WebLogic Event Serverと Web 2.0技術でこのシステムを実装する方法を説明します。このユースケースは物流、運輸、流通などの企業、公共機関に関係があります。
編集者の注釈:Pacoのブログを参照してください。このブログでは、アプリケーションのデモビデオとソースコードを公開しています。
サンタローザからサンノゼへ向かっているトラックがあります。地図上でトラックの位置を示し、トラックが目的地の15マイル(1マイルは約1.6km)圏内に入ると警告が出るように設定します。このシナリオを図1に表します。
図1. 赤いマーカーはトラックがサンノゼに近いことを示す
この単純なユースケースを見ると、目的地への接近を警告するなど、位置ベースの情報システムでBEA WebLogic Event Serverを活用して有益な状況を検出する方法がわかります。
この例の第2の目的は、BEA WebLogic Event Serverを既存のインフラストラクチャと統合して高度なアプリケーションを構築する方法を説明することです。トラックの位置はリアルタイムで地図に表 示され、BEA WebLogic Event Serverによって接近の警告が出されます。データベース、JMSサーバとの統合、使用されるWeb 2.0技術についても見直していきます。
まとめると、実装するソリューションは、次の2つの主要コンポーネントで構成されています。
実運用環境では、トラックがGPSユニットを搭載して、BEA WebLogic Event Serverを実行している中央サーバに位置データを転送します。この実装例では、BEA WebLogic Event Serverの一部であるloadgenユー ティリティを使用して、GPSデータフィードをシミュレートします。定義済みの時間間隔で、事前に記録された位置の座標情報(緯度と経度)をBEA WebLogic Event Serverに送信しておきます。図2には、BEA WebLogic Event Serverで実装されるイベント処理ネットワーク(EPN)を示します。
図2. イベント処理ネットワーク - EPN(画像をクリックすると、大きな画像が表示されます)
位置イベントは、EPNに入り、2つの並列する分岐プロセスによって処理されます。
EPNを詳しく見てみましょう。loadgenユーティリティはファイルからカンマ区切り値を読み取り、TCPソケットを通じてBEA WebLogic Event Serverにこれらの値を送信します。BEA WebLogic Event Serverと共に配布されるcsvAdapterは、TCPサーバソケットを使用してこれらの値を受信し、接続されたストリームコンポーネントにこれら の値をイベントとして送信します。ストリームは、リンクされたすべてのプロセスにイベントを配信します。
プロセスは、イベント処理言語のルールを受信イベントに適用します。イベントがルールに一致する場合、プロセスは接続されたストリームに別のイベントを送信します。この記事の後半では、プロセス内で定義されるルールを説明します。
各分岐プロセスの最後には、イベントを受信するコンポーネントと、外部サーバにデータを送信するコンポーネントの2つの POJOコンポーネントがあ ります。距離をチェックする分岐プロセスは接近の警告を生成します。この警告は、外部のWebLogic JMSサーバ上のJMSトピックに向けてメッセージとして送信されます。イベントを記録する分岐プロセスはJDBCを使用してOracleデータベースに 接続し、すべてのGPSイベントを記録します。
EPLルールは、EPNのプロセスで実行されます。イベントを記録する分岐プロセスには、すべてのイベントを通過させる単純なルールが設定されています。
select * from GPSInputEvent retain 1 event
このルールのGPSInputEventは、リポジトリに登録されるイベントタイプの1つです。これは、イベントデータがある別のPOJOによって実装されます。
距離を計算する分岐プロセスには、さらに複雑なルールがあります。
select * from ( insert into GPSDistanceEvent select id, lat, lon, time, seq, Utils.distance(lat, lon, 37.352889, -121.905531) as distance, 'San Jose, CA' as target from GPSInputEvent ) retain all events where distance < 15 and target = 'San Jose, CA'
このルールでは、目的地への距離に応じてGPSイベントがフィルタリングされます。内側のselect文は、現在の位置と目的地の間の距離を計算します。この計算はユーザ定義関数Utils.distanceで実行されます。この関数は、Javaクラスの静的メソッドです。入力パラメータは現在の位置と目的地の緯度および経度です。エイリアス(distance)は、外側のselect文で後で使用するために、戻り値に対して設定されています。
ネストしたselect文を使用する理由は、distance関数が1回だけ評価されるようにするためです。関数によってCPUまたはI/Oの処理能力が多く使用される場合、このような設定にすると実行時間が短くなります。
標準的なJDBCおよびJMS APIは、ビジネスコンポーネントで使用され、プロセスでフィルタリングされたイベントを受信します。
JDBCの場合、データソースは BEA WebLogic Event Serverドメイン構成ファイル(config/config.xml)で定義されます。
<data-source> <name>oracle.xe</name> <driver-params> <url>jdbc:oracle:thin:@localhost:1521:XE</url> ... </data-source>
ビジネスロジックのコンポーネントには、@Service メソッド注釈を使用してこのデータソースを注入して持つことができます。
@Service(filter = "(Name=oracle.xe)")
public void setDataSourceService(DataSourceService dss) {
this.dataSource = dss.getDataSource();
}
リモートのBEA WebLogic Server JMSトピックにアクセスする場合は、JNDIテンプレートが EPNアセンブリファイル内で次のように定義されます。
<bean id="wlsjndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">
weblogic.jndi.WLInitialContextFactory
</prop>
<prop key="java.naming.provider.url">
t3://localhost:7001
</prop>
</props>
</property>
</bean>
<bean id="outboundMessageAdapter"
class="com.bea.wlevs.demo.gpstracking.OutboundMessageAdapter"
factory-method="createInstance">
<constructor-arg ref="wlsjndiTemplate"/>
</bean>
このBeanは、Springフレームワークによってコンポーネントに注入されます。このコンポーネントでは、接続ファクトリとトピックのJNDI 名を取得するためにこのBeanが使用されます。これらの2つのJNDIオブジェクトを使用すると、コンポーネントはJMSトピックにメッセージを送信で きます。
アプリケーションのユーザインタフェースは、Web 2.0技術を使用して開発されました。図3では、BEA WebLogic Event Serverが生成した情報と警告をJMSとDBサーバから取得して、ユーザのブラウザに表示する方法を示します。
図3. ソリューションの全体的アーキテクチャ(画像をクリックすると、大きな画像が表示されます)
Webアプリケーションは、 Yahoo! Maps JavaScript - Flash APIと BEA WebLogic Server 10上で動作するカスタムの Beehiveアプリケーションのマッシュアップです。ブラウザはAjaxを使用してWebLogicに対してポーリングを実行し、最後の要求以降に発生した新しい位置情報と警告を確認します。アプリケーションはデータベースで検索を実行し、 JSON形 式で新しいデータを送信します。ページ内のJavaScriptは、ユーザによる操作やページ情報の更新を行わずに、バックグラウンドで地図上に新しい マーカーを追加します。最終的な結果としては、BEA WebLogic Event Serverでリアルタイムに処理された直後に、トラックの現在位置が地図に表示されます。次の図では、ユーザインタフェースの一部の詳細情報を示しま す。
図4. 2つの異なる距離の警告が表示されたアトランタからの移動(画像をクリックすると、大きな画像が表示されます)
図5. マーカーの拡張情報とテキスト警告の詳細
BEA WebLogic Event Serverは、データの生成を受けて位置ベースのデータからリアルタイムに関連パターンを検出するインフラストラクチャを提供します。この機能は、新し い優れたアプリケーションのために、多くのチャンスを生み出しています。次に、いくつかのカテゴリと例を紹介します。
BEA WebLogic Event Serverは、位置ベースの情報システムで関連パターンを検出するために最適です。遅延なくリアルタイムで処理が行われるように設計されているので、接 近、要件の順守、グループの条件、複雑な相関関係などのカテゴリにおいて、重要なイベントを監視および警告するためのアプリケーションを設計できます。
この記事で説明しているユースケースでは、BEA WebLogic Event Serverを使用して特定位置への車両の接近を検出し、Web 2.0技術を使用して動的なグラフィカルインタフェースで情報を表示しています。
このユースケースでご協力いただいたAlexandre Alves氏、David Read氏、James Taylor氏、Mark dos Santos氏には、ここで謝意を述べさせていただきます。
Paco Gómezは、1999年以来、BEA Systemsのシニア主席システムエンジニアとして、お客様のソリューション構築を支援しています。