| 3. カスタマイズ |
本編では、OLF/TP Adapterを通してバックエンドサーバからの非同期電文(Inboundメッセージ)を受信するAPコンポーネントについて説明しています。
| 3.1. 非同期通信機能 |
OLF/TP Adapterは、バックエンドサーバからの非同期電文をAPコンポーネントに通知する機能を提供しています。 APコンポーネントへの通知は、Common Client Interface(CCI)のMessageListenerを利用する方法と Java Message Service(JMS)のMessageListenerを利用する方法の2通りをサポートしています。
CCIのMessageListenerを利用する場合、OLF/TP Adapterは、受信した非同期電文をCCIのRecordオブジェクトにして APコンポーネントに配送します。このため、APコンポーネントのビジネスロジックでは CCIのRecordを操作してバックエンドサーバからの非同期電文を扱います。
一方、JMSのMessageListenerを利用する場合、OLF/TP Adapterは、受信した非同期電文をCCIのRecordオブジェクトにした後 JMSのObjectMessageオブジェクトにセットしてJMSに配送します。 その後、JMSからAPコンポーネントにObjectMessageオブジェクトが配送されます。 このため、APコンポーネントのビジネスロジックでは ObjectMessageオブジェクトからRecordを取得し、取得したRecordを操作してバックエンドサーバからの非同期電文を扱います。
| 3.1.1. APコンポーネントの作成 |
OLF/TP Adapterを通して非同期電文(Inboundメッセージ)を受信するAPコンポーネントは、 APサーバを利用する環境の場合、Message-Driven Beanで作成しておく必要があります。 また、APサーバを利用しない環境の場合は、MessageListenerをimplementsして APコンポーネントを作成しておく必要があります。
非同期電文を受信する処理は、OnMeeageメソッドに記述します。
以下に、コーディング例を示します。
[CCIのMessageListenerを利用する場合]
|
public Record onMessage(Record arg0) throws ResourceException { try { javax.resource.cci.IndexedRecord rec = (javax.resource.cci.IndexedRecord) arg0; System.out.println("Message received: " + rec.get(0)); // 応答がない場合、nullで返却します。 // 応答がある場合はRecordに設定して返却することも可能です。 return null; } catch (Exception ex) { throw new ResourceException(ex.getMessage()); } } |
[JMSのMessageListenerを利用する場合]
|
public void onMessage(Message arg0) { try { if (arg0 instanceof ObjectMessage) { ObjectMessage objmsg = (ObjectMessage) arg0; Object obj = objmsg.getObject(); javax.resource.cci.IndexedRecord rec = (javax.resource.cci.IndexedRecord) obj; System.out.println("Message received: " + rec.get(0)); } else { System.out.println("Message of wrong type: " + arg0.getClass().getName()); } } catch (Exception ex) { ex.printStackTrace(); } } |
注意:非同期受信機能を使用するOLF/TP Adapterは、非同期受信を行うAPコンポーネントからのみ利用してください。
| 3.1.2. 環境設定 |
非同期通信機能を使用するためには、OLF/TP Adapterの配備記述子に以下の定義を行います。
(1) 接続定義の構成プロパティに次の定義を追加します
| プロパティ名 | 型 | 説明 |
| ASync | java.lang.Boolean | trueを指定します |
(2) メッセージリスナの定義を行います
[CCIのMessageListenerを利用する場合]
リスナタイプ:javax.resource.cci.MessageListener
活性仕様クラス:jp.co.nec.WebOTX.connector.olftp.spi.ActivationSpecImpl
構成プロパティ:RecordType
構成プロパティ詳細
| プロパティ名 | 型 | 説明 |
| RecordType | java.lang.String | Record型を指定します。以下のRecord型が指定可能です 。 ・IndexedRecord ・MappedRecord |
※OLF/TP Adapterの配備記述子では、プロパティ名のみを定義します。
値については、APコンポーネント側で定義するようになります。
[JMSのMessageListenerを利用する場合]
リスナタイプ:javax.jms.MessageListener
活性仕様クラス:jp.co.nec.WebOTX.connector.olftp.spi.JMSActivationSpecImpl
構成プロパティ:RecordType, JMSConnectionFactoryName
構成プロパティ詳細
| プロパティ名 | 型 | 説明 |
| RecordType | java.lang.String | Record型を指定します。以下のRecord型が指定可能です 。 ・IndexedRecord ・MappedRecord |
| JMSConnectionFactoryName | java.lang.String | QueueConnectionFactoryのJNDI名を指定します。 |
※OLF/TP Adapterの配備記述子では、プロパティ名のみを定義します。
値については、APコンポーネント側で定義するようになります。
JMSを利用する場合は、物理的な送信先の追加やJMSリソースの登録(Queue および QueueConnectionFactory) を行う必要があります。これらの定義については、JMSのマニュアルを参照してください。 APコンポーネントがMessage-Driven Beanの場合、Message-Drivenの定義を行う必要があります。これらの定義についてはEJBのマニュアルを参照してください。