Red Hat Training
A Red Hat training course is available for JBoss Enterprise SOA Platform
ESB プログラマーガイド
このガイドは、ソフトウェアエンジニア向けです。
概要
はじめに
1. ドキュメント規則
1.1. 表記規則
等幅ボールド
現在の作業ディレクトリーのファイルmy_next_bestselling_novel
の内容を表示するには、シェルプロンプトで cat my_next_bestselling_novel コマンドを入力し、Enter を押してコマンドを実行します。
Enter を押してコマンドを実行します。Ctrl+Alt+F2 を押して、仮想ターミナルに切り替えます。
等幅ボールド
で示されます。以下に例を示します。
ファイル関連のクラスには、ファイルシステムのfilesystem
、ファイルのfile
、ディレクトリーのdir
が含まれます。各クラスには、独自の関連付けられたパーミッションセットがあります。
メインメニューバーから System → Preferences → Mouse を選択し、Mouse Preferences を起動します。Buttons タブで、Left-handed mouse チェックボックスを選択し、Close をクリックしてメインのマウスボタンを左から右に切り替えます (マウスを左手で使い易くします)。特殊文字を gedit ファイルに挿入するには、メインメニューバーから Applications → Accessories → Character Map を選択します。次に、Character Map メニューバーから Search → Find… を選択し、Search フィールドに文字の名前を入力して Next をクリックします。目的の文字が Character Table で強調表示されます。この強調表示した文字をダブルクリックして Text to copy フィールドに配置し、Copy ボタンをクリックします。ここでドキュメントに戻り、gedit メニューバーから Edit → Paste を選択します。
ssh を使用してリモートマシンに接続するには、シェルプロンプトで ssh username@domain.name を入力します。リモートマシンがexample.com
で、そのマシン上でのユーザー名が john の場合は、ssh john@example.com と入力します。mount -o remount file-system コマンドにより、指定したファイルシステムが再マウントされます。たとえば、/home
ファイルシステムを再マウントする場合、コマンドは mount -o remount /home となります。現在インストールされているパッケージのバージョンを表示するには、rpm -q package コマンドを使用します。これにより、package-version-release のような結果が返されます。
Publican は DocBook 公開システムです。
1.2. 引用規則
mono-spaced roman
に設定され、以下のように表示されます。
books Desktop documentation drafts mss photos stuff svn books_tests Desktop1 downloads images notes scripts svgs
mono-spaced roman
に設定されますが、以下のように構文の強調表示が追加されます。
static int kvm_vm_ioctl_deassign_device(struct kvm *kvm, struct kvm_assigned_pci_dev *assigned_dev) { int r = 0; struct kvm_assigned_dev_kernel *match; mutex_lock(&kvm->lock); match = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head, assigned_dev->assigned_dev_id); if (!match) { printk(KERN_INFO "%s: device hasn't been assigned before, " "so cannot be deassigned\n", __func__); r = -EINVAL; goto out; } kvm_deassign_device(kvm, match); kvm_free_assigned_device(kvm, match); out: mutex_unlock(&kvm->lock); return r; }
1.3. 注記および警告
2. ヘルプの利用とフィードバック提供
2.1. ヘルプが必要ですか ?
- Red Hat 製品に関する技術サポート記事の知識ベースの検索または閲覧。
- Red Hat グローバルサポートサービス (GSS) へのサポートケースの送信。
- その他の製品ドキュメントへのアクセス。
2.2. ご意見をお寄せください
第1章 はじめに
1.1. ビジネス統合
1.2. サービス指向アーキテクチャーとは
はじめに
SOA (Service Oriented Architecture) は単一のプログラムまたはテクノロジーではありません。ソフトウェア設計パラダイムと見なします。
1.3. サービス指向アーキテクチャーの重要なポイント
- 交換される メッセージ
- サービスリクエスターおよびプロバイダーとして動作する エージェント
- メッセージを送受信できるようにする 共有トランスポートメカニズム。
1.4. JBoss Enterprise SOA Platform とは
1.5. Service-Oriented Architecture Paradigm
- サービスプロバイダー
- サービスプロバイダーはサービスへのアクセスを許可し、サービスの説明を作成し、サービスブローカーに公開します。
- サービスリクエスター
- サービスリクエスターは、サービスブローカーが提供するサービスの説明を検索して、サービスを検出します。リクエスターはサービスプロバイダーが提供するサービスにバインドするロールも果たします。
- サービスブローカー
- サービスブローカーは、サービスの説明のレジストリーをホストします。リクエスターをサービスプロバイダーにリンクします。
1.6. コアおよびコンポーネント
1.7. JBoss Enterprise SOA Platform のコンポーネント
- 完全な Java EE 準拠のアプリケーションサーバー (JBoss Enterprise Application Platform)
- Enterprise Service Bus (JBoss ESB)
- ビジネスプロセス管理システム (jBPM)
- ビジネスルールエンジン (JBoss ルール)
- オプションの JBoss Enterprise Data Services (EDS) 製品のサポート。
1.8. JBoss Enterprise SOA Platform の機能
- JBoss Enterprise Service Bus (ESB)
- ドメインはサービス間でメッセージを送信し、それらを変換して、異なるタイプのシステムで処理できるようにします。
- Business Process Execution Language (BPEL)
- Web サービスを使用して、この言語を使用してビジネスルールをオーケストレーションできます。これは、ビジネスプロセス命令を簡単に実行するために SOA に含まれています。
- Java Universal Description、Discovery and Integration (jUDDI)
- これは SOA のデフォルトサービスレジストリーです。ここで説明する内容は、インストラクター上のサービスに関する情報をすべて保管する場所です。
- Smooks
- この変換エンジンは SOA と組み合わせて使用してメッセージを処理できます。また、メッセージを分割して正しい宛先に送信するためにも使用できます。
- JBoss ルール
- これは、SOA にパッケージ化されたルールエンジンです。受信するメッセージからデータを推測して、実行する必要があるアクションを判別できます。
1.9. JBoss Enterprise SOA Platform の JBossESB コンポーネントの機能
- 複数のトランスポートおよびプロトコル
- リスナーアクションモデル (これにより、サービスを相互に選択可能)
- コンテンツベースのルーティング (JBoss Rules エンジン、XPath、Regex、および Smooks 経由)
- サービスオーケストレーション機能を提供するために JBoss Business Process Manager (jBPM) との統合
- ビジネスルールの開発機能を提供するために、JBoss ルールとの統合
- BPEL エンジンとの統合。
- さまざまなトランスポートメカニズム (電子メールや JMS など) と連携するよう設定されます。
- 汎用オブジェクトリポジトリーとして使用します。
- プラグ可能なデータ変換メカニズムを実装できるようにします。
- 対話のロギングをサポートします。
org.jboss.internal.soa.esb
と org.jboss.soa.esb
の 2 つのツリーがあります。org.jboss.internal.soa.esb
パッケージの内容をそのまま使用します。これは、通知なしに変更される可能性があるためです。これとは対照的に、org.jboss.soa.esb
パッケージ内のすべての内容は、Red Hat の非推奨ポリシーでカバーされます。
1.10. タスク管理
1.11. 統合のユースケース
1.12. ビジネス環境での JBoss Enterprise SOA Platform の使用
パート I. はじめに
第2章 前提条件
2.1. 本ガイドの対象者
2.2. 本ガイドの目的
2.3. データのバックアップ
2.4. Red Hat ドキュメントサイト
2.5. 変数名:SOA_ROOT ディレクトリー
jboss-soa-p-5
ディレクトリーです。ただし、スタンドアロン編集では、jboss-soa-p-standalone-5
ディレクトリーになります。
SOA_ROOT
と呼ばれます。この名前がある場合は、必要に応じて jboss-soa-p-5
または jboss-soa-p-standalone-5
のいずれかを置き換えます。
2.6. 変数名: PROFILE
第3章 JBoss エンタープライズ SOA プラットフォームの紹介
3.1. Enterprise Service Bus
3.2. Enterprise Service Bus のコアコンポーネント
- メッセージリスニングとメッセージフィルタリングのコード
- メッセージリスナーは、インバウンドメッセージ (JMS キューまたはトピック、ファイルシステムなど) をリッスンするルーターとして機能します。次に、メッセージを処理パイプラインに提示します。処理パイプラインは、メッセージをフィルタリングして (アウトバウンドルーター経由で) 別のメッセージエンドポイントにルーティングします。
- データ変換コンポーネント
- これらは Smooks と XSLT に基づいています。
- コンテンツベースルーター
- このルーターでは、本文の情報からメッセージの宛先を推測します。
- メッセージリポジトリー
- これは、ESB 経由で交換されたメッセージやイベントを保存するために使用されます。
3.3. EDS と JBoss Enterprise SOA Platform の統合
- サービス指向アーキテクチャーのパターンとベストプラクティス
- レポートと分析の有効化
- マスターデータサービス
- データのガバナンスとコンプライアンス
- 異種データストアへのリアルタイムの読み取りおよび書き込みアクセス
- 分散データへのアクセスを簡素化することによる迅速なアプリケーション開発
- アクセス制御と監査の一元化
3.4. Enterprise Data Services の概要
- EDS サービス
- EDS サービスは、ビジネスアプリケーションと 1 つ以上のデータソースの間に配置されます。これらのデータソースの統合を調整して、実行時にビジネスアプリケーションからアクセスできるようにします。
- 設計ツール
- 特定のデータ統合ソリューションに向けた EDS サービス設定時のユーザー支援に、さまざまな設計ツールが利用可能です。
- 管理ツール
- 管理者は、デプロイメントされた EDS サービスを設定および監視するために、さまざまな管理ツールを使用できます。
図3.1 Enterprise Data Services の概要
3.5. Enterprise Data Services を使用した開発
jdbc:teiid:vdb_name@mm://localhost:31000
) です。
パート II. 仮説
第4章 サービスとメッセージ
4.1. サービス
4.1.1. サービス
jboss-esb.xml
設定ファイル内で設定されます。
4.1.2. アクションパイプライン
4.1.3. ESB 対応
4.1.4. メッセージリスナー
org.jboss.soa.esb.message.Message
形式のメッセージのみを受け入れることができます。各ゲートウェイリスナーには、対応する ESB リスナーが定義されている必要があります。
4.1.5. ServiceInvoker
org.jboss.soa.esb.client.ServiceInvoker
) は、指定されたサービスへのメッセージの配信を管理します。また、エンドポイント参照の読み込みと courier の選択も管理するため、メッセージ配信用に一元的なインターフェイスを提供します。
4.1.6. InVM トランスポート
4.1.7. 最初のサービスの作成
<?xml version = "1.0" encoding = "UTF-8"?> <jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"> <services> <service category="Retail" name="ShoeStore" description="Acme Shoe Store Service" invmScope="GLOBAL"> <actions> <action name="println" class="org.jboss.soa.esb.actions.SystemPrintln" /> </actions> </service> </services> </jbossesb>
ServiceInvoker invoker = new ServiceInvoker(“Retail”, “ShoeStore”); Message message = MessageFactory.getInstance().getMessage(); message.getBody().add(“Hi there!”); invoker.deliverAsync(message);
Retail:ShoeStore
サービスの利用可能なエンドポイントアドレスを検索します。レジストリーは、クライアントから使用可能なエンドポイントの 1 つにメッセージを送信するプロセスを自動的に処理します。メッセージを転送するプロセスは、クライアントに対して完全に透過的です。
invmScope="GLOBAL"1
を使用して有効化されています。サービスにエンドポイントを追加するには、それらを明示的に追加する必要があります。
4.1.8. メッセージリスナーの種類
- ゲートウェイリスナー
- このタイプのリスナーは、ESB に対応していないメッセージを ESB バスにプッシュするために使用されるゲートウェイエンドポイントを設定します。アクションパイプラインに送信する前に、メッセージを ESB メッセージ内にラップすることで、メッセージを ESB が理解できる形式に変更します。
- ESB 対応リスナー
- このタイプのリスナーは、ESB 対応エンドポイントを作成し、ESB 対応コンポーネント間で ESB メッセージを交換するために使用されます。
4.1.9. ゲートウェイリスナー
org.jboss.soa.esb.message.Message
形式に変換します。この変換は、ゲートウェイの種類に応じてさまざまな方法で行われます。変換が行われると、ゲートウェイリスナーはデータを正しい宛先にルーティングします。
4.1.10. サービスへのゲートウェイリスナーの追加
<?xml version = "1.0" encoding = "UTF-8"?> <jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/ trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"> <providers> <jms-provider name="JBossMQ" connection-factory="ConnectionFactory"> <jms-bus busid="shoeStoreJMSGateway"> <jms-message-filter dest-type="QUEUE" dest-name="queue/shoeStoreJMSGateway"/> </jms-bus> </jms-provider> </providers> <services> <service category="Retail" name="ShoeStore" description="Acme Shoe Store Service" invmScope="GLOBAL"> <listeners> <jms-listener name="shoeStoreJMSGateway" busidref="shoeStoreJMSGateway" is-gateway="true"/> </listeners> <actions> <action name="println" class="org.jboss.soa.esb.actions.SystemPrintln" /> </actions> </service> </services> </jbossesb>
ServiceInvoker
は、サービスのローカル InVM エンドポイントが利用可能な場合、常にそちらが優先的に使用されます。)
4.2. メッセージ
4.2.1. ESB メッセージ
org.jboss.soa.esb.message
インターフェイスによって定義された形式を取得するメッセージです。この標準化された形式は、ヘッダー、本文 (ペイロード)、および添付ファイルで設定されます。すべての ESB 対応のクライアントとサービスは、メッセージを使用して相互に通信します。
4.2.2. ESB メッセージのコンポーネント
- Header
- ヘッダーには、宛先エンドポイント参照、送信者エンドポイント参照、および応答先などの情報が含まれています。これはすべて、一般的なメッセージレベルの機能情報です。
- コンテキスト
- これは、メッセージをさらに説明する追加情報です。たとえば、トランザクションまたはセキュリティーデータ、最終的な受信者の ID、HTTP クッキー情報などです。
- 本文
- メッセージの実際の内容。
- 異常
- メッセージに関連付けられたエラー情報。
- 添付ファイル
- メッセージに関連付けられた添付ファイル (追加ファイル)。
- プロパティー
- メッセージ固有のプロパティー (たとえば、 jbossesb.message.idプロパティーは、メッセージごとに一意の値を指定します)。
<xs:complexType name="Envelope"> <xs:attribute ref="Header" use="required"/> <xs:attribute ref="Context" use="required"/> <xs:attribute ref="Body" use="required"/> <xs:attribute ref="Attachment" use="optional"/> <xs:attribute ref="Properties" use="optional"/> <xs:attribute ref="Fault" use="optional"/> </xs:complexType>
4.2.3. メッセージオブジェクトをキューに送信する方法
概要
JBoss Enterprise SOA Platform 製品は、ローカルサーバー上の JNDI の存在を識別するためにパラメーターが設定されたプロパティーオブジェクトを使用します。次に、これは、新しいネーミングコンテキストを作成するための呼び出しのパラメーターとして使用されます。このネーミングコンテキストを使用して、ConnectionFactory を取得します。次に、ConnectionFactory が QueueConnection を作成し、これが QueueSession を作成します。この QueueSession は、Queue の Sender オブジェクトを作成します。Sender オブジェクトは、送信者の ObjectMessage を作成し、キューの送信に使用されます。
4.2.4. Message インターフェイス
org.jboss.soa.esb.message.Message
インターフェイスの実装です。
public interface Message { public Header getHeader (); public Context getContext (); public Body getBody (); public Fault getFault (); public Attachment getAttachment (); public URI getType (); public Properties getProperties (); public Message copy () throws Exception; }
4.2.5. メッセージヘッダー
4.2.6. メッセージヘッダーの形式
public interface Header { public Call getCall (); public void setCall (Call call); }
org.jboss.soa.esb.addressing.Call
クラスのインスタンスに含まれています。
public class Call { public Call (); public Call (EPR epr); public Call (Call copy); public void setTo (EPR epr); public EPR getTo () throws URISyntaxException; public void setFrom (EPR from); public EPR getFrom () throws URISyntaxException; public void setReplyTo (EPR replyTo); public EPR getReplyTo () throws URISyntaxException; public void setFaultTo (EPR uri); public EPR getFaultTo () throws URISyntaxException; public void setRelatesTo (URI uri); public URI getRelatesTo () throws URISyntaxException; public void copy(); public void setAction (URI uri); public URI getAction () throws URISyntaxException; public final boolean empty(); public void setMessageID (URI uri); public URI getMessageID () throws URISyntaxException; public String toString(); public String stringForum(); public boolean valid(); public void copy (Call from); }
org.jboss.soa.esb.addressing.Call
クラスは、一方向および要求と応答の両方の相互作用パターンをサポートします。
表4.1 org.jboss.soa.esb.addressing.Call
プロパティー
プロパティー | タイプ | 必須 | Description |
---|---|---|---|
終了 | EPR | はい | メッセージ受信者のアドレス。 |
From | EPR | いいえ | メッセージの発信元のエンドポイント。 |
ReplyTo | EPR | いいえ | このメッセージへの返信が送られる受信者を識別するエンドポイント参照。返信が必要な場合は、メッセージに ReplyTo が含まれている必要があります。送信者は、ReplyTo の内容を使用して返信メッセージを作成する必要があります。ReplyTo が存在しない場合には、From の内容を使用してソースへのメッセージを作成できます。メッセージに意味のある返信がない場合には、このプロパティーは存在しない可能性があります。このプロパティーが存在する場合、MessageID プロパティーは必須です。 |
FaultTo | EPR | いいえ | このメッセージに関する問題が送られる受信者を識別するエンドポイント参照。障害メッセージを作成する場合には、送信者は、応答するメッセージの FaultTo の内容を使用して、障害メッセージを作成する必要があります。FaultTo が存在しない場合、送信者は ReplyTo の内容を使用して障害メッセージを作成できます。FaultTo と ReplyTo の両方が存在しない場合には、送信者は From の内容を使用して障害メッセージを作成できます。送信者が障害メッセージを受信できない場合 (たとえば、一方向のアプリケーションメッセージである場合)、このプロパティーは存在しない可能性があります。このプロパティーが存在する場合、MessageID プロパティーは必須です。 |
アクション | URI | はい | このメッセージが意味するセマンティクスを一意に (そして不透明に) 区別する識別子。 |
MessageID | URI | 状況により異なる | このメッセージを時間と空間で一意に識別する URI。アプリケーションのインテントが異なる 2 つのメッセージでは、[MessageID] プロパティーを共有できません。メッセージは、通信障害など、あらゆる目的で再送信される可能性があり、同じ MessageID プロパティーを使用する可能性があります。このプロパティーの値は、同等以上の解釈が定義されていない不透明な URI です。返信が必要な場合は、このプロパティーが存在する必要があります。 |
4.2.7. To フィールド
4.2.8. メッセージコンテキスト
4.2.9. メッセージボディー
4.2.10. メッセージペイロード
4.2.11. シリアライズ
4.2.12. メッセージボディーの形式
public interface Body { public static final String DEFAULT_LOCATION = "org.jboss.soa.esb.message.defaultEntry"; public void add (String name, Object value); public Object get (String name); public byte[] getContents(); public void add (Object value); public Object get (); public Object remove (String name); public void replace (Body b); public void merge (Body b); public String[] getNames (); }
add
オプションを付けて、一意の名前を付けます。クライアントとサービスがバイト配列の場所を必要とする場合には、JBoss ESB 自体が使用するもの (ByteBody.BYTES_LOCATION) を使用できます。
4.2.13. メッセージ障害
4.2.14. 障害メッセージの形式
public interface Fault { public URI getCode (); public void setCode (URI code); public String getReason (); public void setReason (String reason); public Throwable getCause (); public void setCause (Throwable ex); }
4.2.15. メッセージのプロパティー
public interface Properties { public Object getProperty(String name); public Object getProperty(String name, Object defaultVal); public Object setProperty(String name, Object value); public Object remove(String name); public int size(); public String[] getNames(); }
java.util.Properties
を使用する properties は、JBoss Enterprise Service Bus 内に実装されていません。これは、使用できるクライアントとサービスの種類が制限されるためです。Web サービススタックは、同じ理由でそれらを実装しません。この制限に対処するには、現在の抽象化内に java.util.Properties
を組み込む必要があります。
4.2.16. メッセージ添付
4.2.17. メッセージ添付インターフェイス
public interface Attachment { Object get(String name); Object put(String name, Object value); Object remove(String name); String[] getNames(); Object itemAt (int index) throws IndexOutOfBoundsException; Object removeItemAt (int index) throws IndexOutOfBoundsException Object replaceItemAt(int index, Object value) throws IndexOutOfBoundsException; void addItem (Object value); void addItemAt (int index, Object value) throws IndexOutOfBoundsException; public int getUnnamedCount(); public int getNamedCount(); }
4.2.18. 適切な方法の選択
- 開発者は、クライアントがサービスと対話するために使用するコントラクトを定義します。その契約の一部として、航空券予約サービス (機能的) や本質的なトランザクション (非機能的) など、サービスの機能面と非機能面の両方を指定します。開発者は、サービスが理解できる操作 (メッセージ) も定義します。形式 (Java Serialized Message または XML など) は、メッセージ定義の一部として定義されます。(この例の場合、それらはトランザクションコンテキスト、座席番号、顧客名などになります。) コンテンツを定義するときに、サービスがペイロードを見つけることができるメッセージの中の場所を指定できます。(これは、添付ファイルまたは特定の名前付きオブジェクトの形式にすることも、必要に応じてデフォルトの名前付きオブジェクトにすることもできます。) 決定するのは完全にサービス開発者次第です。唯一の制限は、オブジェクトと添付ファイルにはグローバルに一意の名前を付ける必要があることです。そうしないと、1 つのサービスまたはアクションが別のサービスまたはアクションのペイロードの一部を誤って取得する可能性があります (同じメッセージボディーが複数のホップで転送されている場合)。
- ユーザーは、メッセージ内のどこにペイロードを配置する必要があるかを定義するサービスのコントラクト定義を (UDDI レジストリーまたは帯域外通信のいずれかを介して) 取得できます。他の場所に置かれた情報はほぼ確実に無視され、サービスが正しく動作しなくなります。
4.2.19. メッセージボディーへのデータの追加に関するアドバイス
MessagePayloadProxy
を介してメッセージにデータを設定します。このクラスはデフォルト設定を処理しますが、デフォルトをオーバーライドすることもできます。
- get-payload-location: メッセージペイロードを取得する場所です。
- set-payload-location: メッセージペイロードの場所です。
4.2.20. レガシーメッセージペイロード Exchange の設定
手順4.1 タスク
jbossesb-properties.xml
ファイルをテキストエディターで開きます (vi SOA_ROOT/jboss-soa-p-5/jboss-as/server/PROFILE/deploy/jbossesb.sar/jbossesb-properties.xml)。- コアというタイトルのセクションまでスクロールします。
- use.legacy.message.payload.exchange.patterns プロパティーを true に設定します。
- ファイルを保存して終了します。
4.2.21. メッセージボディーの拡張
拡張機能の種類
org.jboss.soa.esb.message.body.content.TextBody
- Body のコンテンツは任意の文字列であり、getText および setText メソッドを介して操作できます。
org.jboss.soa.esb.message.body.content.ObjectBody
- ボディーのコンテンツはシリアル化されたオブジェクトで、getObject および setObject メソッドを介して操作できます。
org.jboss.soa.esb.message.body.content.MapBody
- ボディーのコンテンツはマップ (String、Serialized) で、setMap およびその他のメソッドを介して操作できます。
org.jboss.soa.esb.message.body.content.BytesBody
- 本体の内容は、任意の Java データ型を含むバイトストリームです。データ型のさまざまなセッターおよびゲッターメソッドを使用して操作できます。BytesMessage を作成したら、必要な操作方法に応じて、読み取り専用モードまたは書き込み専用モードに設定する必要があります。これらのモードを (readMode と writeMode を使用して) 切り替えることは可能ですが、モードが変更されるたびにバッファーポインターがリセットされます。すべての更新がボディーにプッシュされたことを確認するには、終了時にフラッシュを呼び出す必要があります。
create
メソッドがあります。たとえば、createTextBody
などです。これを使用して、その特定のタイプのメッセージを作成および初期化します。作成したら、生のボディーを編集するか、インターフェイスのメソッドを使用して、メッセージを直接操作します。ボディーの構造は送信後も維持されるため、メッセージ受信者はそれを作成したインターフェイスのメソッドを使用して操作できます。
4.2.22. エンドポイント参照
4.2.23. 論理 EPR
4.2.24. 論理 EPR の使用
論理 EPR
を使用することを最もお勧めします。 LogicalEPR
のクライアントは、提供されたサービス名とカテゴリーの詳細を使用して、そのサービスの物理エンドポイントを検索できます。クライアントは、サービスの使用が目的である場合に検索します。クライアントは、状況に合わせて物理エンドポイントタイプを選択することもできます。
4.2.25. FaultTo フィールド
4.2.26. Dead Letter Queue
4.2.27. ReplyTo フィールド
ReplyTo
デフォルトの一部を使用するには、システム管理者が JBoss Enterprise Service Bus の 動作を具体的に設定する必要があることに注意してください。)
4.2.28. ReplyTo フィールド設定の表
表4.2 トランスポートによるデフォルトの ReplyTo
トランスポート | ReplyTo |
---|---|
JMS | 元のリクエストの配信に使用された名前に基づいた名前のキュー: <request queue name>_reply。 |
JDBC | 元のリクエストの配信に使用された名前に基づいた名前を持つ、同じデータベース内のテーブル: <request table name>_reply_table.新しいテーブルには、要求テーブルと同じ列が必要です。 |
files | ローカルファイルでもリモートファイルでも、管理上の変更は必要ありません。応答は要求と同じディレクトリーに保存されますが、元の送信者だけが応答を取得できるように一意の接尾辞が付けられます。 |
4.2.29. メッセージのシリアル化に関するアドバイス
- データが保存される
- メッセージが異なる ESB プロセス間で送信される
- デバッグしている
org.jboss.soa.esb.message.format.MessageFactory
クラスから org.jboss.soa.esb.message.Message
インターフェイスのさまざまな実装を取得できます。
public abstract class MessageFactory { public abstract Message getMessage (); public abstract Message getMessage (URI type); public abstract void reset(); public static MessageFactory getInstance (); }
- MessageType.JBOSS_XML
- この実装は、メッセージの XML 表現を使用します。メッセージのスキーマは、
schemas/message.xsd
ファイルで定義されます。任意のオブジェクトをメッセージに追加できます。つまり、シリアライズ可能である必要はありません。したがって、メッセージをシリアライズする必要がある場合に、そのようなオブジェクトを XML との間でマーシャリングおよびアンマーシャリングするメカニズムを提供する必要がある場合があります。org.jboss.soa.esb.message.format.xml.marshal.MarshalUnmarshalPlugin
を介してこれを行います。public interface MarshalUnmarshalPlugin { public static final String MARSHAL_UNMARSHAL_PLUGIN = "org.jboss.soa.esb.message.format.xml.plugin"; public boolean canPack(final Object value); public boolean marshal (Element doc, Object param) throws MarshalException; public Object unmarshal (Element doc) throws UnmarshalException; public URI type (); }
- MessageType.JAVA_SERIALIZED
- これがデフォルトです。この実装では、メッセージのすべてのコンポーネントがシリアライズ可能である必要があります。また、メッセージの受信者が (Java クラスを介して) デシリアライズできる十分な情報を持っている必要があります。その URI は urn:jboss/esb/message/type/JAVA_SERIALIZED です。メッセージの XML 表現を使用します。メッセージのスキーマは、
schemas/message.xsd
ファイルで定義されます。その URI は urn:jboss/esb/message/type/JBOSS_XML です。また、すべてのコンテンツが Java シリアライズ可能である必要があります。シリアル化できないオブジェクトをメッセージに追加しようとすると、IllegalParameterException
エラーが発生します。その URI はurn:jboss/esb/message/type/JAVA_SERIALIZED
です。
org.jboss.soa.esb.message.format.MessagePlugin
を介して実行時に他のメッセージ実装を提供できます。
public interface MessagePlugin { public static final String MESSAGE_PLUGIN = "org.jboss.soa.esb.message.format.plugin"; public Object createBodyType(Message msg, String type); public Message getMessage (); public URI getType (); }
jbossesb-properties.xml
ファイルを介してシステムに識別される必要があります。(org.jboss.soa.esb.message.format.plugin 拡張子を持つプロパティー名を使用します。)
4.2.30. デフォルトのメッセージタイプの変更
手順4.2 タスク
- org.jboss.soa.esb.message.default.uri プロパティーを任意の URI 名に設定します。(デフォルトは JBOSS_XML です。)
- ファイルを保存して終了します。
4.2.31. マーシャリングプラグインの登録
手順4.3 タスク
jbossesb-properties.xml
ファイルをテキストエディターで開きます (vi SOA_ROOT/jboss-soa-p-5/jboss-as/server/PROFILE/deploy/jbossesb.sar/jbossesb-properties.xml)。- プラグインの名前を追加します。(MARSHAL_UNMARSHAL_PLUGIN という接頭辞で始まる必要があります。)
- ファイルを保存して終了します。
パート III. 開発
第5章 サービスの構築と使用
5.1. メッセージリスナーの設定プロパティー
リスナー
設定は、次の情報を提供する必要があります。
レジストリー
(service-category
、service-name
、service-description
、およびEPR-description
タグ名を参照してください。) オプションのremove-old-service
タグ名をtrue
に設定すると、Enterprise Service Bus はregistry
から既存のサービスエントリーを削除して、この新規インスタンスを追加します。すべてのエンドポイント参照を含むサービス全体が削除されるため、この機能は常に注意して使用してください。listener
クラスのインスタンス化 (listenerClass
タグ名を参照)。リスナー
が提供するエンドポイント参照。これはトランスポート固有です。次の例は、Java Message Service エンドポイント参照に対応しています (connection-factory
、destination-type
、destination-name
、jndi-type
、jndi-URL
、およびmessage-selector
タグ名を参照してください)。action pipeline
。これには 1 つ以上の <action> 要素が必要で、それぞれにclass
タグ名が含まれている必要があります。これらにより、どのaction
クラスがchain
の対象リンクに対してインスタンス化されるかが決まります。
<?xml version = "1.0" encoding = "UTF-8"?> <jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd" parameterReloadSecs="5"> <providers> <jms-provider name="JBossMQ" connection-factory="ConnectionFactory" jndi-URL="jnp://127.0.0.1:1099" jndi-context-factory="org.jnp.interfaces.NamingContextFactory" jndi-pkg-prefix="org.jboss.naming:org.jnp.interfaces"> <jms-bus busid="quickstartGwChannel"> <jms-message-filter dest-type="QUEUE" dest-name="queue/quickstart_helloworld_Request_gw"/> </jms-bus> <jms-bus busid="quickstartEsbChannel"> <jms-message-filter dest-type="QUEUE" dest-name="queue/quickstart_helloworld_Request_esb"/> </jms-bus> </jms-provider> </providers> <services> <service category="FirstServiceESB" name="SimpleListener" description="Hello World"> <listeners> <jms-listener name="JMS-Gateway" busidref="quickstartGwChannel" maxThreads="1" is-gateway="true"/> <jms-listener name="helloWorld" busidref="quickstartEsbChannel" maxThreads="1"/> </listeners> <actions> <action name="action1" class="org.jboss.soa.esb.samples. quickstart.helloworld.MyJMSListenerAction" process="displayMessage" /> <action name="notificationAction" class="org.jboss.soa.esb.actions.Notifier"> <property name="okMethod" value="notifyOK" /> <property name="notification-details"> <NotificationList type="ok"> <target class="NotifyConsole"/> </NotificationList> <NotificationList type="err"> <target class="NotifyConsole"/> </NotificationList> </property> </action> </actions> </service> </services> </jbossesb>
listener
オブジェクトをインスタンス化します (jms-listenerこれは、インターフェイス内でシリアル化された受信 ESB メッセージを待機します。次に、各受信メッセージを 2 つのステップ (<action> 要素) で構成される action pipeline
に配信します。
- アクション1:
MyJMSListenerAction
(例を次に示します)。 - notificationAction:
org.jboss.soa.esb.actions.SystemPrintln
クラス。
5.2. ファイルシステムゲートウェイリスナーの特性
5.3. パイプラインインターセプター
org.jboss.soa.esb.listeners.message.PipelineInterceptor
は、サービス設定に渡されるインターセプターと、パイプラインの最後、サービスのインスタンス化時、または例外が原因でパイプラインが失敗する時点の設定に使用できるインターフェイスです。
5.4. パイプラインインターセプターの操作
public void processMessage (Message msg, ConfigTree config)
。これは、jbossesb-properties.xml
設定ファイルで定義されたインターセプトポイントで呼び出されます。
jbossesb-properties.xml
ファイル (jbossesb.sar
アーカイブにある) のインターセプターセクションでパイプラインインターセプターを定義します。
- org.jboss.soa.esb.pipeline.failure.interceptors
- org.jboss.soa.esb.pipeline.instantiate.interceptors
- org.jboss.soa.esb.pipeline.start.interceptors
- org.jboss.soa.esb.pipeline.end.interceptors
jbossesb-properties.xml
ファイルに変更を加える必要があります。これにより、すべてのインスタンスが同じメタデータを処理できるようになります。
org.jboss.soa.esb.listeners.message.GenericPipelineInterceptor
のみが含まれています。任意で、具体的な実装を指定して使用するか決定できます。
5.5. ルーター
5.6. ルーター設定
5.7. Content-Based Router
5.8. 静的ベースのルーター
5.9. Notifier
5.10. ServiceInvoker
org.jboss.soa.esb.client.ServiceInvoker
) は、指定されたサービスへのメッセージの配信を管理します。また、エンドポイント参照の読み込みと courier の選択も管理するため、メッセージ配信用に一元的なインターフェイスを提供します。
5.11. ServiceInvoker を使用した開発
public class ServiceInvoker { public ServiceInvoker(Service service) throws MessageDeliverException; public ServiceInvoker(String serviceCategory, String serviceName) throws MessageDeliverException; public ServiceInvoker(Service service, List<PortReference.Extension> extensions); public Message deliverSync(Message message, long timeoutMillis) throws MessageDeliverException, RegistryException, FaultMessageException; public void deliverAsync(Message message) throws MessageDeliverException; public Service getService(); public String getServiceCategory(); }
5.12. RegistryException
5.13. FaultMessageException
5.14. MessageDeliverException
5.15. Java Message Service
5.16. JMS トランザクションセッション
5.17. IncompatibleTransactionScopeException
5.18. InVM
5.18.1. InVM トランスポート
5.18.2. InVM の制限事項
<service category="ServiceCat" name="Service2" description="Test Service"> <property name="inVMPassByValue" value="true" /> <actions mep="RequestResponse"> <action name="action" class="org.jboss.soa.esb.mock.MockAction" /> </actions> </service>
5.18.3. InVM を使用した開発
<service category="ServiceCat" name="ServiceName" description="Test Service"> <actions mep="RequestResponse"> <action name="action" class="org.jboss.soa.esb.listeners.SetPayloadAction"> <property name="payload" value="Tom Fennelly" /> </action> </actions> </service>
- GLOBAL: (デフォルト) サービスは、同じ Classloader スコープ内から InVM トランスポートを介して呼び出すことができます。
- NONE: InVM トランスポート経由でサービスを呼び出すことはできません。
5.18.4. 個々のサービスの InVM スコープの設定
手順5.1 タスク
- テキストエディターでファイルを開きます。
- サービス要素の invmScope 属性を設定します。
<service category="ServiceCat" name="ServiceName" invmScope="GLOBAL" description="Test Service"> <actions mep="RequestResponse"> <action name="action" class="org.jboss.soa.esb.listeners.SetPayloadAction"> <property name="payload" value="Tom Fennelly" /> </action> </actions> </service>
- ファイルを保存して終了します。
5.18.5. デプロイメントのデフォルトの InVM スコープ設定
手順5.2 タスク
- テキストエディターで
jbossesb-properties.xml
を開きます (vi jbossesb-properties.xml)。 - core:jboss.esb.invm.scope.default 設定プロパティーを設定します。(定義されたままの場合、デフォルトのスコープは GLOBAL です。)
- ファイルを保存して終了します。
5.18.6. InVM トランスポートに関連付けられたリスナースレッドの数の変更
手順5.3 タスク
- テキストエディターでファイルを開きます。
- 次のようにファイルを編集します。
<service category="HelloWorld" name="Service2" description="Service 2" invmScope="GLOBAL"> <property name="maxThreads" value="100" /> <listeners>... <actions>...
- ファイルを保存して終了します。
5.18.7. Lock-Step 配信
5.18.8. Lock Step 配信設定
- inVMLockStep
- これはブール値です。Lock Step 配信を有効にするかどうかを制御します。
- inVMLockStepTimeout
- これにより、メッセージの取得を待機している間はメッセージ配信がブロックされる最大期間 (ミリ秒単位)。
<service category="ServiceCat" name="Service2" description="Test Service"> <property name="inVMLockStep" value="true" /> <property name="inVMLockStepTimeout" value="4000" /> <actions mep="RequestResponse"> <action name="action" class="org.jboss.soa.esb.mock.MockAction" /> </actions> </service>
5.19. ロードバランシング
5.19.1. ロードバランシング
5.19.2. 負荷分散ポリシーの設定
手順5.4 タスク
- グローバル設定ファイルをテキストエディターで開きます: vi SOA_ROOT/jboss-as/server/PROFILE/deployers/esb.deployers/jbossesb-properties.xml
- org.jboss.soa.esb.loadbalancer.policy プロパティーまでスクロールダウンします。使用するポリシーで設定します。
- ファイルを保存して終了します。
5.19.3. 負荷分散ポリシー
表5.1 利用可能な負荷分散ポリシー
ポリシー名 | Description |
---|---|
最初に入手可能 | 正常なサービスバインディングが見つかった場合は、それが終了するまで使用されます。リスト内の次のエンドポイント参照が使用されます。このポリシーでは、2 つのサービスインスタンス間の負荷分散は行われません。 |
ラウンドロビン | 各エンドポイント参照がリスト順に使用される標準の負荷分散ポリシー。 |
ランダムロビン | これはラウンドロビンに似ていますが、選択はランダム化されます。 |
5.20. サービスコントラクトの定義
5.20.1. サービスコントラクト
5.20.2. サービスコントラクトスキーマの宣言
表5.2 サービスコントラクトの属性
名前 | 説明 | タイプ |
---|---|---|
inXsd | 単一の要素を表す、要求メッセージのスキーマを含むリソース。 | xsd:string |
outXsd | 単一の要素を表す、応答メッセージのスキーマを含むリソース。 | xsd:string |
faultXsd | それぞれが 1 つ以上の障害要素を表すスキーマのコンマ区切りリスト。 | xsd:string |
requestLocation | デフォルトの場所ではない場合、本文内のリクエストコンテンツの場所。 | xsd:string |
responseLocation | デフォルトの場所ではない場合、本文内の応答コンテンツの場所。 | xsd:string |
5.20.3. メッセージの検証
5.21. Web サービスエンドポイントを介した ESB サービスの公開
5.21.1. Web サービスエンドポイントを介した ESB サービスの公開
表5.3 Web サービス属性
名前 | Description |
---|---|
false | Web サービスエンドポイントは公開されません。 |
true | Web サービスエンドポイントが公開されます (デフォルト)。 |
表5.4 WS-Addressing 値
値 | Description |
---|---|
false | WS-Addressing はサポートされていません (デフォルト)。 |
true | WS-Addressing サポートが必要です。 |
表5.5 WS-Addressing プロパティー
プロパティー | Description |
---|---|
org.jboss.soa.esb.gateway.ebws.messageID | WS-Addressing メッセージ ID。 |
org.jboss.soa.esb.gateway.ebws.relatesTo | WS-Addressing RelatesTo URI を含む文字列配列。 |
org.jboss.soa.esb.gateway.ebws.relationshipType | RelatesTo URI に対応する WS-Addressing リレーションシップタイプを含む文字列配列。 |
<service category="ServiceCat" name="ServiceName" description="Test Service"> <actions mep="RequestResponse" inXsd="/request.xsd" outXsd="/response.xsd" webservice="false" validate="true"> <!-- .... > </actions> </service>
<service category="ServiceCat" name="ServiceName" description="Test Service"> <actions mep="RequestResponse" inXsd="/request.xsd" outXsd="/response.xsd" validate="true" requestLocation="REQUEST" responseLocation="RESPONSE"> <!-- .... --> </actions> </service>
第6章 その他のコンポーネント
6.1. メッセージストア
6.2. Smooks
6.3. Smooks の訪問者ロジック
6.4. データ変換
はじめに
クライアントとサービスは通常、同じ語彙を使用して通信します。ただし、これが当てはまらない場合があり、ある形式から別の形式に変換するためにオンザフライ変換メカニズムが必要になります。特に、大規模または長期にわたるデプロイメントなど、1 つのデータ形式がすべてのビジネスオブジェクトに適していると仮定するのは非現実的です。したがって、データ変換メカニズムが提供されています。
6.5. Content-Based Router
6.6. JBoss Rules Engine を使用したコンテンツベースのルーティング
action classes
を通じてこのエンジンと統合されます。
JBoss Rules
エンジンの DRL 言語で記述されたルーティングルールセット (あるいは、必要に応じて DSL 言語を使用することもできます)。- メッセージの内容。これは、JBoss Rules エンジンに送られるデータです (XML 形式またはメッセージに埋め込まれたオブジェクトとして送られます)。
- 宛先 (エンジンから出力される結果情報から導出されます)。
コンテンツベースのルーター
に送信されると、ルールセットがそのコンテンツを評価し、一連のサービス宛先を返します。
- org.jboss.soa.esb.actions.ContentBasedRouter: このアクションクラスは コンテンツベースのルーティング パターンを実装します。メッセージの内容と、その内容を評価するルールセットに基づいて、メッセージを 1 つ以上の宛先サービスにルーティングします。特定のルールセットまたはメッセージの組み合わせに一致する宛先がない場合には、コンテンツベースルーターは例外を出力します。このアクションはそれ以降のパイプライン処理を終了させるため、常にパイプラインの最後に配置してください。
- org.jboss.soa.esb.actions.ContentBasedWiretap: これは WireTap パターンを実装します。
WireTap
は、メッセージのコピーを制御チャネルに送信するエンタープライズ統合パターンです。WireTap
の機能は標準のコンテンツベースのルーターと同じですが、パイプラインは終了されません。これは後者の特徴であり、wire-tap として使用するのに適した特徴であるため、その名前になります。詳細は、 を参照してください。 - org.jboss.soa.esb.actions.MessageFilter: メッセージフィルター パターンを実装します。メッセージフィルターパターンは、特定のコンテンツ要件を満たしていない場合に、メッセージを削除できる場合に使用されます。つまり、ルールセットが宛先と一致しない場合は例外を出力しないことを除いて、コンテンツベースのルーターと同じように機能します。詳細は、を参照してください http://www.eaipatterns.com/Filter.html。
6.7. Service Registry
6.8. juddi レジストリー
6.9. juddi および JBoss Enterprise SOA Platform
juddi および JBoss Enterprise SOA Platform
JBoss Enterprise SOA Platform 製品には、jUDDI レジストリーの事前設定されたインストールが含まれています。特定の API を使用して、カスタムクライアントを介してこのレジストリーにアクセスできます。ただし、ビルドするカスタムクライアントは SOA Platform のサポート契約では対応されません。jUDDI の例、ドキュメント、および API の完全なセットには、次の場所からアクセスできます。http://juddi.apache.org/
第7章 メッセージ開発についてのチュートリアル
7.1. 概要
はじめに
概念的には、メッセージは SOA 開発アプローチの重要な要素です。メッセージには、クライアントとサービス間で送信されるアプリケーション固有のデータが含まれます。メッセージのデータは、サービスとそのクライアント間のコントラクトの重要な要素を表します。このセクションでは、このコンポーネントに使用するベストプラクティスを説明します。
- reserveSeat
- これはフライト番号とシート番号を取り、成功または失敗を示します。
- querySeat
- これはフライト番号とシート番号を取り、シートが現在予約されているかどうかを示します。
- upgradeSeat
- フライト番号と、2 つのシート番号(現在予約されているシートと、パッセンジャーが移動するもの)を取ります。
7.2. メッセージ構造
org.example.flight.opcode
という場所にある opcode
(操作コード)が文字列(reserve
, query
、upgrade
)として表示されると判断します。その他の文字列値(または値がない場合)は、メッセージが不正であると見なされます。
- シート番号の org.example.flight.seatnumber (整数)
- フライト番号の org.example.flight.flightnumber。文字列になります。
- アップグレードしたシート番号の org.example.flight.upgradenumber (整数)
表7.1 操作パラメーター
操作 | opcode | seatnumber | flightnumber | upgradenumber |
---|---|---|---|---|
reserveSeat | string: reserve | integer | String | 該当なし |
querySeat | string: query | integer | String | 該当なし |
upgradeSeat | string: upgrade | integer | String | integer |
7.3. サービスの開発
class AirlineReservationSystem { public void reserveSeat (...); public void querySeat (...); public void upgradeSeat (...); }
@Process public Message process (Message message) throws Exception { String opcode = message.getBody().get(“org.example.flight.opcode”); if (opcode.equals(“reserve”)) reserveSeat(message); else if (opcode.equals(“query”)) querySeat(message); else if (opcode.equals(“upgrade”)) upgradeSeat(message); else throw new InvalidOpcode(); return null; }
7.4. ペイロードのデコード
手順7.1 タスク
- process メソッドは開始のみになります。ここで、受信メッセージのペイロード(Body)をデコードするメソッドを提供する必要があります。
public void reserveSeat (Message message) throws Exception { String seatNumber = message.getBody().get(“org.example.flight.seatnumber”); String flight = message.getBody().get(“org.example.flight.flightnumber”); boolean success = airlineReservationSystem.reserveSeat(seatNumber, flight); // now create a response Message Message responseMessage = ... responseMessage.getHeader().getCall().setTo( message.getHeader().getCall().getReplyTo() ); responseMessage.getHeader().getCall().setRelatesTo( message.getHeader().getCall().getMessageID() ); // now deliver the response Message }
このコードは、ボディー内の情報を抽出し、一部のビジネスロジックでメソッドを呼び出すのに使用します。reserveSeat の場合、応答はクライアントによって予想されます。この応答メッセージは、ビジネスロジックによって返される情報と、元の受信したメッセージから取得した配信情報を使用して構築されます。この例では、受信メッセージの ReplyTo フィールドから取得した応答の To アドレスが必要です。また、元のリクエストと応答を関連付ける必要があります。応答の RelatesTo フィールドとリクエストの MessageID を使用してこれを実現します。 - 同様のサービスがサポートするすべての操作をコーディングします。
7.5. クライアントの構築
手順7.2 タスク
- サービスでサポートされるメッセージ定義があるとすぐに、クライアントコードを作成できます。サービスのサポートに使用されるビジネスロジックはサービスによって直接公開されることはありません(これは SOA: カプセル化の重要な原則の 1 つを壊す可能性があります)。これは基本的にサービスコードの逆になります。
ServiceInvoker flightService = new ServiceInvoker(...); Message request = // create new Message of desired type request.getBody().add(“org.example.flight.seatnumber”, ”1”); request.getBody().add(“ org.example.flight.flightnumber”, “BA1234”); request.getHeader().getCall().setMessageID(1234); request.getHeader().getCall().setReplyTo(myEPR); Message response = null; do { response = flightService.deliverSync(request, 1000); if (response.getHeader().getCall().getRelatesTo() == 1234) { // it's out response! break; } else response = null; // and keep looping } while !maximumRetriesExceeded();
注記上記のほとんどは、従来のクライアント/サーバー スタブジェネレーター で作業したリーダーに認識できます。これらのシステムでは、低レベルの詳細( opcodes やパラメーターなど)は高レベルのスタブ抽象化の背後で非表示になります。SOA Platform には RESTEasy との統合があり、ユーザーはアノテーションベースの REST スタイルの Web サービスを開発できます。これにより、opcodes や parameters などの低レベルの詳細が非表示になります。
7.6. リモートサービス呼び出し元の設定
commons-codec-1.3.jar |
commons-collections.jar |
commons-configuration-1.5.jar |
commons-lang-2.4.jar |
commons-logging.jar |
concurrent.jar |
hornetq-core-client.jar |
hornetq-jms.jar |
javassist.jar |
jboss-aop-client.jar |
jboss-common-core.jar |
jboss-javaee.jar |
jboss-logging-spi.jar |
jboss-mdr.jar |
jboss-remoting.jar |
jbossall-client.jar |
jbossesb-config-model-1.0.1.jar |
jbossesb-config-model-1.1.0.jar |
jbossesb-config-model-1.2.0.jar |
jbossesb-config-model-1.3.0.jar |
jbossesb-config-model-1.3.1.jar |
jbossesb-registry.jar |
jbossesb-rosetta.jar |
jbossjmx-ant.jar |
jbossts-common.jar |
juddi-client-3.1.3.jar |
log4j.jar |
netty.jar |
scout-1.2.6.jar |
serializer.jar |
Trove.jar |
uddi-ws-3.1.3.jar |
$ SOA_HOME/jboss-as/client/
、$ SOA_HOME/jboss-as/common/lib/
および $ SOA_HOME/jboss-as/server/$ SOA_CONF/deployers/esb.deployer/lib/
ディレクトリーにあります。
jbossesb-properties.xml
META-INF/uddi.xml
7.7. JBoss Enterprise SOA Platform の起動
前提条件
次のソフトウェアをインストールする必要があります。
- JBoss Enterprise SOA Platform
手順7.3 JBoss Enterprise SOA Platform の起動
サーバーウィンドウ で SOA サーバーを起動する
Red Hat Enterprise Linux
- ターミナルを開き、コマンド cd SOA_ROOT/jboss-as/bin を入力して
bin
ディレクトリーに移動します。 - ./run.sh と入力して SOA サーバーを起動します。(サーバープロファイルを指定していないため、デフォルトが使用されます。)
Microsoft Windows
- ターミナルを開き、コマンド chdir SOA_ROOT\jboss-as\bin を入力して
bin
ディレクトリーに移動します。 - run.bat と入力して SOA サーバーを起動します。(サーバープロファイルを指定していないため、デフォルトが使用されます。)
結果
サーバーが起動します。ハードウェアの速度にもよりますが、これには約 2 分かかります。
7.8. テストサーバーへの "Hello World" クイックスタートのデプロイ
前提条件
SOA_ROOT/jboss-as/samples/quickstarts/conf/quickstarts.properties-example
の設定がサーバー設定 (テスト環境のdefault
) と一致することを確認します。
手順7.4 "Hello World" クイックスタートのデプロイ
- サーバーが完全に起動したことを確認します。
- 2 番目のターミナルウィンドウを開き、クイックスタートを含むディレクトリーに移動します。cd SOA_ROOT/jboss-as/samples/quickstarts/helloworld (chdir SOA_ROOT\jboss-as\samples\quickstarts\helloworld)
- ant deploy を実行して、クイックスタートをデプロイします。次のようなメッセージを探して、デプロイが成功したかどうかを確認します。
deploy-esb: [copy] Copying 1 file to /jboss/local/53_DEV2/jboss-soa-p-5/jboss-as/server/default/deploy deploy-exploded-esb: quickstart-specific-deploys: [echo] No Quickstart specific deployments being made. display-instructions: [echo] [echo] ****************** [echo] Quickstart deployed to target JBoss ESB/App Server at '/jboss/local/53_DEV2/jboss-soa-p-5/jboss-as/server/default/deploy'. [echo] 1. Check your ESB Server console to make sure the deployment was executed without errors. [echo] 2. Run 'ant runtest' to run the Quickstart. [echo] 3. Check your ESB Server console again. The Quickstart should have produced some output. [echo] ****************** deploy: BUILD SUCCESSFUL
また、SOA_ROOT/jboss-as/server/default/log/server.log
でこれを確認してください。10:58:52,998 INFO [NamingHelper] JNDI InitialContext properties:{} 11:00:58,154 INFO [QueueService] Queue[/queue/quickstart_helloworld_Request_esb] started, fullSize=200000, pageSize=2000, downCacheSize=2000 11:00:58,186 INFO [QueueService] Queue[/queue/quickstart_helloworld_Request_gw] started, fullSize=200000, pageSize=2000, downCacheSize=2000 11:00:58,427 INFO [EsbDeployment] Starting ESB Deployment 'Quickstart_helloworld.esb'
- コマンド ant runtest を発行して、クイックスタートを実行します。クイックスタートが実行されると、次のようなメッセージが
SOA_ROOT/jboss-as/server/default/log/server.log
に書き込まれます。11:03:02,190 INFO [STDOUT] &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 11:03:02,191 INFO [STDOUT] Body: Hello World 11:03:02,191 INFO [STDOUT] &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 11:03:02,192 INFO [STDOUT] Message structure: 11:03:02,192 INFO [STDOUT] [Hello World].
結果
サーバーターミナルに "Hello World" という言葉が表示されます。このメッセージは SOA_ROOT/jboss-as/server/default/log/server.log
ファイルにも追加されます。
7.9. リモートクライアントの設定のテスト
前提条件
- サーバーが起動し、Hello World クイックスタートがデプロイされている必要があります。
手順7.5 タスク
- このテストコードを実行します。
package org.jboss.esb.client; import import import import org.jboss.soa.esb.client.ServiceInvoker; org.jboss.soa.esb.listeners.message.MessageDeliverException; org.jboss.soa.esb.message.Message; org.jboss.soa.esb.message.format.MessageFactory; public class EsbClient { public static void main(String[] args) { System.setProperty("javax.xml.registry.ConnectionFactoryClass", "org.apache.ws.scout.registry.ConnectionFactoryImpl"); try { Message message = MessageFactory.getInstance().getMessage(); message.getBody().add("Sample payload"); ServiceInvoker invoker = new ServiceInvoker("FirstServiceESB", "SimpleListener"); invoker.deliverAsync(message); } catch (final MessageDeliverException e) { e.printStackTrace(); } } }
7.10. リモートクライアントの設定が正しいことの確認
前提条件
- JBoss Enterprise SOA Platform が実行されており、HelloWorld クイックスタートがデプロイされている必要があります。
手順7.6 タスク
- このコードを実行します。
package org.jboss.esb.client; import org.jboss.soa.esb.client.ServiceInvoker; import org.jboss.soa.esb.listeners.message.MessageDeliverException; import org.jboss.soa.esb.message.Message; import org.jboss.soa.esb.message.format.MessageFactory; public class EsbClient { public static void main(String[] args) { System.setProperty("javax.xml.registry.ConnectionFactoryClass", "org.apache.ws.scout.registry.ConnectionFactoryImpl"); try { Message message = MessageFactory.getInstance().getMessage(); message.getBody().add("Sample payload"); ServiceInvoker invoker = new ServiceInvoker("FirstServiceESB", "SimpleListener"); invoker.deliverAsync(message); } catch (final MessageDeliverException e) { e.printStackTrace(); }
7.11. クライアントおよびサービスの構築時のさらなるアドバイス
- アクションを開発するときは、アクションに固有のペイロード情報が一意のメッセージボディーの場所に保持されていることを確認してください。
- クライアントに影響を与えずに実装を変更することが困難になるため、メッセージ内にバックエンドサービスの実装の詳細を公開しないでください。実装に依存しないメッセージ定義(コンテンツ、形式など)を使用します。これは、結合が遅れるのに役立つためです。
- ステートレスサービスの場合は、フェイルオーバーのopaquelyを処理するため、
ServiceInvoker
を使用します。 - 要求/応答アプリケーションをビルドする場合は、メッセージヘッダー内で相関情報(MessageID および RelatesTo)を使用します。
- メインのサービス opcode に Header Action フィールドを使用することを検討してください。
- 応答に配信アドレスがない非同期対話を使用する場合は、後で監視できるように、MessageStore にエラーを送信することを検討してください。
- JBoss Enterprise SOA Platform がサービス契約の定義と公開の自動サポートを提供するまでは、これらの定義の個別のリポジトリーを維持し、開発者とユーザーの両方に利用できるようにすることを検討してください。
第8章 高度なトピック
8.1. ノード
8.2. バス
8.3. 配信チャンネル
8.4. クラスター内の複数のノードで同じサービスを実行する
手順8.1 タスク
- クラスター内の複数のノードで同じサービスを実行するには、レジストリーのキャッシュが再検証されるまで待ちます。
8.5. 失敗したエンドポイント参照をレジストリーから削除する
手順8.2 タスク
jbossesb-properties.xml
をテキストエディターで開きます: vi SOA_ROOT/jboss-as/server/PROFILE/deployers/esb.deployers/jbossesb-properties.xml- org.jboss.soa.esb.failure.detect.removeDeadEPR を含むセクションまで下にスクロールします。このプロパティーを true に設定します。
- ファイルを保存して終了します。警告この機能は細心の注意を払って使用する必要があるため、デフォルト設定は false であることに注意してください。これを使用すると、単純に過負荷になっているため応答が遅いサービスのエンドポイント参照が、誤って削除される可能性があります。これらの孤立したサービスとのやり取りはなくなり、再起動が必要になる場合があります。
8.6. サービスの仕組み
はじめに
このセクションでは、サービス、エンドポイントの参照、リスナー、およびアクションが実際にどのように機能するかについて詳しく説明します。
... <service category="FirstServiceESB" name="SimpleListener" description="Hello World"> <listeners> <jms-listener name="helloWorld" busidref="quickstartEsbChannel" maxThreads="1"/> </listeners> <actions> <action name="action1" class="org.jboss.soa.esb.actions.SystemPrintln"/> </actions> </service> ...
8.7. Application Service
8.8. サービスレプリケーションの仕組み
helloworld.esb
などのサービスを取得し、それを Node2 および Node1 にデプロイするとどうなりますか ?レジストリーに jUDDI を使用し、1 つの中央 jUDDI データベースにアクセスできるようにすべてのノードを設定していることを前提とします。Node2 は、FirstServiceESB - SimpleListener
サービスがすでに登録されていることを見つけます。したがって、このサービスに 2 番目の ServiceBinding を追加するため、このサービスには 2 つの ServiceBinding があります。したがって、Node1 がダウンすると、Node2 は機能し続けます。
8.9. JBossMessaging
8.10. Cluster
8.11. ステートレスサービスフェイルオーバー
8.12. JMS クラスターリングの有効化
手順8.3 タスク
- JBoss Messaging のクラスターリングに http://community.jboss.org/wiki/JBossMessaging 関するドキュメント()をお読みください。
8.13. プロトコルクラスターリング
はじめに
JMS をクラスター化すると、アーキテクチャーから単一障害点が削除されます。
8.14. クラスター内の異なるノード間での同じサービスの実行
はじめに
クラスター内の複数のノードで同じサービスを実行する場合は、サービスレジストリーキャッシュが再検証されるのを待つ必要があります。その後、サービスはクラスター環境全体で実行されます。
8.15. レジストリーキャッシュのタイムアウト値の設定
手順8.4 タスク
- テキストエディターで
deploy/jbossesb.sar/jbossesb-properties.xml
ファイルを開きます: vi deploy/jbossesb.sar/jbossesb-properties.xml - キャッシュのタイムアウト値を設定します。
<properties name="core"> <property name="org.jboss.soa.esb.registry.cache.life" value="60000"/> </properties>
60 000 ミリ秒(sixty 秒)がデフォルト値であることに注意してください。 - ファイルを保存して終了します。
8.16. Channel Fail-Over
... <service category="FirstServiceESB" name="SimpleListener" description="Hello World"> <listeners> <jms-listener name="helloWorld" busidref="quickstartEsbChannel" maxThreads="1"/> <jms-listener name="helloWorld2" busidref="quickstartFtpChannel2" maxThreads="1"/> </listeners> ...
... <service category="FirstServiceESB" name="SimpleListener" description="Hello World"> <listeners> <jms-listener name="helloWorld" busidref="quickstartEsbChannel" maxThreads="1"/> <jms-listener name="helloWorld2" busidref="quickstartJmsChannel2" maxThreads="1"/> <ftp-listener name="helloWorld3" busidref="quickstartFtpChannel3" maxThreads="1"/> <ftp-listener name="helloWorld4" busidref="quickstartFtpChannel3" maxThreads="1"/> </listeners> ...
8.17. 自動フェイルオーバーの無効化
手順8.5 タスク
- テキストエディターで JBossESB プロパティーファイルを開きます。
- org.jboss.soa.esb.exceptionOnDeliverFailure プロパティーを true に設定します。
- ファイルを保存して終了します。注記または、問題の特定のメッセージに同じプロパティーを true に設定すると、メッセージごとに設定できます。いずれの場合も、デフォルトは false です。
8.18. ロードバランシング
8.19. 負荷分散ポリシーの設定
手順8.6 タスク
- グローバル設定ファイルをテキストエディターで開きます: vi SOA_ROOT/jboss-as/server/PROFILE/deployers/esb.deployers/jbossesb-properties.xml
- org.jboss.soa.esb.loadbalancer.policy プロパティーまでスクロールダウンします。使用するポリシーで設定します。
- ファイルを保存して終了します。
8.20. 負荷分散ポリシー
表8.1 利用可能な負荷分散ポリシー
ポリシー名 | Description |
---|---|
最初に入手可能 | 正常なサービスバインディングが見つかった場合は、それが終了するまで使用されます。リスト内の次のエンドポイント参照が使用されます。このポリシーでは、2 つのサービスインスタンス間の負荷分散は行われません。 |
ラウンドロビン | 各エンドポイント参照がリスト順に使用される標準の負荷分散ポリシー。 |
ランダムロビン | これはラウンドロビンに似ていますが、選択はランダム化されます。 |
8.21. トランザクションとアクションパイプライン
8.22. ロールバック
8.23. ロールバックと JMS JCA リスナー
<configuration xmlns="urn:hornetq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hornetq /schema/hornetq-configuration.xsd"> <address-settings> <address-setting match="jms.queue.MyServiceQueue"> <max-delivery-attempts>5</max-delivery-attempts> <redelivery-delay>1000</redelivery-delay> <max-size-bytes>10240</max-size-bytes> </address-setting> </address-settings> </configuration>
8.24. メッセージの再配信
- メッセージを同期的に配信しようとすると、デフォルトで DLQ MessageStore に保存され、呼び出し元にフェイルバックする DeadLetterService にメッセージを送信します。処理は停止します。JMS キューに移動する場合や、通知を受け取る場合は、jbossesb.esb で DeadLetterService を設定することができます。
- メッセージを非同期(推奨)に配信しようとすると、そのメッセージを DeadLetterService に送信しますが、メッセージは RDLVR MessageStore に保存されます。再配信サービス(jbossesb.esb)は、再配信の最大試行回数を超えるとメッセージの送信を再試行します。この場合、メッセージは DLQ MessageStore に保存され、処理が停止します。
8.25. スケジューリング
8.25.1. Quartz Scheduler
8.25.2. Quartz スケジューラーの設定
org.quartz.scheduler.instanceName = DefaultQuartzScheduler org.quartz.scheduler.rmi.export = false org.quartz.scheduler.rmi.proxy = false org.quartz.scheduler.wrapJobExecutionInUserTransaction = false org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 2 org.quartz.threadPool.threadPriority = 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
<schedule-provider name="schedule"> <property name=”org.quartz.threadPool.threadCount” value=”5” /> <cron-schedule scheduleid="cron-trigger" cronExpression="0/1 * * * * ?" /> </schedule-provider>
8.25.3. サービスのスケジューリング
- バスプロバイダー
- これらは、JMS や HTTP などのメッセージングプロトコルを介して処理パイプラインにメッセージを提供します。このプロバイダータイプは、基盤となるメッセージングプロバイダーによってトリガーされます。
- プロバイダーのスケジュール
- これらは、基礎となるメッセージ配信メカニズム(ファイルシステムなど)が処理できるメッセージが利用可能な場合など、スケジュール駆動型モデルに基づいてアクション処理パイプラインにメッセージを提供します。これらは、メッセージの処理が利用可能な場合にエンタープライズサービスバスをトリガーするサポートがない場合、スケジューラーは定期的にリスナーをトリガーして新しいメッセージをチェックします。
org.jboss.soa.esb.listeners.ScheduledEventMessageComposer
インターフェイスの実装であるcomposer クラスで設定されます。
8.25.4. 単純なスケジュール
- scheduleid
- スケジュールの一意の識別子文字列。リスナーからスケジュールを参照するために使用されます。
- frequency
- すべてのスケジュールリスナーがトリガーされる頻度(秒単位)。
- execCount
- スケジュールを実行する回数。
- startDate
- スケジュールの開始日時。この属性値の形式は、XML スキーマ型 "dateTime" の形式です。を参照してください http://books.xmlschemata.org/relaxng/ch19-77049.html。
- endDate
- スケジュールの終了日および時間。この属性値の形式は、XML スキーマ型 "dateTime" の形式です。を参照してください http://books.xmlschemata.org/relaxng/ch19-77049.html。
<providers> <schedule-provider name="schedule"> <simple-schedule scheduleid="1-sec-trigger" frequency="1" execCount="5" /> </schedule-provider> </providers>
8.25.5. Cron スケジュール
- scheduleid
- スケジュールの一意の識別子文字列。リスナーからスケジュールを参照するために使用されます。
- cronExpression
- CRON 式
- startDate
- スケジュールの開始日時。この属性値の形式は、XML スキーマ型 "dateTime" の形式です。を参照してください http://books.xmlschemata.org/relaxng/ch19-77049.html。
- endDate
- スケジュールの終了日および時間。この属性値の形式は、XML スキーマ型 "dateTime" の形式です。を参照してください http://books.xmlschemata.org/relaxng/ch19-77049.html。
<providers> <schedule-provider name="schedule"> <cron-schedule scheduleid="cron-trigger" cronExpression="0/1 * * * * ?" /> </schedule-provider> </providers>
8.25.6. スケジュールされたリスナー
org.jboss.soa.esb.schedule.ScheduledEventListener
または org.jboss.soa.esb.listeners.ScheduledEventMessageComposer
のいずれかの実装である event-processor
クラスで設定されます。
- ScheduledEventListener
- このインターフェイスを実装するイベントプロセッサーは、onSchedule メソッドを使用して単純にトリガーされます。アクション処理のパイプラインは実行されません。
- ScheduledEventMessageComposer
- このインターフェイスを実装するイベントプロセッサーは、リスナーに関連付けられたアクション処理パイプラインのメッセージを破棄できます。
- name: リスナーインスタンスの名前
- event-processor: すべてのスケジュールトリガーで呼び出されるイベントプロセッサークラス。実装の詳細については、上記 を参照してください。
- 以下のいずれかになります。
- name: リスナーインスタンスの名前。
- scheduleidref: このリスナーのトリガーに使用するスケジュールのスケジュール ID。
- schedule-frequency: スケジュール頻度(秒単位)。リスナーで直接簡単なスケジュールを指定する便利な方法。
8.25.7. スケジュールされたリスナーと Cron スケジューラーの組み合わせの設定例
<?xml version = "1.0" encoding = "UTF-8"?> <jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"> <providers> <schedule-provider name="schedule"> <cron-schedule scheduleid="cron-trigger" cronExpression="0/1 * * * * ?" /> </schedule-provider> </providers> <services> <service category="ServiceCat" name="ServiceName" description="Test Service"> <listeners> <scheduled-listener name="cron-schedule-listener" scheduleidref="cron-trigger" event-processor="org.jboss.soa.esb.schedule.MockScheduledEventMessageComposer" /> </listeners> <actions> <action name="action" class="org.jboss.soa.esb.mock.MockAction" /> </actions> </service> </services> </jbossesb>
第9章 フォールトトレランスおよび信頼性
9.1. システムの信頼性
はじめに
JBoss Enterprise SOA Platform には、多くのコンポーネントとサービスがあります。一部の障害は、障害が発生するタイミングに応じて、一部またはすべてのアプリケーションに気付かない場合があります。たとえば、コンシューマーが機能する必要があるサービスのすべての EPR 情報を正常に取得した後にレジストリーサービスがクラッシュした場合、クラッシュはアプリケーションに悪影響を及ぼしません。ただし、このポイントの前に失敗した場合、アプリケーションは進捗できません。したがって、信頼性の保証を決定するには、障害が発生するタイミングと、発生する可能性のある障害のタイプを考慮する必要があります。
9.2. Fault Tolerance
9.3. 依存性
9.4. メッセージの損失
JMSEpr
の任意部分)を使用する場合、障害発生時にメッセージが受信および処理されることを保証することができます。サービスによる処理中に障害が発生した場合、メッセージは後で再処理するために JMS キューに戻されます。ただし、トランザクションセッションは非トランザクションセッションよりもはるかに遅くなる可能性があるため、注意して使用する必要があります。
9.5. 終了点の失敗
9.6. サポート対象のクラッシュリカバリーモード
9.7. Message Failure, Component by Component
- ゲートウェイ
- ゲートウェイによってメッセージが受け入れられると、信頼できないトランスポートを使用してレートされない限り、メッセージは失われません。JMS、FTP、および SQL は、メッセージを確実に配信するか、システムから削除しないように JBossESB トランスポートを設定できます。ただし、この方法で HTTP を設定することはできません。
- ServiceInvoker
- ServiceInvoker は、再配信が非同期的に送信された場合は、再配信キューに配信できないメッセージを配置します。失敗した同期メッセージ配信は、送信側に即座に示されます。ServiceInvoker が正常に機能するには、トランスポートが送信者への配信に失敗したことを示す必要があります。送信側と受信側が同時に障害が発生すると、メッセージが失われる可能性があります。
- JMS Broker
- JMS ブローカーに配信できないメッセージは、再配信キュー内に配置されます。エンタープライズデプロイメントでは、クラスター化された JMS ブローカーが推奨されます。
- アクションパネル
- サービスが存在するコンテナーによって受信され、最終的な宛先によって処理されているメッセージを区別することが重要です。Action パイプライン内で処理中にエラーやクラッシュが発生して、その損失が発生するのは、メッセージが正常に配信される可能性があります。前述のように、一部の JBossESB トランスポートを設定して、受信したメッセージを処理中に削除しないようにすることができます。そのため、エラーやクラッシュが発生した場合は失われません。
9.8. 障害のリスクを最小限に抑える方法
- ステートレスおよびべき等サービスを開発しようとします。これができない場合は、MessageID を使用してメッセージを特定し、アプリケーションが再送信の試行を検出できるようにします。メッセージ送信を再試行する場合は、同じ MessageID を使用します。べき等ではなく、再送信されたメッセージを受信すると、同じ作業のやり直すことの影響を受けるサービスは、トランザクションを使用して MessageID に対する状態遷移を記録することが推奨されます。ステートレスサービスに基づくアプリケーションも、より優れたスケーリングを行う傾向があります。
- ステートフルサービスを開発する場合は、トランザクションと(クラスター化された)JMS 実装を使用します。
- レジストリーをクラスター化し、クラスター化された/フォールトトレラントバックエンドデータベースを使用して、単一障害点を削除します。
- オブジェクトストアが高可用性のデータベースでサポートされることを確認します。
- サービスおよびサービスのどの操作に信頼性とフォールトトレランス機能を必要とするかを明確に特定します。これにより、これらのサービスで JMS 以外のトランスポートをターゲットにし、アプリケーションの全体的なパフォーマンスを向上させることができます。JBossESB は異なる EPR を介して同時にサービスを使用できるため、アプリケーション固有の要件に基づいて、これらの異なるサービス品質(QoS)を異なるコンシューマーに提供することもできます。
- ネットワークパーティションを使用すると、サービスが失敗したかのように表示される可能性があるため、クラッシュしたと誤って識別できないサービスに対して、このタイプの障害が発生する可能性が高くなっています。
- 一部の状況(HTTP など)は、メッセージが処理されてからサーバーがクラッシュすると、応答する前に別のサーバーが同じ作業を行う可能性があります。これは、サービスがメッセージを受信して処理した後に失敗したマシンと、メッセージを受信して処理しないマシンを区別できないためです。
- 非同期(一方向)配信パターンを使用すると、サービス障害の検出が困難になります。リクエストへの応答が任意のタイミングで発生する可能性がある場合は、通常、失われたメッセージまたは遅延メッセージの概念はありません。応答がまったくない場合は、障害検出がより問題になり、メッセージに到達しないかどうかを判断するためにアプリケーションセマンティクスに依存する必要がある場合があります(たとえば、銀行アカウントの費用量が期待に一致しません)。ServiceInvoker または Couriers を使用して非同期メッセージを提供する場合、各操作(例:deliverAsync)から返されると、メッセージがサービスによって動作されたわけではありません。
- メッセージストアは再配信プロトコルによって使用されます。ただし、これは堅牢性を改善するためにベストエフォートプロトコルであり、トランザクションや信頼できるメッセージ配信を使用しません。つまり、特定の障害により、メッセージが完全に失われるか(クラッシュ前にストアに書き込まれません)、複数回配信(再配信メカニズムはストアからメッセージをプルし、正常に配信しますが、メッセージをストアから削除できないクラッシュが発生することを意味します)。 リカバリー時に、メッセージが再び配信されます。
- FTP などの一部のトランスポートは、処理されたメッセージを保持するように設定できますが、処理されていないメッセージと区別するために一意にマークされます。デフォルトのアプローチは、処理後にメッセージを削除することがよくありますが、このデフォルトを変更して、障害からの復旧時にアプリケーションが処理したメッセージを判断することもできます。
第10章 サービス設定の定義
10.1. 製品の設定の概要
はじめに
JBoss Enterprise SOA Platform の設定設定は jbossesb-1.3.0 XSD スキーマ()に基づいていhttp://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.3.0.xsdます。この XSD は、製品を設定するための具体的な参照です。ここでは紹介テキストが表示されます。
- <globals>
- <providers>: モデルの <services> セクション内で定義される、メッセージ <listener> が使用するすべてのメッセージ <bus> プロバイダーを定義します。
- <services>: JBoss Warehouse の単一インスタンスの制御下にあるすべてのサービスを定義します。各 <service> インスタンスには、ゲートウェイまたはメッセージ Aware リスナー定義のいずれかが含まれます。
10.2. プロバイダー
10.3. プロバイダーのタイプ
- バスプロバイダー:イベント駆動型プロバイダーのプロバイダーの詳細を指定します。つまり、プッシュされたメッセージであるリスナー用です。このプロバイダータイプの例は <jms-provider> です。
- プロバイダーのスケジュール設定:スケジュール駆動型リスナー(つまり、メッセージをプルするリスナー)のプロバイダー設定。
<jms-provider>
などのバスプロバイダーには、複数の <bus>
定義を含めることができます。<provider>
には、その <property>
インスタンスに共通するプロバイダー固有のプロパティーに関連する <bus>
インスタンスを持つこともできます。<provider>
たとえば、JMS には connection-factory、jndi-context-factory などがあります。同様に、<bus>
の各インスタンスには、その <bus>
インスタンスに固有の <property>
インスタンスを付けることができます。たとえば、JMS には destination-type、destination-name などがあります。)
<providers> <jms-provider name="JBossMQ" connection-factory="ConnectionFactory"> <jms-bus busid="Reconciliation"> <jms-message-filter dest-type="QUEUE" dest-name="queue/B" /> </jms-bus> </jms-provider> </providers>>
10.4. サービス
10.5. サービスの属性
表10.1 service 属性
名前 | 説明 | 型 | 必須 |
---|---|---|---|
name | Service Registry にサービスを登録する名前。 | xsd:string | true |
category | サービスがレジストリーに登録されているサービスカテゴリー。 | xsd:string | true |
description | レジストリーに保存されているサービスの人間が判読できる説明。 | xsd:string | true |
10.6. リスナーの属性
表10.2 listener 属性
名前 | 説明 | 型 | 必須 |
---|---|---|---|
name | リスナーの名前。この属性は主にロギングの目的で必要になります。 | xsd:string | true |
busrefid | リスナーインスタンスがメッセージを受信する <bus> の busid への参照。 | xsd:string | true |
maxThreads | リスナーがアクティブにできる同時メッセージ処理スレッドの最大数。 | xsd:int | True |
is-gateway | リスナーインスタンスがゲートウェイまたはメッセージアウェアリスナーであるかどうか。
メッセージバスは、特定のメッセージチャネルまたはトランスポートの詳細を定義します。
| xsd:boolean | true |
<?xml version = "1.0" encoding = "UTF-8"?> <jbossesb xmlns="http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.3.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.3.0.xsd http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.3.0.xsd" parameterReloadSecs="5"> <providers> <jms-provider name="JBossMQ" connection-factory="ConnectionFactory"> <jms-bus busid="Reconciliation"> <jms-message-filter dest-type="QUEUE" dest-name="queue/B" /> </jms-bus> <!-- busid --> <jms-bus busid="ReconciliationEsb"> <jms-message-filter dest-type="QUEUE" dest-name="queue/C" </jms-bus> </jms-provider> </providers> <services> <service category="Bank" name="Reconciliation" description="Bank Reconciliation Service"> <listeners> <!-- busidref --> <jms-listener name="Bank-Listener" busidref="Reconciliation" is-gateway="true"/> <jms-listener name="Bank-Esb" busidref="ReconciliationEsb"/> </listeners> <actions> .... </actions> </service> </services> </jbossesb>
10.7. アクション
10.8. アクションの属性
表10.3 action 属性
名前 | 説明 | 型 | 必須 |
---|---|---|---|
name | アクションの名前。この属性は主にロギングの目的で必要になります。 | xsd:string | true |
class | アクションクラスは、org.jboss.soa.esb.actions.AbstractActionLifecycle、org.jboss.soa.esb.actions.ActionPipelineProcessor のいずれかを拡張する必要があります。 | xsd:string | true |
process | メッセージ処理のために反映的に呼び出されるプロセスメソッドの名前(デフォルトはプロセスメソッドです)。 | xsd:int | false |
<action>
インスタンスが <actions>
セットに表示される順序で呼び出されます(つまり、プロセスメソッドが呼び出されます)。各 <action>
から返されるメッセージは、リスト内の次の <action>
への入力メッセージとして使用されます。
org.jboss.soa.esb.actions.ActionProcessor
クラスを介して実装されます。このインターフェイスのすべての実装には、以下の形式のパブリックコンストラクターが含まれている必要があります。
public ActionZ(org.jboss.soa.esb.helpers.ConfigTree configuration);
<actions> <action name="MyAction-1" class="com.acme.MyAction1"/> <action name="MyAction-2" class="com.acme.MyAction2"> <property name="propA" value="propAVal" /> </action> <action name="MyAction-3" class="com.acme.MyAction3"> <property name="propB" value="propBVal" /> <property name="propC"> <!-- Free form child content... --> <some-free-form-element>zzz<some-free-form-element> </property> </action> </actions>
10.9. トランスポート固有の設定の実装
<provider>
、<bus>
、および <listener>
(JMS、SQL など)のトランスポート固有のバリアントがあります。 これらの特別なバリアントのいずれかを使用すると、設定の検証が強化されます。これらの特殊化は、製品によってサポートされる各トランスポートの設定要件を明示的に定義します。
- プロバイダー設定を定義します(例:<jms-provider>)。
- バス設定を新しいプロバイダー(<jms-bus> など)に追加し、一意の busid 属性値を割り当てます。
- <services> を通常として定義します。これは、単に作成した新しいバス設定を参照(busidref を使用)するトランスポート固有のリスナー設定(<jms-listener> など)を追加します。(例:<jms-bus> を参照する <jms-listener>)。
- jms: <jms-provider>、<jms-bus>、<jms-listener> および <jms-message-filter>: <jms-message-filter> は、<jms-bus> または <jms-listener> 要素のいずれかに追加できます。ここで、<jms-provider> および <jms-bus> は JMS 接続プロパティーを指定します。ここで、<jms-message-filter> は実際のメッセージ QUEUE/TOPIC とセレクターの詳細を指定します。
- SQL: <sql-provider>、<sql-bus>、<sql-listener> および <sql-message-filter>: <sql-message-filter> は、<sql-bus> または <sql-listener> 要素のいずれかに追加できます。<sql-provider> および <sql-bus> は JDBC 接続プロパティーを指定し、<sql-message-filter> はメッセージ/行の選択と処理プロパティーを指定します。
- ftp: <ftp-provider>、<ftp-bus>、<ftp-listener> および <ftp-message-filter>: <ftp-message-filter> は、<ftp-bus> または <ftp-listener> 要素のいずれかに追加できます。<ftp-provider> および <ftp-bus> は FTP アクセスプロパティーを指定します。<ftp-message-filter> はメッセージ/ファイルの選択と処理プロパティーを指定します。
- hibernate: <hibernate-provider>、<hibernate-bus>、<hibernate-listener> : <hibernate-message-filter> は <hibernate-bus> または <hibernate-listener> 要素のいずれかに追加できます。ここで、<hibernate-provider> は hibernate 設定プロパティーの場所などのファイルシステムのアクセスプロパティーを指定し、<hibernate-message-filter> はリッスンするクラス名およびイベントを指定します。
- ファイルシステム:<fs-provider>、<fs-bus>、<fs-listener>、および <fs-message-filter> は、<fs-bus> または <fs-listener> 要素のいずれかに追加できます。ここで、<fs-provider> および <fs-bus> は File System アクセスプロパティーを指定し、<fs-message-filter> はメッセージ/ファイルの選択と処理プロパティーを指定します。
- schedule: <schedule-provider>.これは特別なタイプのプロバイダーで、上記のバスベースのプロバイダーとは異なります。詳細は、Scheduling を参照してください。
- JMS/JCA 統合:<jms-jca-provider>: このプロバイダーは <jms-provider> の代わりに使用して、JCA インフローを使用した受信メッセージの配信を有効にすることができます。これにより、アクションパイプラインにトランザクションフローが導入され、JTA トランザクション内のアクションが含まれます。
表10.4 JMS メッセージフィルターの設定
Property Name | Description | 必須 |
---|---|---|
dest-type | 宛先のタイプ(QUEUE または TOPIC のいずれか)。 | はい |
dest-name | キューまたはトピックの名前 | はい |
selector | このメッセージセレクターでフィルターリングする同じキュー/トピックで複数のリスナーを登録できるようにします。 | いいえ |
永続 | JMS の配信モードを永続化する必要があるかどうかを示します。true または false に設定します。(デフォルトは true です。) | いいえ |
acknowledge-mode | JMS セッション確認モード。AUTO_ACKNOWLEDGE、CLIENT_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。デフォルトは AUTO_ACKNOWLEDGE です。 | いいえ |
jms-security-principal | JMS 宛先ユーザー名。これは、宛先への接続の作成時に使用されます。 | いいえ |
jms-security-credential | JMS 宛先パスワード。これは、宛先への接続の作成時に使用されます。 | いいえ |
<jms-bus busid="quickstartGwChannel"> <jms-message-filter dest-type="QUEUE" dest-name="queue/quickstart_jms_secured_Request_gw" jms-security-principal="esbuser" jms-security-credential="esbpassword"/> </jms-bus>
表10.5 JMS リスナーの設定
Property Name | Description | 必須 |
---|---|---|
name | リスナー名。 | はい |
busrefid | リッスンする JMS バスの ID。 | いいえ |
is-gateway | この JMS リスナーインスタンスはゲートウェイであるか、またはメッセージ対応のリスナーです。 | いいえ。デフォルトは false です。 |
maxThreads | JMS バスでメッセージをリッスンしているときに使用するスレッドの最大数。is-gateway が false の場合のみ関連します。 | いいえ。デフォルトは 1 です。 |
clientId | JMS 接続に関連付けるクライアント ID。接続とそのオブジェクトを、プロバイダーによってクライアントの代わりに維持される状態に関連付けるために使用されます。(例:永続サブスクリプション)。 | いいえ。clientId が必要な場合(例:durableSubscriptionName が指定されている場合)、が指定されていない場合、デフォルトはリスナー名になります。 |
durableSubscriptionName | 永続的なサブスクリプション名。 | いいえ。JMS トピックにのみ関連します。 |
10.10. ファイルシステムプロバイダーの設定
表10.6 ファイルシステムメッセージフィルターの設定
プロパティー | Description | 必須 |
---|---|---|
directory | 受信ファイルを監視するディレクトリー。 | はい |
input-suffix | 受信ファイルのフィルターに使用される接尾辞。. (.esbIn など)で 1 文字以上である必要があります。 | はい |
work-suffix | ファイルの処理時にファイルが使用される場合に使用される接尾辞。デフォルトは.esbInProcess です。 | いいえ |
post-suffix | ファイルが正常に処理されたときに使用される接尾辞。デフォルトは.esbDone です。 | いいえ |
post-delete | true の場合、ファイルは処理された後に削除されます。この場合、ディレクトリー後および post-suffix は効果がありません。デフォルトは true です。 | いいえ |
post-directory | ファイルの処理後にファイルが移動されるディレクトリー。デフォルトは上記のディレクトリーの値に設定されます。 | はい |
post-rename | true の場合、ファイルの名前は処理後に変更されます。post-rename および post-delete オプションは相互に排他的であることに注意してください。 | いいえ |
error-delete | true の場合、処理中にエラーが発生した場合にファイルが削除されます。この場合、error-directory および error-suffix は効果がありません。デフォルトは true です。 | いいえ |
error-directory | 処理中にエラーが発生した場合にファイルを移動する FTP ディレクトリー。デフォルトは上記のディレクトリーの値に設定されます。 | はい |
error-suffix | 処理中にエラーが発生するとファイル名に追加される接尾辞。デフォルトは .esbError です。 | いいえ |
10.11. FTP プロバイダーの設定
表10.7 FTP プロバイダーの設定
プロパティー | Description | 必須 |
---|---|---|
hostname | ポート 21 を使用する <host> だけの <host:port> の組み合わせを指定できます。 | はい |
username | FTP 接続に使用されるユーザー名。 | はい |
password | 上記のユーザーのパスワード | はい |
directory | 新しいファイル用に監視される FTP ディレクトリー | はい |
input-suffix | インストラクターが使用するファイルのフィルターに使用されるファイルの接尾辞(ドットの追加など、.esbIn など)。これは、空の文字列として指定することで、すべてのファイルを取得するように指定することもできます。 | はい |
work-suffix | ファイルの処理中に使用されるファイル接尾辞。これにより、別のスレッドまたはプロセスも選択されなくなります。デフォルトは .esbInProcess です。 | いいえ |
post-delete | true の場合、ファイルは処理された後に削除されます。この場合、ディレクトリー後および post-suffix は効果がないことに注意してください。デフォルトは true です。 | いいえ |
post-directory | ファイルの処理後にファイルが移動される FTP ディレクトリー。デフォルトは上記のディレクトリーの値に設定されます。 | いいえ |
post-suffix | 処理後にファイル名に追加されるファイルの接尾辞。デフォルトは .esbDone です。 | いいえ |
error-delete | true の場合、処理中にエラーが発生した場合にファイルが削除されます。この場合、error-directory および error-suffix は効果がないことに注意してください。デフォルトは true です。 | いいえ |
error-directory | 処理中にエラーが発生した場合にファイルを移動する FTP ディレクトリー。デフォルトは上記のディレクトリーの値に設定されます。 | いいえ |
error-suffix | 処理中にエラーが発生するとファイル名に追加される接尾辞。デフォルトは .esbError です。 | いいえ |
protocol | プロトコルは以下のいずれかになります。
| いいえ |
passive | FTP 接続がパッシブモードであることを示します。これを true に設定すると、FTP クライアントは ftpserver への 2 つの接続を確立します。デフォルトは false で、クライアントは FTP サーバーに接続先となるポートを指示します。その後、FTP サーバーはクライアントへの接続を確立します。 | いいえ |
read-only | true の場合、FTP サーバーはファイルの書き込み操作を許可しません。この場合、work-suffix、post-delete、post-directory、post-suffix、post-delete、error-directory、および error-suffix プロパティーは影響を受けないことに注意してください。デフォルトは false です。詳細は、読み取り専用 FTP リスナー を参照してください。 | いいえ |
certificate-url | FTPS サーバー検証のパブリックサーバー証明書への URL、または SFTP クライアント検証のプライベート証明書への URL。SFTP 証明書は、デプロイメントアーティファクト内に埋め込まれたリソースとして配置できます。 | いいえ |
certificate-name | FTPS サーバー検証の証明書の共通名 | いいえ |
certificate-passphrase | SFTP クライアント検証用の秘密鍵のパスフレーズ。 | いいえ |
表10.8 読み取り専用 FTP リスナー設定
名前 | Description |
---|---|
scheduleidref | FTP リスナーによって使用されるスケジュール。サービススケジューリング を参照してください。 |
remoteFileSystemStrategy-class | リモートファイルシステムストラテジーを、実装するクラスで上書きします( org.jboss.soa.esb.listeners.gateway.remotestrategies.RemoteFileSystemStrategy )。デフォルトは org.jboss.soa.esb.listeners.gateway.remotestrategies.ReadOnlyRemoteFileSystemStrategy です。 |
remoteFilesystemStrategy-configFile | ローカルファイルシステムまたはクラスパスに存在する JBoss TreeCache 設定ファイルを指定します。デフォルトでは、クラスパスのルートにある /ftpfile-cache-config.xml という名前のファイルを検索します。 |
removeFilesystemStrategy-cacheListener | TreeCache で使用される JBoss TreeCacheListener 実装を指定します。デフォルトは TreeCacheListener ではありません。 |
maxNodes | キャッシュに保存されるファイルの最大数。0 は制限なしを示します |
timeToLiveSeconds | ノードがスイプされるまでのアイドル時間(秒単位)。0 は制限なしを示します |
maxAgeSeconds | ノードがスイプアウトされるまでのアイドル時間に関係なく、オブジェクトは TreeCache (秒単位)に存在する必要がある時間。0 は制限なしを示します |
<ftp-listener name="FtpGateway" busidref="helloFTPChannel" maxThreads="1" is-gateway="true" schedule-frequency="5"> <property name="remoteFileSystemStrategy-configFile" value="./ftpfile-cache-config.xml"/> <property name="remoteFileSystemStrategy-cacheListener" value= "org.jboss.soa.esb.listeners.gateway.remotestrategies.cache.DeleteOnEvictTreeCacheListener"/> </ftp-listener>
<region name="/ftp/cache"> <attribute name="maxNodes">5000</attribute> <attribute name="timeToLiveSeconds">1000</attribute> <attribute name="maxAgeSeconds">86400</attribute> </region>
表10.9 設定
プロパティー | Description | コメント |
---|---|---|
maxNodes | キャッシュに保存されるファイルの最大数。 | 0 は制限なしを示します |
timeToLiveSeconds | ノードがスイプされるまでのアイドル時間(秒単位)。 | 0 は制限なしを示します |
maxAgeSeconds | ノードがスイプアウトされるまでのアイドル時間に関係なく、オブジェクトは TreeCache (秒単位)に存在する必要がある時間 | 0 は制限なしを示します |
10.12. UDP ゲートウェイ
10.13. UDP ゲートウェイの設定
表10.10 UDP ゲートウェイの設定
プロパティー | Description | コメント |
---|---|---|
ホスト | リッスンするホスト名/IP。 | 必須。 |
ポート | リッスンするポート。 | 必須。 |
handlerClass | org.jboss.soa.esb.listeners.gateway.mina.MessageHandler の具体的な単純化。 | オプション:デフォルトは org.jboss.soa.esb.listeners.gateway.mina.DefaultMessageHandler です。 |
is-gateway | UDPGatewayListener はゲートウェイとしてのみ機能します。 | 必須。 |
<udp-listener name="udp-listener" host="localhost" port="9999" handlerClass="org.jboss.soa.esb.listeners.gateway.mina.DefaultMessageHandler" is-gateway="true" <udp-listener/>
10.14. JBoss Remoting Gateway
10.15. JBoss Remoting Gateway の設定
<jbr-provider name="socket_provider" protocol="socket" host="localhost"> <jbr-bus busid="socket_bus" port="64111"/> </jbr-provider>
<listeners> <jbr-listener name="soc" busidref="socket_bus" is-gateway="true"/> </listeners>
表10.11 設定
名前 | 説明 | デフォルト |
---|---|---|
同期 | は、同期的に呼び出されるターゲットサービスです。 | True |
serviceInvokerTimeout | 非同期呼び出しのタイムアウト。 | 20000 |
asyncResponse | 非同期応答。 | "<ack/> |
securityNS | これは、使用する必要のある Web Service Security バージョンの名前空間です。この名前空間は、SOAP メッセージのセキュリティーヘッダーを照合するために使用されます。これにより、Enterprise Service Bus がこれらのヘッダーからセキュリティー情報を抽出できるようになります。 | http://docs.oasis-open.org/wss/2004/01/oasis-200401http-wss-wssecurity-secext-1.0.xsd |
<jbr-provider name="https_provider" protocol="https" host="localhost"> <!-- Https/SSL settings --> <property name="jbr-KeyStoreURL" value="/keys/myKeystore" /> <property name="jbr-KeyStorePassword" value="keys_ssl_pass" /> <property name="jbr-TrustStoreURL" value="/keys/myKeystore" /> <property name="jbr-TrustStorePassword" value="keys_ssl_pass" /> <property name="jbr-ClientAuthMode" value="need" /> <property name="serviceInvokerTimeout" value="20000" /> <jbr-bus busid="https_bus" port="9433"/> </jbr-provider>
org.jboss.soa.esb.message.ResponseHeader
クラスのインスタンスとして Message.Properties
に配置されていることを想定します。ゲートウェイが特定の応答ヘッダーを設定する必要がある場合、ゲートウェイ応答に提供されたエンタープライズサービスバスメッセージ(ターゲットサービスの同期呼び出し後など)には、Message.Properties
に設定された ResponseHeader
クラスのインスタンスが含まれている必要があります。
10.16. HTTP ゲートウェイ
10.17. HTTP ゲートウェイの設定
<service category="Vehicles" name="Cars" description="" invmScope="GLOBAL"> <listeners> <http-gateway name="Http" /> </listeners> <actions mep="RequestResponse"> <!-- Service Actions.... --> </actions> </service>
デフォルト
の HTTP バスプロバイダーを使用します。これは、busrefid 属性を定義しないためです。サービスカテゴリーと名前を使用して、次の形式の HTTP エンドポイントアドレスを構築します。
http://<host>:<port>/<.esbname>/http/Vehicles/Cars
<service category="Vehicles" name="Cars" description="" invmScope="GLOBAL"> <listeners> <http-gateway name="Http" urlPattern="esb-cars/*" /> </listeners> <actions mep="RequestResponse"> <!-- Service Aactions.... --> </actions> </service>
http://<host>:<port>/<.esbname>/http/esb-cars/*
<http-gateway name="Http" urlPattern="esb-cars/*"> <property name="allowedPorts" value="8080,8081"> </http-gateway>
- http://<host>:8080/*
- http://<host>:8081/*
jbossesb-properties.xml
ファイルの core:org.jboss.soa.esb.mime.text.types 設定プロパティーを使用して、ペイロードを文字列としてデコードするか、またはアクションでデコードするサービスを使用するかどうかを決定します。
- text/*
- application/xml
- application/*-xml
HttpRequest requestInfo = HttpRequest.getRequest(message);
表10.12 プロパティー
プロパティー | Description |
---|---|
queryParams | クエリーパラメーターが含まれる java.util.Map<String, String[]>。 値は String[] であるため、多値パラメーターをサポートすることに注意してください。 |
ヘッダー | リクエストヘッダーが含まれる java.util.List<HttpHeader>。 |
authType | エンドポイントを保護するために使用される認証スキームの名前。認証されていない場合は null です。CGI 変数 AUTH_TYPE の値と同じです。 |
characterEncoding | この要求の本文で使用される文字エンコーディングの名前。要求が文字エンコーディングを指定しない場合は null。 |
contentType | 要求の本文のコンテンツタイプ(MIME タイプ)、またはタイプが不明な場合は null。 CGI 変数 CONTENT_TYPE の値と同じです。 |
contextPath | 要求のコンテキストを示す要求 URI の部分。 コンテキストパスは常にリクエスト URI で最初に行われます。 パスは / 文字で始まりますが、/ 文字で終わりません。 デフォルトの(root)コンテキストのエンドポイントの場合、これは "" を返します。 コンテナーはこの文字列をデコードしません。 (Servlet Spec を参照してください。) |
pathInfo | この要求時にクライアントが送信する URL に関連付けられた追加のパス情報。追加のパス情報はエンドポイントパスに従いますが、クエリー文字列の前には / 文字で始まります。追加パス情報がない場合は、このメソッドは null を返します。CGI 変数 PATH_INFO の値と同じです。(Servlet Spec を参照してください。) |
pathInfoToken | pathInfo のトークンが含まれる List<String>。 |
queryString | クエリー文字列(サーブレット仕様を参照) |
requestURI | プロトコル名からクエリー文字列までのこの要求 URL の一部。Web コンテナーはこの文字列をデコードしません。(サーブレット仕様 を参照してください) |
requestPath | エンドポイントを呼び出すこのリクエスト URL の一部。追加のパス情報やクエリー文字列は含まれません。CGI 変数 SCRIPT_NAME の値と同じです。urlPattern が/*であった場合、このメソッドは http のみを返します。(サーブレット仕様 を参照してください) |
localAddr | 要求が受信したインターフェイスの IP アドレス。 |
localName | 要求が受信した IP インターフェイスのホスト名。 |
メソッド | HTTP メソッド |
protocol | HTTP プロトコルの名前とバージョン |
remoteAddr | 要求を送信したクライアントまたは最後のプロキシーの IP アドレス。CGI 変数 REMOTE_ADDR の値と同じです。 |
remoteHost | 要求を送信したクライアントまたは最後のプロキシーの完全修飾名。エンジンが(パフォーマンスを向上させるために)ホスト名を解決できないか、または選択しない場合、これは IP アドレスのドット付き文字列の形式になります。CGI 変数 REMOTE_HOST の値と同じです。 |
remoteuser | この要求を行うユーザーのログイン(ユーザーが認証されている場合)、またはユーザーが認証されていない場合は null。ユーザー名が後続の各要求と共に送信されるかどうかは、クライアントと認証のタイプによって異なります。CGI 変数 REMOTE_USER の値と同じです。 |
contentLength | リクエストボディーと入力ストリームで利用可能になった長さ(バイト単位)。長さが不明な場合は -1。HTTP サーブレットの場合、CGI 変数 CONTENT_LENGTH の値と同じです。 |
requestSessionId | クライアントによって指定されたセッション ID。指定されていない場合は null。 |
scheme | 使用されているスキーム(http または https のいずれか)。 |
serverName | 要求が送信されたサーバーのホスト名。Host ヘッダー値の ":" より前の部分(存在する場合)、または解決されたサーバー名、またはサーバー IP アドレスになります。 |
<listeners> <http-gateway name="Http" urlPattern="esb-cars/*"> <asyncResponse /> </http-gateway> </listeners>
<listeners> <http-gateway name="Http" urlPattern="esb-cars/*"> <asyncResponse statusCode="202" /> </http-gateway> </listeners>
<listeners> <http-gateway name="Http" urlPattern="esb-cars/*"> <asyncResponse statusCode="202"> <payload classpathResource="/202-static-response.xml" content-type="text/xml" characterEncoding="UTF-8" /> <asyncResponse> </http-gateway> </listeners>
表10.13
プロパティー | Description | 必須 |
---|---|---|
classpathResource |
応答ペイロードが含まれるクラスパス上のファイルへのパスを指定します。
| 必須 |
contentType |
classpathResource 属性で指定されたペイロードデータのコンテンツ/mime タイプを指定します。
| 必須 |
characterEncoding |
classpathResource 属性で指定されたデータの文字エンコーディング。
| オプション |
HttpResponse responseInfo = new HttpResponse(HttpServletResponse.SC_OK); responseInfo.setContentType("text/xml"); // Set other response info ... // Set the HttpResponse instance on the ESB response Message instance responseInfo.setResponse(responseMessage);
表10.14
プロパティー | Description |
---|---|
responseCode |
ゲートウェイ応答に設定する HTTP 応答/ステータスコード()。http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
|
contentType |
レスポンスペイロード MIME タイプ。
|
encoding |
応答ペイロードのコンテンツエンコーディング。
|
長さ |
応答ペイロードのコンテンツの長さ。
|
ヘッダー |
リクエストヘッダーが含まれる java.util.List<HttpHeader>。
|
<listeners> <http-gateway name="Http" urlPattern="esb-cars/*"> <property name="synchronousTimeout" value="120000"/> </http-gateway> </listeners>
<http-gateway name="http-gateway"> <exception> <mapping class="com.acme.AcmeException" status="503" /> </exception> </http-gateway>
<http-provider name="http"> <!-- Global exception mappings file... --> <exception mappingsFile="/http-exception-mappings.properties" /> </http-provider>
10.18. HTTP ゲートウェイのセキュリティー保護
10.19. HTTP ゲートウェイのセキュア化
手順10.1 タスク
- テキストエディターで
jbossesb-properties.xml
ファイルを開きます( vi jbossesb-properties.xml)。 - ファイルの <http-provider> セクションに <http-bus> を指定します。
- "busrefid" 属性を使用して、<http-gateway> から <http-bus> を参照します。注記完全な設定の例は、http-gateway クイックスタートを参照してください。
- ファイルを保存して終了します。
10.20. HTTP ゲートウェイセキュリティーの追加
<http-bus busid="secureSalesDeletes"> <allowed-roles> <role name="friend" /> </allowed-roles> <protected-methods> <method name="DELETE" /> </protected-methods> </http-bus>
表10.15
指定したメソッド | ロールの指定 | Log-in Required |
---|---|---|
いいえ |
いいえ
| いいえ |
いいえ |
はい
| すべてのメソッドについて |
はい |
はい
| 指定したメソッドのみ |
はい |
いいえ
| いいえ。指定されたメソッドは all をブロックします。 |
<http-provider name="http"> <http-bus busid="secureFriends"> <allowed-roles> <role name="friend" /> </allowed-roles> <protected-methods> <method name="DELETE" /> </protected-methods> </http-bus> <auth method="BASIC" domain="java:/jaas/JBossWS" /> </http-provider>
<http-bus busid="secureFriends" transportGuarantee="CONFIDENTIAL"> <!-- etc etc --> </http-bus>
10.21. Apache Camel
10.22. Camel Gateway
10.23. Camel ゲートウェイの設定
camel-core.jar
のみが含まれます。必要な他の依存関係(他の camel-* jars またはサードパーティーの jar を含む)を、お使いのアプリケーションではなく server//deployers/esb.deployer/lib
に追加する必要があります。コア以外の Camel コンポーネントの使用に関する詳細は、を参照してください http://community.jboss.org/wiki/CamelGatewayUsingNon-coreComponents/。
jbossesb-1.3.0.xsd
)スキーマの使用を宣言すると、jboss-esb.xml
ファイルで新しい <camel-provider> セクションが Providers の下に表示されます。
<camel-provider name="..."> <camel-bus busid="..."> <from uri="..."/> <from uri="..."/> </camel-bus> </camel-provider>
<camel-gateway name="..." busidref="..."/>
<camel-gateway name="..."> <from uri=""/> <from uri=""/> </camel-gateway>
<camel-gateway name="..." from-uri="..."/>
<camel-bus name="..." busid="..." from-uri="..."/>
<camel-gateway name="..." from-uri="..." async="false" timeout="30000"/>
- async 属性(デフォルトは false)は、基礎となる ServiceInvoker が関連するサービスを同期的または非同期に呼び出すかどうかを示します。
- timeout 属性(デフォルトは 30000)で、ServiceInvoker が同期呼び出しで待機する必要のあるミリ秒数を定義します。
10.24. 古い設定モデルから新しい設定モデルへの移行
org.jboss.soa.esb.helpers.ConfigTree
のインスタンスを介して設定を受信します。新しい設定モデルは XSD ベースです。ただし、基盤のコンポーネント設定パターンは、引き続き org.jboss.soa.esb.helpers.ConfigTree のインスタンスを介して実行されます。これは、現時点では XSD ベースの設定が ConfigTree スタイルの設定にマッピング/変換されることを意味します。
- 新しい設定モデルですべてのドキュメントを読み取ります。古い知識に基づいて新しい設定を推測できるとは限りません。
- 新しい設定でフリーフォームマークアップがサポートされる唯一の場所は <property> 要素/タイプにあります。このタイプは、<provider>、<bus>、および <listener> タイプ(およびサブタイプ)で許可されます。ただし、<property> ベースの空きフォームマークアップが ConfigTree 設定にマッピングされる唯一の場所は、<property> が <action> に存在する場所です。この場合、<property> コンテンツはターゲットの ConfigTree <action> にマッピングされます。ただし、<action> に空き形式の子コンテンツを持つ 1+ <property> 要素がある場合、このすべてのコンテンツはターゲットの ConfigTree <action> に連結されます。
- 新しい Listener/Action コンポーネントを開発する場合は、これらのコンポーネントに依存する ConfigTree ベースの設定が新しい XSD ベースの設定からマッピングできるようにする必要があります。たとえば、ConfigTree 設定モデルでは、リスナーノードの属性を使用してリスナーコンポーネントに設定を提供するか、リスナー設定内の子ノードに基づいて設定を提供するか(その日に気づいたかに応じて)決定することができます。<listener> コンポーネントのこのタイプのフリーフォーム設定は、XSD から ConfigTree へのマッピングではサポートされていません。つまり、上記の例の子コンテンツは、XSD 設定から ConfigTree スタイルの設定にマッピングされません。実際、XSD 設定は <property> にあり、その場合はマッピングコードによって無視される場合を除き、任意のコンテンツを受け入れません。
10.25. Enterprise Service Bus の設定
org.jboss.soa.esb.parameters.ParamRepositoryFactory
によって非表示になります。
public abstract class ParamRepositoryFactory { public static ParamRepository getInstance(); }
org.jboss.soa.esb.parameters.ParamRepository
インターフェイスの実装を返します。
public interface ParamRepository { public void add(String name, String value) throws ParamRepositoryException; public String get(String name) throws ParamRepositoryException; public void remove(String name) throws ParamRepositoryException; }
org.jboss.soa.esb.parameters.ParamFileRepository
)のみがあり、ファイルからパラメーターを読み込むことができることが予想されます。これを使用する実装は、org.jboss.soa.esb.paramsRepository.class
プロパティーを使用して上書きすることができます。
第11章 データのデコーディング:Mime Decoder
11.1. Message Composer
MessageComposer
インターフェイスを実装するクラスで、Madoop メッセージインスタンスを構築し、関連するサービスに送信します。メッセージコーダーは、ゲートウェイのたびにサポートされます。
11.2. MIME デコーダー
MimeDecoder
インターフェイスを実装するクラスです。MessageComposer
実装により、バイナリーアレイをデコードし、特定タイプの Java Object に変換できます。(オブジェクトのタイプは、バイナリーでエンコードされたデータの mime タイプによって決定されます。)
11.3. Mime Decoder の実装
手順11.1 タスク
org.jboss.soa.esb.listeners.message.mime.MimeDecoder
インターフェイスをアクティブにするクラスを作成します。- @MimeType アノテーションをクラスに追加し、mime タイプをアノテーション値として指定します。
META-INF/org/jboss/soa/esb/listeners/message/mime/decoders.lst
ファイルで新たに作成されたクラスを定義します。@MimeType("text/plain") public class TextPlainMimeDecoder implements MimeDecoder, Configurable { private Charset encodingCharset; public void setConfiguration(ConfigTree configTree) throws ConfigurationException { AssertArgument.isNotNull(configTree, "configTree"); String encoding = configTree.getAttribute("encoding", "UTF-8"); encodingCharset = Charset.forName(encoding); } public Object decode(byte[] bytes) throws MimeDecodeException { try { return new String(bytes, encodingCharset.name()); } catch (UnsupportedEncodingException e) { throw new MimeDecodeException("Unexpected character encoding error.", e); } } }
注記このファイルは、実行時にクラスパスに存在する必要があります。モジュールにこのファイルがない場合は、モジュールソース/リソースに追加し、ランタイム時に存在します。- MmeDecoder 実装がリスナー設定へのアクセスを必要とする場合(追加の設定情報の場合)、クラスは
org.jboss.soa.esb.Configurable
インターフェイスを実装する必要があります。
11.4. ConfigTree
jboss-esb.xml
ファイルに保存されます。
11.5. MIME デコーダー実装:すぐに使用できるボックスの実装
- text/plain
- TextPlainMimeDecoder は text/plain データを処理し、byte[] を String (デフォルト)または char[] にデコードします。
表11.1 プロパティー
プロパティー | Description | コメント |
---|---|---|
encoding |
byte[] でエンコードされた text/plain データの文字エンコーディング。
| デフォルトは UTF-8 です。 |
decodeTo |
text/plain データをデコードする方法:
| デフォルト "STRING" |
11.6. ゲートウェイ実装での Mime Decoder の使用
MimeDecoder.Factory
クラスファクトリーメソッドを使用することです。
this.mimeDecoder = MimeDecoder.Factory.getInstanceByConfigTree(config);
<fs-listener name="FileGateway1" busidref="fileChannel1" is-gateway="true" poll-frequency-seconds="10"> <property name="mimeType" value="text/plain" /> <property name="encoding" value="UTF-8" /> </fs-listener> <fs-listener name="FileGateway2" busidref="fileChannel2" is-gateway="true" poll-frequency-seconds="10"> <property name="mimeDecoder" value="com.acme.mime.ImageJPEGMimeDecoder” /> </fs-listener>
Object decodedPayload = mimeDecoder.decode(payloadBytes);
第12章 Web サービスのサポート
12.1. JBoss Web Services
12.2. JBoss Web Services のサポート
- SOAPProcessor: SOAPProcessor アクションを使用すると、JIO (SOAP to the bus)で実行されるエンドポイント(リスナー)を介して JBossWS 2.x 以降の Web サービスのエンドポイントを公開できます。これにより、JBossESB を使用して、Web サービスインターフェイスを公開しないサービスの Web サービスのエンドポイント(Web サービスごとの)を公開することができます。
- SOAPClient: SOAPClient アクションを使用すると、Web サービスエンドポイント(バスから SOAP)で呼び出しを行うことができます。
第13章 初期状態のアクション
13.1. 初期状態のアクション
13.2. JBoss Enterprise SOA Platform の非ボックスアクション
- トランスフォーマーとコンバーター
- トランスフォーマーとコンバーターアクションを使用して、メッセージデータをある形式から別の形式に変更します。
- ビジネスプロセス管理
- ソフトウェアを jBPM と統合する場合は、ビジネスプロセス管理アクションを使用します。
- スクリプト
- スクリプトアクションを使用して、サポートされているスクリプト言語で書かれたタスクを自動化します。
- サービス
- コードを Enterprise Java Beans と統合する際に、サービスアクションを使用します。
- Routing
- メッセージデータを宛先サービスに移動する際にルーティングアクションを使用します。
- Notifier
- データを、認識しない宛先に送信する場合は、通知アクションを使用します。
- Web Services/SOAP
- Web サービスをサポートする必要がある場合は、Web サービスアクションを使用します。
13.3. トランスフォーマーアクション
13.3.1. transformers
13.3.2. ByteArrayToString
入力タイプ | byte[ ] |
Class | org.jboss.soa.esb.actions.converters.ByteArrayToString |
byte[]
ベースのメッセージペイロードを取得し、java.lang.String
オブジェクトインスタンスに変換します。
表13.1 ByteArrayToString プロパティー
プロパティー | Description | 必須 |
---|---|---|
encoding |
メッセージバイトアレイのバイナリーデータエンコーディング。デフォルトは
UTF-8 です。
| いいえ |
例13.1 設定サンプル
<action name="transform" class="org.jboss.soa.esb.actions.converters.ByteArrayToString"> <property name="encoding" value="UTF-8" /> </action>
13.3.3. LongToDateConverter
入力タイプ
| java.lang.Long /long
|
出力タイプ
| java.util.Date
|
Class
| org.jboss.soa.esb.actions.converters.LongToDateConverter
|
java.util.Date
オブジェクトインスタンスに変換します。
例13.2 設定サンプル
<action name="transform" class="org.jboss.soa.esb.actions.converters.LongToDateConverter">
13.3.4. ObjectInvoke
入力タイプ | User Object |
出力タイプ | User Object |
Class | org.jboss.soa.esb.actions.converters.ObjectInvoke |
表13.2 ObjectInvoke プロパティー
プロパティー | Description | 必須 |
---|---|---|
class-processor |
メッセージペイロードの処理に使用されるプロセッサークラスのランタイムクラス名。
| はい |
class-method |
メソッドの処理に使用されるプロセッサークラスのメソッドの名前。
| いいえ |
例13.3 設定サンプル
<action name="invoke" class="org.jboss.soa.esb.actions.converters.ObjectInvoke"> <property name="class-processor" value="org.jboss.MyXXXProcessor"/> <property name="class-method" value="processXXX" /> </action>
13.3.5. ObjectToCSVString
入力タイプ | User Object |
出力タイプ | java.lang.String |
Class | org.jboss.soa.esb.actions.converters.ObjectToCSVString |
表13.3 ObjectToCSVString プロパティー
プロパティー | Description | 必須 |
---|---|---|
bean-properties |
出力 CSV 文字列の CSV 値を取得するために使用されるオブジェクト Bean プロパティー名のリスト。オブジェクトは、一覧表示される各プロパティーの getter メソッドをサポートする必要があります。
| はい |
fail-on-missing-property |
Object にプロパティーがない場合にアクションが失敗するかどうかを示すフラグ(Object がプロパティーの getter メソッドをサポートしない場合)。デフォルト値は
false です。
| いいえ |
例13.4 設定サンプル
<action name="transform" class="org.jboss.soa.esb.actions.converters.ObjectToCSVString"> <property name="bean-properties" value="name,address,phoneNumber"/> <property name="fail-on-missing-property" value="true" /> </action>
13.3.6. ObjectToXStream
入力タイプ | User Object |
出力タイプ | java.lang.String |
Class | org.jboss.soa.esb.actions.converters.ObjectToXStream |
表13.4 ObjectToXStream プロパティー
プロパティー | Description | 必須 |
---|---|---|
class-alias |
シリアル化前に
XStream.alias(String, Class) への呼び出しに使用されるクラスエイリアス。デフォルトは、入力オブジェクトのクラス名です。
| いいえ |
exclude-package |
生成された XML からパッケージ名を除外します。デフォルトは
true です。class-alias が指定されている場合は該当しません。
| いいえ |
aliases |
XStream が XML 要素をオブジェクトに変換するのに役立つ追加のエイリアスを指定します。
| いいえ |
namespaces |
XStream によって生成された XML に追加する必要がある namespace を指定します。各 namespace-uri は local-part に関連付けられます。これは、この namespace が表示される要素です。
| いいえ |
xstream-mode |
使用する XStream モードを指定します。使用できる値は、
XPATH_RELATIVE_REFERENCES (デフォルト)、XPATH_ABSOLUTE_REFERENCES 、ID_REFERENCES または NO_REFERENCES です。
| いいえ |
fieldAliases |
Xstream に追加するフィールドエイリアス。
| いいえ |
implicit-collections |
Xstream に登録される
| いいえ |
converters |
Xstream に登録されるコンバーターのリスト
| いいえ |
例13.5 設定サンプル
<action name="transform" class="org.jboss.soa.esb.actions.converters.ObjectToXStream"> <property name="class-alias" value="MyAlias" /> <property name="exclude-package" value="true" /> <property name="aliases"> <alias name="alias1" class="com.acme.MyXXXClass1" /> <alias name="alias2" class="com.acme.MyXXXClass2" /> <alias name="xyz" class="com.acme.XyzValueObject"/> <alias name="x" class="com.acme.XValueObject"/> ... </property> <property name="namespaces"> <namespace namespace-uri="http://www.xyz.com" local-part="xyz"/> <namespace namespace-uri="http://www.xyz.com/x" local-part="x"/> ... </property> <property name="fieldAliases"> <field-alias alias="aliasName" definedIn="className" fieldName="fieldName"/> <field-alias alias="aliasName" definedIn="className" fieldName="fieldName"/> ... </property> <property name="implicit-collections"> <implicit-collection class="className" fieldName="fieldName" fieldType="fieldType" itemType="itemType"/> ... </property> <property name="converters"> <converter class="className" fieldName="fieldName" fieldType="fieldType"/> ... </property> </action>
13.3.7. XStreamToObject
入力タイプ | java.lang.String |
出力タイプ | User Object (incoming-type プロパティーで指定) |
Class | org.jboss.soa.esb.actions.converters.XStreamToObject |
表13.5 XStreamToObject Properties
プロパティー | Description | 必須 |
---|---|---|
class-alias |
シリアル化中に使用されるクラスエイリアス。デフォルトは、入力オブジェクトのクラス名です。
| いいえ |
exclude-package |
XML にパッケージ名が含まれているかどうかを示すフラグ。
| はい。 |
incoming-type |
クラスタイプ。
| はい |
root-node |
XML 内の実際のルートノードとは異なるルートノードを指定します。XPath 式を取ります。
| いいえ |
aliases |
XStream が XML 要素をオブジェクトに変換するのに役立つ追加のエイリアスを指定します。
| いいえ |
attribute-aliases |
XML 属性をオブジェクトに変換するために XStream に役立つ追加の属性エイリアスを指定します。
| いいえ |
fieldAliases |
Xstream に追加するフィールドエイリアス。
| いいえ |
implicit-collections |
Xstream に登録される
| いいえ |
converters |
XML 要素および属性をオブジェクトに変換するために Xstream に役立つコンバーターを指定します。
| いいえ |
例13.6 設定サンプル
<action name="transform" class="org.jboss.soa.esb.actions.converters.XStreamToObject"> <property name="class-alias" value="MyAlias" /> <property name="exclude-package" value="true" /> <property name="incoming-type" value="com.acme.MyXXXClass" /> <property name="root-node" value="/rootNode/MyAlias" /> <property name="aliases"> <alias name="alias1" class="com.acme.MyXXXClass1/> <alias name="alias2" class="com.acme.MyXXXClass2/> ... </property> <property name="attribute-aliases"> <attribute-alias name="alias1" class="com.acme.MyXXXClass1"/> <attribute-alias name="alias2" class="com.acme.MyXXXClass2"/> ... </property> <property name="fieldAliases"> <field-alias alias="aliasName" definedIn="className" fieldName="fieldName"/> <field-alias alias="aliasName" definedIn="className" fieldName="fieldName"/> ... </property> <property name="implicit-collections"> <implicit-colletion class="className" fieldName="fieldName" fieldType="fieldType" itemType="itemType"/> ... </property> <property name="converters"> <converter class="className" fieldName="fieldName" fieldType="fieldType"/> ... </property> </action>
13.3.8. XsltAction
表13.6 XsltAction
Properties
プロパティー | Description | 必須 |
---|---|---|
get-payload-location
|
メッセージペイロードを含むメッセージボディーの場所。
指定しない場合、デフォルトのペイロードロケーションが使用されます。
|
いいえ
|
set-payload-location
|
結果ペイロードが配置されるメッセージボディーの場所。
指定しない場合、デフォルトのペイロードロケーションが使用されます。
|
いいえ
|
templateFile
|
XSL テンプレートファイルへのパス。デプロイされたアーカイブ内のファイルパスで定義するか、URL として定義できます。
|
はい
|
resultType
|
結果メッセージペイロードとして設定する結果のタイプ。
このプロパティーは、変換の出力結果を制御します。現在、以下の値を使用できます。
メッセージペイロードが
SourceResult オブジェクトで、resultType が SOURCERESULT に設定されていない場合、結果は resultType で指定されたタイプとして返されます。開発者はタイプが互換性があることを確認する必要があります。
|
いいえ
|
failOnWarning
| true の場合、変換警告が発生して例外が発生します。false の場合は、失敗がログに記録されます。
デフォルトは True です。
|
いいえ
|
uriResolver
| URIResolver を実装するクラスの完全修飾クラス名。これは、Tranformation ファクトリーに設定されます。
|
いいえ
|
factory.feature.*
|
トランフォーマットファクトリーに設定されるファクトリー機能。完全修飾 URI の機能名は、factory.feature. 接頭辞の後に指定する必要があります。つまり、factory.feature.http://javax.xml.XMLConstants/feature/secure-processing
|
No
|
Factory.attribute.*
|
トランフォーマットファクトリーに設定されるファクトリー属性。属性名は、factory.attribute. 接頭辞の後に指定する必要があります。つまり、factory.attribute.someVendorAttributename
|
いいえ
|
validation |
true の場合、無効なソースドキュメントによって例外が発生します。誤った検証が行われない場合は、適切に形成されたドキュメントが強制されます。
デフォルト値は
をクリックします。false です。
| いいえ |
schemaFile |
クラスパスにある、使用する入力スキーマファイル(XSD)。
| いいえ |
schemaLanguage |
使用する入力スキーマ言語。
| いいえ |
13.3.9. XsltActions の検証
- 無効(デフォルト)これは、検証を無効にするために
false
に設定するか、省略するように設定できます。<property name="validation" value="false"/>
- DTD
<property name="validation" value="true"/> <property name="schemaLanguage" value="http://www.w3.org/TR/REC-xml"/>
Alernatively:<property name="validation" value="true"/> <property name="schemaLanguage" value=""/>
- W3C XML Schema または RELAX NG
<property name="validation" value="true"/>
または、次のようになります。<property name="validation" value="true"/> <property name="schemaLanguage" value="http://www.w3.org/2001/XMLSchema"/>
または<property name="validation" value="true"/> <property name="schemaLanguage" value="http://relaxng.org/ns/structure/1.0"/>
- schemaFile が含まれる W3C XML スキーマまたは RELAX NG
<property name="validation" value="true"/> <property name="schemaFile" value="/example.xsd"/>
または<property name="validation" value="true"/> <property name="schemaLanguage" value="http://www.w3.org/2001/XMLSchema"/> <property name="schemaFile" value="/example.xsd"/>
Aleternatively:<property name="validation" value="true"/> <property name="schemaLanguage" value="http://relaxng.org/ns/structure/1.0"/> <property name="schemaFile" value="/example.rng"/>
- XML の形式が適切で有効な場合は、以下を行います。
- 変換が実行されます。
- パイプラインは継続します。
- XML が不正な場合は、以下を行います。
- エラーがログに記録されます。
- SAXParseException -> ActionProcessingException
- パイプラインの停止
- XML の形式が適切だが無効な場合は、以下を行います。
- 検証が有効になっていない場合は、以下を行います。
- 変換が失敗する場合があります。
- パイプラインは継続します。
- 検証が有効な場合は、以下を行います。
- エラーがログに記録されます。
- SAXParseException -> ActionProcessingException
- パイプラインの停止
13.3.10. Smooks
13.3.11. Smook の使用
SmooksAction
コンポーネントを使用して、Meoks アクションパイプラインにプラグインします。注記samples/quick starts
ディレクトリーで変換を示すクイックスタートが多数あります。(これらのクイックスタートの各変換の名前には、transform_
という単語が接頭辞として付けられます。)
13.3.12. SmooksTransformer
Class | org.jboss.soa.esb.actions.converters.SmooksTransformer |
表13.7 SmooksTransformer リソース設定
プロパティー | Description | 必須 |
---|---|---|
resource-config | Smooks リソース設定ファイル。
| はい |
表13.8 SmooksTransformer Message Profile Properties (オプション)
プロパティー | Description | 必須 |
---|---|---|
from |
メッセージ交換の参加者名。Message Producer。
| いいえ |
from-type |
from メッセージ交換参加者によって生成されたメッセージタイプ/形式。
| いいえ |
to |
メッセージ交換の参加者名。Message Consumer
| いいえ |
to |
メッセージ交換の参加者名。 Message Consumer
| いいえ |
to-type |
メッセージ交換参加者によって消費されるメッセージタイプ/フォーマット。
| いいえ |
Message.Properties
クラスを介して)メッセージにプロパティーとして指定して上書きできます。
例13.7 設定例:デフォルトの入出力
<action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer"> <property name="resource-config" value="/smooks/config-01.xml" /> </action>
例13.8 設定例:名前付き入出力
<action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer"> <property name="resource-config" value="/smooks/config-01.xml" /> <property name="get-payload-location" value="get-order-params" /> <property name="set-payload-location" value="get-order-response" /> </action>
例13.9 設定例:Message Proiles の使用
<action name="transform" class="org.jboss.soa.esb.actions.converters.SmooksTransformer"> <property name="resource-config" value="/smooks/config-01.xml" /> <property name="from" value="DVDStore:OrderDispatchService" /> <property name="from-type" value="text/xml:fullFillOrder" /> <property name="to" value="DVDWarehouse_1:OrderHandlingService" /> <property name="to-type" value="text/xml:shipOrder" /> </action>
Message.Body
にバインドされます。
13.3.13. SmooksAction
org.jboss.soa.esb.smooks.SmooksAction
クラスは、Smooks プロセスを実行するための第 2 世代アクションクラスです。(単にメッセージを変換できないことに注意してください)。
例13.10 SmooksAction
<action name="transform" class="org.jboss.soa.esb.smooks.SmooksAction"> <property name="smooksConfig" value="/smooks/order-to-java.xml" /> </action>
表13.9 SmooksAction オプション設定プロパティー
プロパティー | 説明 | デフォルト |
---|---|---|
get-payload-location |
メッセージペイロードを含むメッセージボディーの場所。
| デフォルトのペイロードの場所 |
set-payload-location |
結果ペイロードが配置されるメッセージボディーの場所。
| デフォルトのペイロードの場所 |
mappedContextObjects |
ESB メッセージボディーの EXECUTION_CONTEXT_ATTR_MAP_KEY にマップされる Smooks ExecutionContext オブジェクトのコンマ区切りリスト。デフォルトは空のリストです。オブジェクトは Serializable である必要があります。
| |
resultType |
結果メッセージペイロードとして設定する結果のタイプ。
| STRING |
javaResultBeanId |
場合にのみ関連します。
resultType=JAVA
resultType が JAVA の場合に結果としてマッピングされる Smooks Bean コンテキスト beanId。指定されていない場合、Bean コンテキスト Bean Map 全体が JAVA の結果としてマッピングされます。
| |
reportPath |
Smooks Execution Report を生成するためのパスおよびファイル名。これは開発の支援であり、実稼働環境では使用しないでください。
|
MessagePayloadProxy
クラスを使用して、ペイロードを取得およびメッセージに設定します。そのため、get-payload-location および set-payload-location アクションプロパティーで特に設定されていない限り、SmooksAction は Message.getBody ().get ()および Message.getBody ().set (Object)メソッドを使用してデフォルトのメッセージの場所で Message ペイロードを取得し、設定します。
13.3.14. SmooksAction を使用して XML、EDI、CSV、および Other Type メッセージペイロードを処理します。
手順13.1 タスク
- ソースメッセージを指定します。次のいずれかである必要があります。
- 文字列
- InputStream,
- reader、または
- バイト配列
- (Enterprise Service Bus 設定ファイルではなく、Smooks 設定ファイルを介して) Smooks を設定して、問題のメッセージタイプを処理します。たとえば、XML ソース(EDI、CSV など)を処理していない場合はパーサーを設定します。
13.3.15. SmooksAction 結果タイプの指定
<action name="transform" class="org.jboss.soa.esb.smooks.SmooksAction"> <property name="smooksConfig" value="/smooks/order-to-java.xml" /> <property name="resultType" value="JAVA" /> <property name="javaResultBeanId" value="order" /> </action>
13.3.16. PersistAction
入力タイプ | メッセージ |
出力タイプ | 入力メッセージ |
Class | org.jboss.soa.esb.actions.MessagePersister |
表13.10 PersistAction プロパティー
プロパティー | Description | 必須 |
---|---|---|
classification |
これは、メッセージの保存場所を分類するために使用されます。メッセージプロパティー
org.jboss.soa.esb.messagestore.classification がメッセージに定義されている場合は、代わりに使用されます。それ以外の場合は、インスタンス化時にデフォルトを指定できます。
| はい |
message-store-class | MessageStore の実装。
| はい |
terminal |
アクションを使用してパイプラインを終了する場合、これは true (デフォルト)である必要があります。そうでない場合は、これを false に設定し、入力メッセージが処理から返されます。
| いいえ |
<action name="PersistAction" class="org.jboss.soa.esb.actions.MessagePersister"> <property name="classification" value="test"/> <property name="message-store-class" value="org.jboss.internal.soa.esb.persistence.format.db.DBMessageStoreImpl"/> </action>
13.4. ビジネスプロセス管理アクション
13.4.1. jBPM
13.4.2. JBPM の統合
13.4.3. jBPM BpmProcessor
入力タイプ | org.jboss.soa.esb.message.Message generated by AbstractCommandVehicle.toCommandMessage() |
出力タイプ | message - 入力メッセージと同じ |
Class | org.jboss.soa.esb.services.jbpm.actions.BpmProcessor |
- NewProcessInstanceCommand
- StartProcessCommand
- CancelProcessInstanceCommand
- GetProcessInstanceVariablesCommand
表13.11 BpmProcessor プロパティー
プロパティー | Description | 必須 |
---|---|---|
command |
呼び出される jBPM コマンド。必須 許容値:
| はい |
processdefinition |
process-definition-id プロパティーが使用されていない場合、New- および Start-ProcessInstanceCommands に必要なプロパティー。このプロパティーの値は、すでに jBPM にデプロイされており、新しいインスタンスを作成するプロセス定義を参照する必要があります。このプロパティーは Signal- および CancelProcessInstance-Commands には適用されません。
| 状況により異なる |
process-definition-id |
processdefinition プロパティーが使用されていない場合、New- および Start-ProcessInstanceCommands に必要なプロパティー。このプロパティーの値は、新しいインスタンスを作成する jBPM の processdefintion id を参照する必要があります。このプロパティーは Signal- および CancelProcessInstance コマンドには適用されません。
| 状況により異なる |
actor |
jBPM アクター ID を指定する任意のプロパティー。これは New- および StartProcessInstanceCommands のみに適用されます。
| いいえ |
key |
jBPM キーの値を指定する任意のプロパティー。たとえば、このキーの値として一意の請求書 ID を渡すことができます。jBPM 側で、このキーは business key id フィールドになります。キーは、プロセスインスタンスの文字列ベースのビジネスキープロパティーです。ビジネスキーが指定されている場合は、ビジネスキーとプロセス定義の組み合わせは一意でなければなりません。キー値は MVEL 式を保持し、EsbMessage から必要な値を抽出できます。たとえば、メッセージのボディーに businessKey という名前付きパラメーターがある場合は、body.businessKey を使用します。このプロパティーは New- および StartProcessInstanceCommands のみに使用されることに注意してください。
| いいえ |
transition-name |
任意のプロパティー。このプロパティーは、StartProcessInstance- および Signal コマンドにのみ適用され、現在のノードから移行が 1 つ以上ある場合にのみ使用されます。このプロパティーが指定されていない場合、ノードからデフォルトの移行が行われます。デフォルトの移行は、jBPM processdefinition.xml のそのノードに定義された移行リストの最初の移行です。
| いいえ |
esbToBpmVars |
New- および StartProcessInstanceCommands および SignalCommand の任意のプロパティー。このプロパティーは、EsbMessage から抽出し、特定のプロセスインスタンスの jBPM コンテキストに設定する必要がある変数のリストを定義します。この一覧はマッピング要素で設定されます。各 mapping 要素には以下の属性を指定できます。
| いいえ |
13.5. スクリプトアクション
13.5.1. スクリプトアクション
13.5.2. Groovy
13.5.3. GroovyActionProcessor
Class | org.jboss.soa.esb.actions.scripting.GroovyActionProcessor |
表13.12 GroovyActionProcessor プロパティー
プロパティー | Description | 必須 |
---|---|---|
script |
Groovy スクリプトへのパス(クラスパス上)。
| |
supportMessageBasedScripting |
メッセージ内のスクリプトを許可します。
| |
cacheScript |
スクリプトをキャッシュする必要があります。デフォルトは
true です。
| いいえ |
表13.13 GroovyAction プロセッサーバインディング変数
変数 | Description |
---|---|
message |
メッセージ
|
payloadProxy |
メッセージペイロード(MessagePayloadProxy)のユーティリティー。
|
config |
アクション設定(ConfigTree)。
|
logger |
GroovyActionProcessor の静的 Log4J ロガー(ロガー)。ロギングカテゴリーは jbossesb.<esb_archive_name>.<category>.<service> です。
|
<action name="process" class="org.jboss.soa.esb.scripting.GroovyActionProcessor"> <property name="script" value="/scripts/myscript.groovy"/> </action>
13.5.4. Bean Scripting Framework (BSF)
13.5.5. ScriptingAction
Class | org.jboss.soa.esb.actions.scripting.ScriptingAction |
- Bean スクリプトフレームワークは、スクリプトを事前コンパイル、キャッシュ、再利用するための API を提供しません。このため、ScriptingAction の各実行は、再度コンパイルステップを実行します。パフォーマンス要件を評価する際には、これを念頭に置いてください。
- アプリケーションに BeanShell スクリプトを含める場合は、.bsh の代わりに .beanshell エクステンションを使用することが推奨されます。そうでないと、JBoss BSHDeployer がそれを取得する可能性があります。
表13.14 ScriptingAction プロパティー
プロパティー | Description | 必須 |
---|---|---|
script |
スクリプトへのパス(クラスパス上)。
| |
supportMessageBasedScripting |
メッセージ内のスクリプトを許可します。
| |
language |
オプションのスクリプト言語(拡張のデダクションをオーバーライドします)。
| いいえ |
表13.15 ScriptingAction プロセッサーのバインディング変数
変数 | Description |
---|---|
message |
メッセージ
|
payloadProxy |
メッセージペイロードのユーティリティー(MessagePayloadProxy)
|
config |
アクション設定(ConfigTree)
|
logger |
ScriptingAction の静的 Log4J ロガー(ロガー)
|
<action name="process" class="org.jboss.soa.esb.scripting.ScriptingAction"> <property name="script" value="/scripts/myscript.beanshell"/> </action>
13.6. サービスアクション
13.6.1. サービスアクション
13.6.2. EJBProcessor
入力タイプ | EJB メソッド名とパラメーター |
出力タイプ | EJB 固有のオブジェクト |
Class | org.jboss.soa.esb.actions.EJBProcessor |
表13.16 EJBProcessor プロパティー
プロパティー | Description | 必須 |
---|---|---|
ejb3 |
EJB3.x セッション Bean を呼び出す場合。
| |
ejb-name |
EJB のアイデンティティー。ejb3 が true の場合は任意です。
| |
jndi-name |
関連する JNDI ルックアップ。
| |
initial-context-factory |
JNDI ルックアップメカニズム。
| |
provider-url |
関連するプロバイダー。
| |
method |
呼び出す EJB メソッド名。
| |
lazy-ejb-init |
EJB がデプロイ時にではなく、ランタイム時に初期化されるべきかどうか。デフォルトは false です。
| いいえ |
ejb-params |
メソッドを呼び出す際に使用するパラメーターの一覧と、入力メッセージ内のどこにあるか。
| |
esb-out-var |
出力の場所。デフォルト値は DEFAULT_EJB_OUT です。
| いいえ |
例13.11 EJB 2.x の設定例
<action name="EJBTest" class="org.jboss.soa.esb.actions.EJBProcessor"> <property name="ejb-name" value="MyBean" /> <property name="jndi-name" value="ejb/MyBean" /> <property name="initial-context-factory" value="org.jnp.interfaces.NamingContextFactory" /> <property name="provider-url" value="localhost:1099" /> <property name="method" value="login" /> <!-- Optional output location, defaults to "DEFAULT_EJB_OUT" <property name="esb-out-var" value="MY_OUT_LOCATION"/> --> <property name="ejb-params"> <!-- arguments of the operation and where to find them in the message --> <arg0 type="java.lang.String">username</arg0> <arg1 type="java.lang.String">password</arg1> </property> </action>
例13.12 EJB 3.x の設定例
<action name="EJBTest" class="org.jboss.soa.esb.actions.EJBProcessor"> <property name="ejb3" value="true" /> <property name="jndi-name" value="ejb/MyBean" /> <property name="initial-context-factory" value="org.jnp.interfaces.NamingContextFactory" /> <property name="provider-url" value="localhost:1099" /> <property name="method" value="login" /> <!-- Optional output location, defaults to "DEFAULT_EJB_OUT" <property name="esb-out-var" value="MY_OUT_LOCATION"/> --> <property name="ejb-params"> <!-- arguments of the operation and where to find them in the message --> <arg0 type="java.lang.String">username</arg0> <arg1 type="java.lang.String">password</arg1> </property> </action>
13.7. ルーティングアクション
13.7.1. ルーティングアクション
13.7.2. アグリゲーター
Class | org.jboss.soa.esb.actions.Aggregator |
[UUID] ":" [message-number] ":" [message-count]
表13.17 Aggregator プロパティー
プロパティー | Description | 必須 |
---|---|---|
timeoutInMillis |
集約プロセスがタイムアウトするまでのタイムアウト時間(ミリ秒単位)。
| いいえ |
<action class="org.jboss.soa.esb.actions.Aggregator" name="Aggregator"> <property name="timeoutInMillies" value="60000"/> </action>
13.7.3. ストリーミングアグリゲーター
Class | org.jboss.soa.esb.actions.StreamingAggregator |
org.jboss.soa.esb.actions.aggregator.AggregateDetails
オブジェクトを含める必要がある "Aggregate.AggregateDetails" と呼ばれるプロパティーとしてメッセージに設定されます。
[SeriesUUID] ":" [message-sequence] ":" [sequence-count]
表13.18 Aggregator プロパティー
プロパティー | Description | 必須 |
---|---|---|
timeoutInMillis |
集約プロセスがタイムアウトするまでのタイムアウト時間(ミリ秒単位)。
| いいえ |
<action class="org.jboss.soa.esb.actions.StreamingAggregator" name="Aggregator"> <property name="timeoutInMillies" value="60000"/> </action>
13.7.4. EchoRouter
13.7.5. HttpRouter
Class | org.jboss.soa.esb.actions.routing.http.HttpRouter |
表13.19 Apache Commons HttpRouter
プロパティー | Description | 必須 |
---|---|---|
unwrap |
これを
true (デフォルト)に設定すると、送信前に Message オブジェクトからメッセージペイロードを抽出します。false は、MessageType に基づいて、シリアル化されたメッセージを XML または Base64 でエンコードされた JavaSerialized オブジェクトとして送信します。
| いいえ |
endpointUrl |
メッセージが転送されるエンドポイント。
| はい |
http-client-property |
HttpRouter は HttpClientFactory を使用して HttpClient インスタンスを作成および設定します。ローカルファイルシステム、クラスパス、または URI ベースのプロパティーファイルを参照する file プロパティーを使用して、ファクトリーの設定を指定できます。これがどのように実行されるかを確認するには、以下の例を参照してください。
| いいえ |
method |
現在、GET および POST のみをサポートしています。
| はい |
responseType |
応答の送信フォームを指定します。STRING または BYTES のいずれか。デフォルト値は STRING です。
| いいえ |
headers |
リクエストに追加されます。複数の <header name="test" value="testvalue" /> 要素をサポートします。
| いいえ |
MappedHeaderList |
ターゲットエンドポイントに伝播される必要があるヘッダー名のコンマ区切りリスト。ヘッダーの値は、http-gateway または現在のメッセージのプロパティー内でエンタープライズサービスバスに入るリクエストに存在する値から取得されます。
| いいえ |
<action name="httprouter" class="org.jboss.soa.esb.actions.routing.http.HttpRouter"> <property name="endpointUrl"value="http://host:80/blah"> <http-client-property name="file" value="/ht.props"/> </property> <property name="method" value="GET"/> <property name="responseType" value="STRING"/> <property name="headers"> <header name="blah" value="blahval" ></header> </property> </action>
13.7.6. Java Message Service
13.7.7. JMSRouter
Class | org.jboss.soa.esb.actions.routing.JMSRouter |
表13.20 JMSRouter
プロパティー | Description | 必須 |
---|---|---|
unwrap |
これを
true に設定すると、送信前に Message オブジェクトからメッセージペイロードを抽出します。false (デフォルト)はシリアライズされた Message オブジェクトを送信します。
| いいえ |
jndi-context-factory |
使用する JNDI コンテキストファクトリー。デフォルトは
org.jnp.interfaces.NamingContextFactory です。
| いいえ |
jndi-URL |
使用する JNDI URL。デフォルトは
127.0.0.1:1099 です。
| いいえ |
jndi-pkg-prefix |
使用する JNDI 命名パッケージ接頭辞。デフォルトは
org.jboss.naming:org.jnp.interfaces です。
| いいえ |
connection-factory |
使用する ConnectionFactory の名前。デフォルトは
ConnectionFactory です。
| いいえ |
persistent |
JMS DeliveryMody、
true (デフォルト)、または false 。
| いいえ |
priority |
使用する JMS 優先度。デフォルトは
javax.jms.Message.DEFAULT_PRIORITY です。
| いいえ |
time-to-live |
使用する JMS Time-To-Live。デフォルトは
javax.jms.Message.DEFAULT_TIME_TO_LIVE です。
| いいえ |
security-principal |
JMS 接続の作成時に使用するセキュリティープリンシパル。
| はい |
security-credentials |
JMS 接続の作成時に使用するセキュリティー認証情報。
| はい |
property-strategy |
デフォルトをオーバーライドする場合、JMSPropertiesSetter インターフェイスの実装。
| いいえ |
message-prop |
メッセージに設定するプロパティーの前に
message-prop が付けられます。
| いいえ |
jndi-prefixes |
接頭辞のコンマ区切りの文字列。これらの接頭辞を持つプロパティーは JNDI 環境に追加されます。
| いいえ |
13.7.8. EmailRouter
Class | org.jboss.soa.esb.actions.routing.email.EmailRouter |
表13.21 EmailRouter プロパティー
プロパティー | Description | 必須 |
---|---|---|
unwrap |
true は、送信前に Message オブジェクトからメッセージペイロードを抽出します。false (デフォルト)はシリアル化された Message オブジェクトを送信します。
| |
host |
SMTP サーバーのホスト名。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.host' にデフォルト設定されます。
| |
port |
SMTP サーバーのポート。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.port' にデフォルト設定されます。
| |
username |
SMTP サーバーのユーザー名。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.user' にデフォルト設定されます。
| |
password |
SMTP サーバーの上記のユーザー名のパスワード。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.password' にデフォルト設定されます。
| |
auth |
true の場合、AUTH コマンドを使用してユーザーの認証を試みます。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.auth' にデフォルト設定されます。
| |
from |
差出人の電子メールアドレス。
| |
sendTo |
宛先メールアカウント。
| |
subject |
メールの件名。
| |
messageAttachmentName |
メッセージペイロードを含む添付のファイル名(オプション)。指定しない場合には、メッセージペイロードはメッセージボディーに含まれます。
| |
message |
メールメッセージを設定する VNID メッセージの内容の前に付けられる文字列(オプション)
| |
ccTo |
メールアドレスのコンマ区切りリスト(オプション)
| |
attachment |
送信メールに添付ファイルとして追加されるファイルを含む子要素。
|
<action name="send-email" class="org.jboss.soa.esb.actions.routing.email.EmailRouter"> <property name="unwrap" value="true" /> <property name="host" value="smtpHost" /> <property name="port" value="25" /> <property name="username" value="smtpUser" /> <property name="password" value="smtpPassword" /> <property name="from" value="jbossesb@xyz.com" /> <property name="sendTo" value="system2@xyz.com" /> <property name="subject" value="Message Subject" /> </action>
13.7.9. Content-Based Router
13.7.10. RegexProvider
13.7.11. XPath ドメイン固有の言語
- まず、
XPathLanguage.dsl
ファイルで式を定義し、以下のコードを使用してルールセットでそれを参照します。expander XPathLanguage.dsl
- XPath 言語は、メッセージが
JBOSS_XML
にあり、以下の項目が定義されていることを確認します。- xpathMatch<element> : この名前は、この名前による要素が一致した場合に
true
を生成します。 - xpathEquals<element& gt; , <value > : 要素が検出され、その値が等しい場合は
true
になります。 - xpathGreaterThan<element& gt; , < value > : 要素が検出され、その値が値よりも大きい場合は、
true
になります。 - xpathLessThan<element& gt; , < value > : これは、要素が検出され、その値が小さい場合に
true
を生成します。
注記fun_cbr
クイックスタートは XPath の使用を示しています。注記完全に異なるドメイン固有の言語を定義できます。
13.7.12. ContentBasedRouter
Class | org.jboss.soa.esb.actions.ContentBasedRouter |
- XPath: アクション上でインラインで定義される単純な XPath ルール、または .properties 形式のファイルで外部で定義される単純な XPath ルール。
- Drools: Drools ルールファイル(DSL)XPath ベースの DSL の追加設定なしサポート。
表13.22 ContentBasedRouter プロパティー
プロパティー | Description | 必須 |
---|---|---|
cbrAlias |
コンテンツベースのルーティングプロバイダーエイリアス。サポートされる値は Drools (デフォルト)、Xpath、および regex です。
| |
ruleSet |
外部で定義されたルールファイル。Drools ルールプロバイダーが使用されている場合は Drools DSL ファイル、XPath プロバイダーまたは Regex プロバイダーが使用されている場合は .properties ルールファイルになります。
| |
ruleLanguage |
CBR 評価のドメイン固有言語(DSL)ファイルDrools ルールプロバイダーにのみ関連します。
| |
ruleReload |
毎回ルールファイルをリロードする必要があるかどうかを示すフラグ。デフォルトは false です。
| |
ruleAuditType |
Drools が監査ロギングを実行できるようにする任意のプロパティー。ログは Drools Eclipse プラグインに読み取り、検査できます。有効な値は CONSOLE、FILE、および THREADED_FILE です。デフォルトでは、監査ロギングは実行されません。
| |
ruleAuditFile |
監査ロギングのファイルパスを定義する任意のプロパティー。FILE または THREADED_FILE ruleAuditType にのみ適用されます。デフォルトは event です。JBoss Drools は、.log を追加することに注意してください。このファイルのデフォルトの場所は. - 現在の作業ディレクトリーです(JBoss は bin/ ディレクトリーにあります)。
| |
ruleAuditInterval |
監査イベントを監査ログにフラッシュする頻度を定義する任意のプロパティー。THREADED_FILE ruleAuditType にのみ適用されます。デフォルトは 1000 (ミリ秒)です。
| |
destinations |
<route-to> 設定のコンテナープロパティー。ルールが外部に定義されている場合は、この設定の形式は以下のようになります。
<route-to destination-name="express" service-category="ExpressShipping" service-name="ExpressShippingService"/>
設定でルールをインラインで定義すると、この設定のフォーマットは以下のとおりです(Drools プロバイダーではサポートされません)。
<route-to service-category="ExpressShipping" service-name="ExpressShippingService" expression="/order[@statusCode='2']" /> | |
namespaces |
必要な場合の <namespace> 設定のコンテナープロパティー(XPath ruleprovider など)。<namespace> 設定の形式は以下のとおりです。
<namespace prefix="ord" uri="http://acme.com/order" /> |
表13.23 ContentBasedRouter "process" メソッド
プロパティー | Description | 必須 |
---|---|---|
process |
メッセージに集計データを追加しないでください。
| |
split |
メッセージに集約データを追加します。
|
例13.13 設定 XPATH の例(インライン)
<action process="split" name="ContentBasedRouter" class="org.jboss.soa.esb.actions.ContentBasedRouter"> <property name="cbrAlias" value="XPath"/> <property name="destinations"> <route-to service-category="ExpressShipping" service-name="ExpressShippingService" expression="/order['status='1']" /> <route-to service-category="NormalShipping" service-name="NormalShippingService" expression="/order['status='2']" /> </property> </action>
例13.14 設定 XPATH の例(外部)
<action process="split" name="ContentBasedRouter" class="org.jboss.soa.esb.actions.ContentBasedRouter"> <property name="cbrAlias" value="XPath"/> <property name="ruleSet" value="xpath-rules.properties"/> <property name="ruleReload" value="true"/> <property name="destinations"> <route-to destination-name="express" service-category="ExpressShipping" service-name="ExpressShippingService"/> <route-to destination-name="normal" service-category="NormalShipping" service-name="NormalShippingService"/> </property> </action>
13.7.13. StaticRouter
Class | org.jboss.soa.esb.actions.StaticRouter |
表13.24 StaticRouter プロパティー
プロパティー | 説明 |
---|---|
destinations |
<route-to> 設定のコンテナープロパティー。
<route-to destination-name="express" service-category="ExpressShipping" service-name="ExpressShippingService"/>> |
表13.25 StaticRouter プロセスメソッド
メソッド | Description |
---|---|
process |
メッセージに集計データを追加しないでください。
|
split |
メッセージに集約データを追加します。
|
<action name="routeAction" class="org.jboss.soa.esb.actions.StaticRouter"> <property name="destinations"> <route-to service-category="ExpressShipping" service-name="ExpressShippingService"/> <route-to service-category="NormalShipping" service-name="NormalShippingService"/> </property> </action>
13.7.14. SyncServiceInvoker
Class | org.jboss.soa.esb.actions.SyncServiceInvoker |
表13.26 SyncServiceInvoker Properties
プロパティー | Description | 必須 |
---|---|---|
service-category |
サービスカテゴリー。
| はい |
service-name |
Service Name。
| はい |
failOnException |
アクションがターゲットサービス呼び出しの例外で失敗する場合。false に設定すると、アクションによって入力メッセージがパイプラインに返され、サービスが処理を継続できるようになります。障害状態を把握する必要がある場合は、このパラメーターを true に設定したままにし、パイプラインの失敗を許可することで通常のfaultTo メカニズムを使用します(デフォルトは true)。
| いいえ |
suspendTransaction |
アクティブなトランザクションが存在すると、このアクションは失敗します。このプロパティーが true に設定されている場合、トランザクションを一時停止できます。デフォルトは false です。
| いいえ |
ServiceInvokerTimeout |
インボーカーのタイムアウト(ミリ秒単位)。タイムアウトが発生すると例外が発生し、アクションが failOnException 設定に従って動作します。デフォルトは 30000 です。
| いいえ |
<action name="route” class="org.jboss.soa.esb.actions.SyncServiceInvoker"> <property name="service-category" value="Services" /> <property name="service-name" value="OM" /> </action>
13.7.15. StaticWireTap
Class | org.jboss.soa.esb.actions.StaticWireTap |
表13.27 StaticWireTap プロパティー
プロパティー | Description | 必須 |
---|---|---|
destinations |
<route-to> 設定のコンテナープロパティー。
<route-to destination-name="express" service-category="ExpressShipping" service-name="ExpressShippingService"/> |
表13.28 StaticWireTap プロセスメソッド
メソッド | Description |
---|---|
process |
メッセージに集計データを追加しないでください。
|
<action name="routeAction" class="org.jboss.soa.esb.actions.StaticWiretap"> <property name="destinations"> <route-to service-category="ExpressShipping" service-name="ExpressShippingService"/> <route-to service-category="NormalShipping" service-name="NormalShippingService"/> </property> </action>
13.7.16. E.-Mail WireTap
Class | org.jboss.soa.esb.actions.routing.email.EmailWiretap |
表13.29 E.-Mail WireTap プロパティー
プロパティー | 説明 |
---|---|
host |
SMTP サーバーのホスト名。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.host' にデフォルト設定されます。
|
port |
SMTP サーバーのポート。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.port' にデフォルト設定されます。
|
username |
SMTP サーバーのユーザー名。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.user' にデフォルト設定されます。
|
password |
SMTP サーバーの上記のユーザー名のパスワード。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.password' にデフォルト設定されます。
|
auth |
true の場合、AUTH コマンドを使用してユーザーの認証を試みます。指定しない場合、jbossesb-properties.xml のプロパティー 'org.jboss.soa.esb.mail.smtp.auth' にデフォルト設定されます。
|
from |
from のメールアドレス。
|
sendTo |
宛先メールアカウント。
|
subject |
メールの件名。
|
messageAttachmentName |
メッセージペイロードを含む添付のファイル名(オプション)。指定しない場合には、メッセージペイロードはメッセージボディーに含まれます。
|
message |
メールメッセージを設定します(オプション)。これは、Madobe メッセージの内容の前に付けられる文字列です。
|
ccTo |
メールアドレスのコンマ区切りリスト(オプション)。
|
attachment |
送信メールに添付ファイルとして追加されるファイルが含まれる子要素。
|
<action name="send-email" class="org.jboss.soa.esb.actions.routing.email.EmailWiretap"> <property name="host" value="smtpHost" /> <property name="port" value="25" /> <property name="username" value="smtpUser" /> <property name="password" value="smtpPassword" /> <property name="from" value="jbossesb@xyz.com" /> <property name="sendTo" value="systemX@xyz.com" /> <property name="subject" value="Important message" /> </action>
13.8. 通知アクション
13.8.1. 通知アクション
13.8.2. Notifier
Class | org.jboss.soa.esb.actions.Notifier |
<action name="notify" class="org.jboss.soa.esb.actions.Notifier" okMethod="notifyOK"> <property name="destinations"> <NotificationList type="OK"> <target class="NotifyConsole" /> <target class="NotifyFiles" > <file name="@results.dir@/goodresult.log" /> </target> </NotificationList> <NotificationList type="err"> <target class="NotifyConsole" /> <target class="NotifyFiles" > <file name="@results.dir@/badresult.log" /> </target> </NotificationList> </property> </action>
13.8.3. NotifyConsole
Class | NotifyConsole |
例13.15 NotifyConsole
<target class="NotifyConsole" />
13.8.4. NotifyFiles
Class | NotifyFiles |
目的 | 指定ファイルセットにメッセージの内容を書き込むことにより、通知を実行します。 |
属性 | none |
child | file |
child 属性 |
|
<target class="NotifyFiles" > <file append="true" URI="anyValidURI"/> <file URI="anotherValidURI"/> </target>
13.8.5. NotifySqlTable
Class | NotifySqlTable |
目的 | 既存のデータベーステーブルにレコードを挿入して、通知を実行します。データベースレコードにはグローバルなメッセージの内容が含まれ、任意でネストされた <column> 要素を使用して指定された他の値が含まれます。 |
属性 |
|
child | 列 |
child 属性 |
|
<target class="NotifySqlTable" driver-class="com.mysql.jdbc.Driver" connection-url="jdbc:mysql://localhost/db" user-name="user" password="password" table="table" dataColumn="messageData"> <column name="aColumnlName" value="aColumnValue"/> </target>
13.8.6. NotifyQueues
Class | NotifyQueues |
目的 | メッセージを JMS メッセージ(割り当てられたプロパティーを含む)を JMS メッセージに変換し、JMS メッセージをキューのリストに送信して通知を実行します。追加のプロパティーは、<messageProp> 要素を使用して割り当てることができます。 |
属性 | none |
child | queue |
child 属性 |
|
child | messageProp |
child 属性 |
|
<target class="NotifyQueues" > <messageProp name="aNewProperty" value="theValue"/> <queue jndiName="queue/quickstarts_notifications_queue" /> </target>
13.8.7. NotifyTopics
Class | NotifyTopics |
目的 | モデルメッセージ(割り当てられたプロパティーを含む)を JMS メッセージに変換し、JMS メッセージをトピックのリストに公開することで通知を実行します。追加のプロパティーは、<messageProp> 要素を使用して割り当てることができます。 |
属性 | none |
child | topic |
child 属性 |
|
child | messageProp |
child 属性 |
|
<target class="NotifyTopics" > <messageProp name="aNewProperty" value="theValue"/> <queue jndiName="queue/quickstarts_notifications_topic" /> </target>
13.8.8. NotifyEmail
Class | NotifyEmail |
目的 | 2025 メッセージコンテンツを含む通知メールを送信し、オプションでファイルの添付ファイルを送信します。 |
属性 | なし。 |
child | トピック。 |
child 属性 |
|
child | attachment.オプション |
子テキスト | 割り当てるファイルの名前。 |
<target class="NotifyEmail" from="person@somewhere.com" sendTo="person@elsewhere.com" subject="theSubject"> <attachment>attachThisFile.txt</attachment> </target>
13.8.9. NotifyFTP
Class | NotifyFTP |
目的 | 2025 メッセージコンテンツを含むファイルを作成し、FTP 経由でリモートファイルシステムに転送して、通知を実行します。 |
属性 | なし。 |
child | FTP |
child 属性 |
|
<target class="NotifyFTP" > <ftp URL="ftp://username:pwd@server.com/remote/dir" filename="someFile.txt" /> </target>
13.8.10. NotifyFTPList
Class | NotifyFTPList |
目的 |
NotifyFTPList は NotifyFTP を拡張し、単一のファイル名またはルート Message オブジェクトにあるファイル名の一覧を取る機能を追加します。
Message ペイロードの ファイルには、ファイルの一覧(完全パス)が含まれている必要があります。"listFiles" プロパティーが false の場合、この一覧内のすべてのファイルが設定済みの宛先 FTP サーバーディレクトリーに送信されます。"listFiles" が true の場合、ファイルは行ごとに読み取られ、各行には転送するファイルの名前が含まれます。
そのため、以下を指定できます。
|
属性 | なし。 |
child | FTP。 |
child 属性 |
|
<target class="NotifyFTPList"> <ftp URL="ftp://username:password@localhost/outputdir" filename="{org.jboss.soa.esb.gateway.file}"> listFiles="true" deletelistFile="true" </target>
13.8.11. NotifyTCP
Class | NotifyTCP |
目的 |
TCP 経由でメッセージを送信します。各接続は通知期間中のみ維持されます。
文字列データペイロードの明示的な送信のみをサポートします(文字列として、またはバイト配列(byte[])としてエンコードされます)。
|
属性 | なし。 |
child | 宛先(複数の宛先をサポートします)。 |
child 属性 |
|
<target class="NotifyTcp" > <destination URI="tcp://myhost1.net:8899" /> <destination URI="tcp://myhost2.net:9988" /> </target>
13.9. SOAP クライアントアクション
13.9.1. Simple Object Access Protocol (SOAP)
13.9.2. SOAPProcessor
13.9.3. SOAPProcessor アクション設定
<action name="JBossWSAdapter" class="org.jboss.soa.esb.actions.soap.SOAPProcessor"> <property name="jbossws-endpoint" value="ABI_OrderManager" /> <property name="jbossws-context" value="ABIV1OrderManager_war" /> <property name="rewrite-endpoint-url" value="true" /> </action>
- jbossws-endpoint
- これは、SOAPProcessor が公開している JBossWS エンドポイントです。必須。
- jbossws-context
- このオプションプロパティーは Web サービスのデプロイメントのコンテキスト名であり、JBossWS エンドポイントを一意に識別するために使用できます。
- rewrite-endpoint-url
- オプションの "rewrite-endpoint-url" プロパティーは、HTTP エンドポイントでの負荷分散をサポートするために存在します。この場合、Webservice エンドポイントコンテナーは WSDL の HTTP (S)エンドポイントアドレスをロードバランサーのロードバランサーに設定するように設定されます。この場合、rewrite-endpoint-url プロパティーを使用して、HTTP エンドポイントアドレスの書き換えをオフにできます。HTTP 以外のプロトコルには影響しません。デフォルトは true です。
13.9.4. SOAPProcessor アクションの使用
前提条件
- soap.esb サービス。これは、製品の
lib
ディレクトリーにあります。
手順13.2 タスク
- Web サービスのエンドポイントを持たないターゲットサービスへの呼び出しをラップするシンサービスラッパー Web サービス(JSR 181 実装など)を記述します。エンタープライズサービスバスで実行しているエンドポイントを使用してターゲットサービスを公開します。
13.9.5. SOAPClient
<action name="soap-wise-client-action" class="org.jboss.soa.esb.actions.soap.wise.SOAPClient"> <property name="wsdl" value="http://host:8080/OrderManagement?wsdl"/> <property name="SOAPAction" value="http://host/OrderMgmt/SalesOrder"/> <property name="wise-config"> <wise-property name="wise.tmpDir" value="/tmp" /> <wise-property name="wise.jaxb.bindings" value="some.xjb,additional.xml" /> </property> </action>
表13.30 SOAPClient オプションプロパティー
プロパティー | 説明 |
---|---|
wsdl |
使用する WSDL。
|
operationName |
webservice WSDL で指定される操作の名前。
|
SOAPAction |
エンドポイント操作は operationName に置き換えられました。
|
EndPointName |
呼び出されたエンドポイント。Webservices には複数のエンドポイントを含めることができます。指定のない場合は、wsdl の最初の名前が使用されます。
|
SmooksRequestMapper |
Smooks 設定ファイルを指定して、リクエストに定義された Java から Java マッピングを定義します。
|
SmooksResponseMapper |
Smooks 設定ファイルを指定して、応答に定義された Java から Java マッピングを定義します。
|
serviceName |
オブジェクト生成のキャッシュや、すでに生成されたオブジェクトをキャッシュするために Wise が使用するシンボリックサービス名。指定しないと、Wise は wsdl のサーブレット名を使用します。
|
username |
web サービスが BASIC 認証 HTTP によって保護されている場合に使用されるユーザー名。
|
password |
web サービスが BASIC 認証 HTTP によって保護されている場合に使用されるパスワード。
|
smooks-handler-config |
多くの場合、SOAP リクエストまたは応答を変換する必要があります(特に ヘッダー)。これは、単に標準の SOAP ハンドラーを追加するだけです。wise は JAXWS SOAP ハンドラー(カスタムハンドラーまたは Smook に基づく事前定義されたハンドラーの両方)をサポートします。
SOAP リクエストの変換(送信前)は、Smooks 変換設定プロパティーで SOAPClient アクションを設定することでサポートされます。
|
custom-handlers |
カスタム標準の JAXWS SOAP ハンドラーのセットを提供することもできます。パラメーターは、SonapHandler インターフェイスを実装するクラスの一覧を受け入れます。クラスは完全修飾名を指定し、セミコロンで区切る必要があります。
|
LoggingMessages |
送信された SOAP メッセージと受信した応答を表示する場合は、デバッグを行う場合に便利です。理想的には、System.out で交換されたすべてのメッセージを出力する JAX-WS ハンドラーを使用して、このゴールを達成します。ブール値。
|
wise-config |
Wise クライアントの設定に使用できる wise-property 要素の一覧。wise-property 要素は、name 属性および value 属性で設定されます。特殊な wise.jaxb.bindings プロパティーを使用して JAXB カスタマイズを指定できます。コンマ -eparated list of resource name included in the 2009 archive を受け入れます。
|
- HTTP SOAP (POST) request to...で Warning [SOAPClient] Received status code '500' を出力します。
- 障害を無視して、次のアクションに進みます。
samples/quickstarts
ディレクトリーにあります。
- デフォルトのボディーの場所に設定されるマップインスタンスとして
(Message.getBody().add(Map))
- 名前付きボディーの場所
(Message.getBody().add(String, Map))
に設定されたマップインスタンスとして、その本文の場所の名前は get-payload-location アクションプロパティーの値として指定します。
- OGNL フレームワークを使用して(SOAP メッセージパラメーター用)にアクセスするオブジェクトのセット。
- String ベースのキーと値のペア(<String, Object>)のセットでは、キーはキーの値で設定される SOAP パラメーターを識別する OGNL 式です。
13.9.6. Object Graph Navigation Library (OGNL)
13.9.7. Object Graph Navigation ライブラリーの使用
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://schemas.acme.com"> <soapenv:Header/> <soapenv:Body> <cus:customerOrder> <cus:header> <cus:customerNumber>123456</cus:customerNumber> </cus:header> </cus:customerOrder> </soapenv:Body> </soapenv:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://schemas.active-endpoints.com/sample/customerorder/2006/04/CustomerOrder.xsd" xmlns:stan="http://schemas.active-endpoints.com/sample/standardtypes/2006/04/StandardTypes.xsd"> <soapenv:Header/> <soapenv:Body> <cus:customerOrder> <cus:items> <cus:item> <cus:partNumber>FLT16100</cus:partNumber> <cus:description>Flat 16 feet 100 count</cus:description> <cus:quantity>50</cus:quantity> <cus:price>490.00</cus:price> <cus:extensionAmount>24500.00</cus:extensionAmount> </cus:item> <cus:item> <cus:partNumber>RND08065</cus:partNumber> <cus:description>Round 8 feet 65 count</cus:description> <cus:quantity>9</cus:quantity> <cus:price>178.00</cus:price> <cus:extensionAmount>7852.00</cus:extensionAmount> </cus:item> </cus:items> </cus:customerOrder> </soapenv:Body> </soapenv:Envelope>
13.9.8. SOAP 操作パラメーター
- デフォルトのボディーの場所に設定されるマップインスタンスとして
(Message.getBody().add(Map))
- 名前付きボディーの場所
(Message.getBody().add(String, Map))
に設定されたマップインスタンスとして、その本文の場所の名前は "paramsLocation" アクションプロパティーの値として指定します。
- 任意のタイプのオブジェクトセットを使用します。この場合、Smooks 設定をアクション属性 SmooksRequestMapper で指定し、Smooks を使用して Java から Java への変換を行う必要があります。
- 文字列ベースのキーと値のペア(<String, Object>)のセットでは、キーは、キーの値で設定される wsdl (または生成されたクラス)で指定される SOAP パラメーターの名前です。SOAP 応答メッセージ消費
- デフォルトの本文の場所(Message.getBody ().add (Map))
- on は、名前付きボディーの場所(Message.getBody ().add (String, Map))で、ボディーの場所の名前は responseLocation アクションプロパティーの値として指定します。
- 任意のタイプのオブジェクトセットに置き換えます。この場合、Smooks 設定はアクション属性 SmooksResponseMapper で指定し、Smooks を使用して Java から Java への変換を行う必要があります。
- String ベースのキーと値のペア(<String, Object>)のセットでは、キーは、キーの値で設定される wsdl (または生成されたクラス)で指定される SOAP 応答の名前です。SOAP リクエスト/応答の JAX-WS ハンドラー
- webservice_consumer_wise は、基本的な使用方法を表示します。
- webservice_consumer_wise2 は、'SmooksRequestMapper' および 'SmooksResponseMapper' を使用する方法を示しています。
- webservice_consumer_wise3 は、'smooks-handler-config' の使用方法を示しています。
- webservice_consomer_wise4 は、'custom-handlers' の使用を示しています。
13.9.9. SOAPClient アクションのエンドポイント操作の指定
手順13.3 タスク
- SOAPClient アクションで wsdl プロパティーおよび "operation" プロパティーを指定します。
<action name="soapui-client-action" class="org.jboss.soa.esb.actions.soap.SOAPClient"> <property name="wsdl" value="http://localhost:18080/acme/services/RetailerCallback?wsdl"/> <property name="operation" value="SendSalesOrderNotification"/> </action>
13.9.10. SOAP 応答メッセージの処理
- デフォルトの本文の場所(Message.getBody ().add (Map))
- 名前付きボディーの場所(Message.getBody ().add (String, Map))では、その本文の場所の名前が set-payload-location アクションプロパティーの値として指定します。
- XStream ツールキットが作成して入力する Object Graph として。また、JAXB および JAXB アノテーションのIntroductionsを使用して応答をアンマーシャリングするためのサポートを追加する予定です。
- String ベースのキーと値のペア(<String, String>)のセットとして、キーは SOAP 応答要素を識別する OGNL 式で、value は SOAP メッセージからの値を表す String です。
- Options 1 または 2 がアクション設定で指定されていない場合、raw SOAP 応答メッセージ(文字列)がメッセージに割り当てられます。
13.9.11. XStream を使用したオブジェクトグラフの設定
手順13.4 タスク
- アクションに XStream を設定します。
<action name="soapui-client-action" class="org.jboss.soa.esb.actions.soap.SOAPClient"> <property name="wsdl" value="http://localhost:18080/acme/services/RetailerService?wsdl"/> <property name="operation" value="GetOrder"/> <property name="get-payload-location" value="get-order-params" /> <property name="set-payload-location" value="get-order-response" /> <property name="responseXStreamConfig"> <alias name="customerOrder" class="com.acme.order.Order" namespace="http://schemas.acme.com/services/CustomerOrder.xsd" /> <alias name="orderheader" class="com.acme.order.Header" namespace="http://schemas.acme.com/services/CustomerOrder.xsd" /> <alias name="item" class="com.acme.order.OrderItem" namespace="http://schemas.acme.com/services/CustomerOrder.xsd" /> </property> </action>
上記の例では、要求パラメーター Map および応答オブジェクトインスタンスにデフォルト以外の名前付きの場所を指定する方法の例もあります。 - フィールド名マッピングと XStream アノテーションが付けられたクラスを指定します。
<property name="responseXStreamConfig"> <fieldAlias name="header" class="com.acme.order.Order" fieldName="headerFieldName" /> <annotation class="com.acme.order.Order" /> </property>
フィールドマッピングは、要素のローカル名が Java クラスのフィールド名に対応していない場合に、XML 要素を occasions の Java フィールドにマップするために使用できます。
13.9.12. SOAP 応答データを OGNL キー化されたマップに抽出します。
手順13.5 タスク
- responseXStreamConfig プロパティーを responseAsOgnlMap プロパティーに置き換えます。
<action name="soapui-client-action" class="org.jboss.soa.esb.actions.soap.SOAPClient"> <property name="wsdl" value="http://localhost:18080/acme/services/RetailerService?wsdl"/> <property name="operation" value="GetOrder"/> <property name="get-payload-location" value="get-order-params" /> <property name="set-payload-location" value="get-order-response" /> <property name="responseAsOgnlMap" value="true" /> </action>
注記raw SOAP メッセージを文字列として返すには、responseXStreamConfig および responseAsOgnlMap プロパティーの両方を省略します。
13.9.13. HttpClient
13.9.14. HttpClient の設定
- EasySSLProtocolSocketFactory を使用して、ターゲットサーバーが自己署名証明書で認証できるようにする SSL 接続を作成できます。
- StrictSSLProtocolSocketFactory を使用して、中間者タイプの攻撃を防ぐのに役立つ、ホスト名の検証をオプションで実行できる SSL 接続を作成できます。
- AuthSSLProtocolSocketFactory を使用すると、任意で相互クライアント/サーバー認証を適用できます。これは、プロトコルソケットファクトリーの最も柔軟な実装です。これにより、SSL 認証のほとんど(すべてでない場合)をカスタマイズできます。
org.jboss.soa.esb.http.Configurator
クラスを拡張し、configure(HttpClient, Properties)
メソッドを提供します。
表13.31 追加設定なしの実装
Configurator | Description | 必須 |
---|---|---|
HttpProtocol |
ソケットファクトリーや SSL キーストア情報など、HttpClient ホスト、ポート、およびプロトコル情報を設定します。
| はい |
AuthBasic |
HttpClient の HTTP Basic 認証を設定します。
| いいえ |
AuthNTLM |
HttpClient の NTLM 認証を設定します。
| いいえ |
表13.32 プロパティー
プロパティー | Description | 必須 |
---|---|---|
HttpProtocol |
ソケットファクトリーや SSL キーストア情報など、HttpClient ホスト、ポート、およびプロトコル情報を設定します。
| はい |
target-host-url |
http/https エンドポイントのターゲット URL
| はい |
https.proxyHost |
https 接続のプロキシーホスト
| いいえ |
https.proxyPort |
https 接続のプロキシーポート。デフォルトはポート 443 です。
| いいえ |
http.proxyHost |
http 接続のプロキシーホスト
| いいえ |
http.proxyPort |
http 接続のプロキシーポート。デフォルトはポート 80 です。
| いいえ |
protocol-socket-factory | ProtocolSocketFactory または ProtocolSocketFactoryBuilder インターフェイスを実装するソケットファクトリーを上書きします。
http のデフォルト値は httpclient
DefaultProtocolSocketFactory で、https のデフォルト値は提供した StrictSSLProtocolSocketFactory です。
AuthSSLProtocolSocketFactory ファクトリーと自己署名 SSLContext をそれぞれ設定するために、Answ コードベース AuthSSL および SelfSignedSSLProtocolSocketFactoryBuilder には、ProtocolSocketFactoryBuilder の実装が 2 つあります。
| いいえ |
keystore |
キーストアの場所
| いいえ |
keystore-passw |
キーストアパスワードまたは暗号化されたファイル
| いいえ |
keystore-type |
キーストアタイプ。デフォルトは jks です。
| いいえ |
truststore |
トラストストアの場所
| いいえ |
truststore-passw |
トラストストアパスワードまたは暗号化されたファイル
| いいえ |
truststore-type |
トラストストアタイプ。デフォルトは jks です。
| いいえ |
表13.33 プロパティー
プロパティー | Description | 必須 |
---|---|---|
auth-username |
認証ユーザー名
| はい |
auth-password |
認証パスワード
| はい |
authscope-host |
認証スコープホスト
| はい |
authscope-port |
認証スコープポート
| はい |
authscope-domain |
認証スコープドメイン
| はい |
表13.34 プロパティー
プロパティー | Description | 必須 |
---|---|---|
ntauth-username |
認証ユーザー名
| はい |
ntauth-password |
認証パスワード
| はい |
ntauthscope-host |
認証スコープホスト
| はい |
ntauthscope-port |
認証スコープポート
| はい |
ntauthscope-domain |
認証スコープドメイン
| はい |
ntauthscope-realm |
認証スコープのレルム
| いいえ |
13.9.15. SOAPClient での HttpClientFactory 設定の指定
手順13.6 タスク
- wsdl プロパティーにその他のプロパティーを追加します。
<property name="wsdl" value="https://localhost:18443/active-bpel/services/RetailerCallback?wsdl"> <http-client-property name="file" value="/localhost-https-18443.properties" > </http-client-property> </property>
注記file プロパティーの値は、ファイルシステム、クラスパス、または URI ベースのリソース(その順序で)として評価されます。このリソースには、標準の Java プロパティー形式の HttpClient 設定が含まれます。
13.9.16. アクション設定での HttpClient の直接設定
手順13.7 タスク
- プロパティーをアクション設定に直接設定します。
<property name="http-client-properties"> <http-client-property name="http.proxyHost" value="localhost"/> <http-client-property name="http.proxyPort" value="8080"/> </property>
13.9.17. SOAPProxy
- これにより、クライアントとサービスの間の疎結合が促進されます (両者はお互いをまったく認識していないため)。
- これは、クライアントがリモートサービスのホスト名/IP アドレスに直接接続できなくなったことを意味します。
- クライアントは、インバウンド/アウトバウンドパラメーターを変更する変更された WSDL を確認します。少なくとも、現在プロキシーされている元のエンドポイントではなく、ESB の公開されたエンドポイントをクライアントが指すように WSDL を微調整する必要があります。
- インバウンド要求とアウトバウンド応答の両方について、アクションパイプラインを介して SOAP エンベロープ/ボディの変換を導入できます。
- クライアントはエンタープライズサービスバス上の 2 つ以上のプロキシーエンドポイントに接続でき、それぞれに独自の WSDL や変換、ルーティング要件があり、ESB が適切なメッセージを適切なエンドポイントに送信し、究極の対応。
- ContentBasedRouter を介した複雑なコンテキストベースのルーティングが可能になります。
13.9.18. SOAPProxy アクションの使用
- プロデューサーと Web サービスのコンシューマーの両方。
- 必要なのは、外部 wsdl を指すプロパティーのみです。
- WSDL を自動的に変換できるようにする方法(オプションの wsdlTransform プロパティーを使用)。
- SOAP が HTTP に関連付けられないようにする方法。WSDL は読み取られ、HTTP トランスポートが定義されている場合は使用されます。
- HTTP を使用している場合は、任意で HttpRouter プロパティーをオーバーライドとして適用する方法。
表13.35
プロパティー | Description | 必須 |
---|---|---|
wsdlTransform |
柔軟な wsdl 変換を可能にする <smooks-resource-list> xml 設定ファイル。
| いいえ |
wsdlCharset |
元の wsdl (およびインポートされたリソース)の文字セットは UTF-8 でエンコードされます。基礎となるプラットフォームでサポートされているエンコーディングの場合、UTF-8 に変換されます。
| いいえ |
endpointUrl |
HttpRouter プロパティーの例。SSL 証明書でドメイン名の照合が重要な場合に役立ちます。
| いいえ |
file |
Apache Commons HTTPClient プロパティーファイル。SSL 経由で Web サービスにプロキシーする場合に便利です。
| いいえ |
clientCredentialsRequired |
Basic 認証クレデンシャルがエンドクライアントから送信されるか、またはファイル内に指定された認証情報が代わりに使用できるかどうか。(デフォルトは True)
| いいえ |
wsdl |
WS エンドポイントが再作成され、新しい wsdl として公開される元の wsdl url。
<definitions><service><port><soap:address の場所属性のプロトコル(http など)に応じて、プロトコル固有の SOAPProxyTransport 実装が使用されます。
値は、5 つの異なるスキームに基づいて場所を参照できます。
| はい |
例13.16 サンプル設定:基本的なシナリオ
<action name="proxy" class="org.jboss.soa.esb.actions.soap.proxy.SOAPProxy"> <property name="wsdl" value="http://host/foo/HelloWorldWS?wsdl"/> </action>
例13.17 設定例:Basic 認証および SSL
<action name="proxy" class="org.jboss.soa.esb.actions.soap.proxy.SOAPProxy"> <property name="wsdl" value="https://host/foo/HelloWorldWS?wsdl"/> <property name="endpointUrl" value="https://host/foo/HelloWorldWS"/> <property name="file" value="/META-INF/httpclient-8443.properties"/> <property name="clientCredentialsRequired" value="true"/> </action>
13.10. その他のアクション
13.10.1. SystemPrintln
System.out.println
メッセージの内容を XML としてフォーマットします。
13.10.2. SystemPrintln の使用
入力タイプ | java.lang.String |
Class | org.jboss.soa.esb.actions.SystemPrintln |
プロパティー |
|
<action name="action2" class="org.jboss.soa.esb.actions.ServiceLoggerAction"> <property name="text" value="Message arrived"/> <property name="log-payload-location" value="true"/> </action>
13.10.3. SchemaValidationAction
13.10.4. SchemaValidationAction の使用
入力タイプ | java.lang.String |
Class | org.jboss.soa.esb.actions.validation.SchemaValidationAction |
プロパティー |
|
<action name="val" class="org.jboss.soa.esb.actions.validation.SchemaValidationAction"> <property name="schema" value="/com/acme/validation/order.xsd"/> </action>
13.10.5. ServiceLoggerAction
13.10.6. ServiceLoggerAction の使用
- Debug level 設定を使用すると、メッセージが出力されます。
- トレースレベル設定を使用すると、メッセージペイロードの出力になります。
入力タイプ | java.lang.String |
Class | org.jboss.soa.esb.actions.ServiceLoggerAction |
プロパティー |
|
<action name="servicelogger" class="org.jboss.soa.esb.actions.ServiceLoggerAction"> <property name="text" value="Reached here"/><br/> <property name="get-payload-location" value="true"/> </action>
第14章 独自のアクションの開発
14.1. カスタムアクションの開発
org.jboss.soa.esb.actions.ActionLifecycle
またはorg.jboss.soa.esb.actions.ActionPipelineProcessor
を実装するライフサイクルアクションorg.jboss.soa.esb.actions.BeanConfiguredAction
を実装する Java Bean アクション- アノテーション付きアクション
- レガシーアクション
- アクションの設定方法
- アクションがインスタンス化され、スレッドの安全性に影響を与える可能性があります。
- ライフサイクルイベントの可視性があるかどうか
- アクションメソッドが直接的またはリフレクションを介して呼び出されるかどうか。
14.2. プロパティーを設定してアクションを設定する
PrintMessage
アクションは、message という名前のプロパティーを使用して出力する内容を示し、repeatCount という別のプロパティーを使用して出力する回数を示します。その場合、jboss-esb.xml
ファイルのアクション設定は以下のようになります。
<action name="PrintAMessage" class="test.PrintMessage"> <property name="information" value="Hello World!" /> <property name="repeatCount" value="5" /> </action>
14.3. 反映
14.4. 管理ライフサイクル
14.5. ライフサイクルアクション
org.jboss.soa.esb.actions.ActionLifecycle
および org.jboss.soa.esb.actions.ActionPipelineProcessor
から派生するアクションです。
14.6. ActionLifecycle
initialise
および destroy
アクションパイプラインのライフサイクルメソッドを実装するインターフェイスです。
14.7. ActionPipelineProcessor
process
、processSuccess
、および processException
メッセージ処理メソッドを利用できます。
14.8. ActionLifecycle および ActionPipelineProcessor の実装
initialise
および destroy
メソッドを上書きし、アクションがパイプラインの存続期間中リソース管理を実行できるようにすることができます。(例: initialise
メソッドで必要なキャッシュリソースで、destroy
メソッドでクリーンアップします。)
ConfigTree
インスタンスをパラメーターとして取るコンストラクターを定義する必要があります。これは、パイプライン内の特定のアクションの設定を表します。
process
メソッド以外のすべてのスタブメソッドを提供します。これらは org.jboss.soa.esb.actions.AbstractActionPipelineProcessor
および org.jboss.soa.esb.actions.AbstractActionLifecycle
です。以下のように使用します。
public class ActionXXXProcessor extends AbstractActionPipelineProcessor { public ActionXXXProcessor(final ConfigTree config) { // extract configuration } public void initialise() throws ActionLifecycleException { // Initialize resources... } public Message process(final Message message) throws ActionProcessingException { // Process messages in a stateless fashion... } public void destroy() throws ActionLifecycleException { // Cleanup resources... } }
14.9. Java Bean アクション
14.10. Java Bean アクションの設定
org.jboss.soa.esb.actions.BeanConfiguredAction
マーカーインターフェイスを実装する必要があります。コードの例を以下に示します。
import org.jboss.soa.esb.message.Message; import org.jboss.soa.esb.actions.BeanConfiguredAction; public class PrintMessage implements BeanConfiguredAction { private String information; private Integer repeatCount; public void setInformation(String information) { this.information = information; } public void setRepeatCount(Integer repeatCount) { this.repeatCount = repeatCount; } public Message process(Message message) { for (int i=0; i < repeatCount; i++) { System.out.println(information); } return message; } }
setRepeatCount()
メソッドの Integer パラメーターは、XML で指定された String 表現から自動的に変換されます。
BeanConfiguredAction
メソッドは、簡単な引数を取るアクションに適していますが、ConfigTree
メソッドは XML 表現を直接処理する必要がある場合に適しています。
process
メソッドが呼び出されます。
14.11. アノテーション付きアクション
ConfigTree
の処理に関連する複雑性が非表示になります。アノテーションが付けられたアクションの単一インスタンスは、パイプラインごとにインスタンス化され(つまり、アクションごとの設定)、スレッドセーフである必要があります。パイプラインは、常にリフレクションを使用して action メソッドを呼び出します。
14.12. アノテーションの使用
- @Process
- 最も単純な実装では、@Process アノテーションが付けられた 1 つのメソッドを持つ基本的な プレーンな古い Java オブジェクト (POJO)でアクションを作成します。
public class MyLogAction { @Process public void log(Message message) { // log the message... } }
@Process アノテーションは、クラスを有効なアクション
として識別します。 クラスに複数のメソッドがある場合は、メッセージインスタンス(またはメッセージの一部)の処理に使用される メソッドも特定します。@BodyParam、@PropertyParam、および @AttachmentParam アノテーションの説明については、より詳細な説明があります。)このアクション
のインスタンスをパイプライン
に設定するには、低/ベースレベルのアクション
の実装と同じプロセスを使用します(AbstractActionPipelineProcessor
を拡張するか、ActionLifecycle
、または他のサブタイプまたは抽象実装のいずれかを実装するもの)。<service .....> <actions> <action name="logger" class="com.acme.actions.MyLogAction" /> </actions> </service>
@Process アノテーションが付けられた複数のメソッドがアクション
実装に関連付けられている場合は、process 属性を使用して、メッセージインスタンスの処理に使用するメソッドを指定します。<service .....> <actions> <action name="logger" class="com.acme.actions.MyLogAction" process="log" /> </actions> </service>
@process メソッドを実装して以下を返すことができます。- void。これは、上記のロガーアクションの実装と同様に戻り値がないことを意味します。
- Message: これはメッセージインスタンスです。 これは、アクションパイプラインのアクティブ/現在のインスタンスになります。
- 別のタイプ。 メソッドがメッセージインスタンスを返さない場合、返されるオブジェクトインスタンスはアクションパイプラインの現在のメッセージインスタンスに設定されます。 メッセージに設定する場所は、set-payload-location<action> 設定プロパティーによって異なります。これは、通常の
MessagePayloadProxy
ルールに従ってデフォルトです。
@Process メソッドを使用して、さまざまな方法でパラメーターを指定します。これにより、以下が可能になります。- メッセージインスタンスをメソッドパラメーターとして指定します。
- 任意のパラメータータイプを 1 つ以上指定します。 Enterprise Service Bus フレームワークは、アクティブ/現在のパイプラインメッセージインスタンスでそのタイプのデータを検索します。最初に、メッセージボディー、プロパティー、添付ファイルの順に検索し、このデータをそれらのパラメーターの値として渡します (または見つからない場合は
null
)。
最初のオプションの例は、ロガーアクションの上述されています。 2 番目のオプションの例を以下に示します。public class OrderPersister { @Process public OrderAck storeOrder(OrderHeader orderHeader, OrderItems orderItems) { // process the order parameters and return an ack... } }
この例では、@Process メソッドはパイプライン
の以前のアクションに依存してOrderHeader
およびOrderItem
オブジェクトインスタンスを作成し、それらを現在のメッセージに割り当てます。 (おそらく、より現実的な実装では、XML または EDI ペイロードを注文インスタンスにデコードする一般的なアクション実装があり、その後に返されます。OrderPersister
は注文インスタンスを唯一のパラメーターとして取ります。 以下に例を示します。public class OrderDecoder { @Process public Order decodeOrder(String orderXML) { // decode the order XML to an ORder instance... } } public class OrderPersister { @Process public OrderAck storeOrder(Order order) { // persist the order and return an ack... } }
サービス設定で 2 つのアクションをチェーンします。<actions> <action name="decode" class="com.acme.orders.OrderDecoder" /> <action name="persist" class="com.acme.orders.OrderPersister" /> </actions>
このコードは、アノテーションが少ないため、オプション #2 で読み取るのが簡単になりますが、適切なパラメーター値のメッセージを介してランタイムのhunting のプロセスが完全に確定されないため、リスクが発生し ます。 このため、Red Hat は @BodyParam、@PropertyParam、および @AttachmentParam アノテーションをサポートします。これらの @Process メソッドパラメーターアノテーションを使用して、メッセージのどこから @Process メソッドの個別のパラメーター値を取得するかを明示的に定義します。その名前が示すように、これらの各アノテーションを使用すると、特定のパラメーターの名前付きの場所 (メッセージボディー、プロパティー、または添付ファイル内) を指定できます。public class OrderPersister { @Process public OrderAck storeOrder( @BodyParam("order-header") OrderHeader orderHeader, @BodyParam("order-items") OrderItems orderItems) { // process the order parameters and return an ack... } }
指定したメッセージの場所に値が含まれていない場合は、このパラメーターに null を渡します(@Process メソッドインスタンスはこれの処理方法を決定できます)。一方、指定した場所に誤ったタイプの値が含まれる場合、MessageDeliverException
が出力されます。 - @ConfigProperty
- ほとんどのアクションには、ある程度のカスタム設定が必要です。 Na アクション設定では、プロパティーは <action> 要素の <property> サブ要素として提供されます。
<action name="logger" class="com.acme.actions.MyLogAction"> <property name="logFile" value="logs/my-log.log" /> <property name="logLevel" value="DEBUG" /> </action>
これらのプロパティーを使用するには、低/ベースレベルのアクション実装を使用します(AbstractActionPipelineProcessor
を拡張するか、ActionLifecycle
を実装してください)。これには、ConfigTree
クラス(コンストラクターを介してアクションに提供される)の使用が関係します。アクションを実装するには、以下の手順に従います。ConfigTree
インスタンスを提供するアクションクラスでコンストラクターを定義します。ConfigTree
インスタンスから関連するアクション設定プロパティーをすべて取得します。- 必須のアクションプロパティーの有無を確認し、<action> 設定で指定されていない場所で例外を発生させます。
- すべてのプロパティー値を文字列(
ConfigTree
で指定)からアクション実装で使用される適切なタイプにデコードします。たとえば、java.lang.String
からjava.io.File
、java.lang.String
をブール値に、java.lang.String
を long などに決定します。 - 設定した値をターゲットプロパティータイプにデコードできない場所で例外を発生させます。
- 複数の異なる設定の可能性に ユニットテスト を実装し、上記のタスクが適切に完了していることを確認します。
上記のタスクは一般的に簡単ですが、面倒でエラーが発生しやすく、設定ミスの処理方法に関してアクション間で不整合が発生する可能性があります。 多くのコードを追加して、混乱が発生する場合もあります。アノテーションが付けられたアクションは、@ConfigProperty を介してこれらの問題に対処します。MyLogActions 実装を展開します。これには、logFile と logLevel の 2 つの必須の設定プロパティーがあります。public class MyLogAction { @ConfigProperty private File logFile; @ConfigProperty private LogLevel logLevel; public static enum LogLevel { DEBUG, INFO, WARN } @Process public void log(Message message) { // log the message at the configured log level... } }
注記@ConfigProperty アノテーションを "setter" メソッドで定義することもできます(フィールドの ではなく)。これはすべて完了する必要があります。Enterprise Service Bus がアクションをデプロイすると、実装とデコードされた値内のマップの両方を検証します(上記の LogLevel enum の場合のように列挙のサポートを含む)。@ConfigProperty アノテーションを持つアクションフィールドを見つけます。開発者は、ConfigTree
クラスをまったく処理したり、追加のコードを開発したりする必要はありません。デフォルトでは、@ConfigProperty アノテーションを持つすべてのクラスフィールドは必須です。 必須ではないフィールドは、以下の 2 つの方法のいずれかで処理されます。- フィールドの @ConfigProperty アノテーションに
use = Use.OPTIONAL
を指定します。 - フィールドの @ConfigProperty アノテーションに defaultVal を指定します。(これはオプションです。)
ログアクションのプロパティーのみをオプションにするには、以下のようなアクションを実装します。public class MyLogAction { @ConfigProperty(defaultVal = "logs/my-log.log") private File logFile; @ConfigProperty(use = Use.OPTIONAL) private LogLevel logLevel; public static enum LogLevel { DEBUG, INFO, WARN } @Process public void log(Message message) { // log the message... } }
@ConfigProperty アノテーションは、2 つの追加フィールドをサポートします。- name: アクションインスタンスでその名前のフィールドを入力するために使用されるアクション設定プロパティーの名前を明示的に指定します。
- choice: このフィールドを使用して、それ自体に許可される設定値を制限します。 これは、( LogLevelのように)列挙型を使用して実行することもできます。
name フィールドは、古いアクション(低/ベースレベル実装タイプを使用する)を新しいアノテーションベースの実装に移行する場合など、さまざまな状況で使用される場合があります。これは、プロパティーの古い設定名(後方互換性のために変更できない)が有効な Java フィールド名にマップされないことのみとなります。ログアクションを例として取り込むと、これがログアクションの古い設定であったとします。<action ...> <property name="log-file" value="logs/my-log.log" /> <property name="log-level" value="DEBUG" /> </action>
ここでのプロパティー名は有効な Java フィールド名にマッピングされないため、@ConfigProperty アノテーションの名前を指定します。public class MyLogAction { @ConfigProperty(name = "log-file") private File logFile; @ConfigProperty(name = "log-level") private LogLevel logLevel; public static enum LogLevel { DEBUG, INFO, WARN } @Process public void log(Message message) { // log the message... } }
Bean 設定のプロパティー値は文字列の値からデコードされます。適切な POJO Bean プロパティータイプと照合するには、以下の単純なルールが使用されます。- プロパティータイプに単一引数の文字列コンストラクターがある場合は、それを使用します。
- Pimitive の場合は、オブジェクトタイプの単一引数の文字列コンストラクターを使用します。たとえば、int の場合は、Integer オブジェクトを使用します。
- 列挙の場合は、
Enum.valueOf
を使用して設定文字列を列挙値に変換します。
- @initialize および @Destroy
- アクションの実装は、デプロイ時に初期化タスクを実行する必要がある場合があります。また、アンデプロイ中にクリーンアップのウォールを実行する必要もあります。 このような理由により、@Initialize および @Destroy メソッドアノテーションがあります。以下に例をいくつか示します。デプロイメント時に、ロギングアクションは一部のチェック(例:ファイルとディレクトリーが存在する)を実行しなければならない場合があります。また、いくつかの初期化タスクを実行することもできます(書き込みのためにログファイルを開くなど)。アンデプロイ時には、(ファイルを閉じるなど)クリーンアップタスクを実行する必要がある場合があります。これらのタスクを実行するコードを以下に示します。
public class MyLogAction { @ConfigProperty private File logFile; @ConfigProperty private LogLevel logLevel; public static enum LogLevel { DEBUG, INFO, WARN } @Initialize public void initializeLogger() { // Check if file already exists… check if parent folder // exists etc... // Open the file for writing... } @Destroy public void cleanupLogger() { // Close the file... } @Process public void log(Message message) { // log the message... } }
注記@ConfigProperty アノテーションはすべて、@Initialize デプロイヤーが @Initialize メソッドを呼び出す際に処理されます。そのため、@Initialize メソッドは、カスタム初期化を実行する前にこれらのフィールドの準備が整っている可能性があります。注記メソッドの指定には、これらの両方のアノテーションを常に使用する必要はありません。 必要な場合にのみ指定します。つまり、メソッドが初期化のみを必要とする場合は、@Initialize アノテーションのみを使用します(@Destroy アノテーションが付けられた一致メソッドを指定する必要はありません)。注記単一のメソッドを指定し、@Initialize と @Destroy の両方にアノテーションを付けることができます。注記オプションで、@Initialize メソッドでConfigTree
パラメーターを指定できます。これは、ConfigTree
インスタンスに依存するアクションにアクセスできるようにします。 - @onSuccess および @OnException
- これらのアノテーションを使用して、アクションが設定されている
パイプライン
の正常な実行または失敗した実行で実行するメソッドを指定します。public class OrderPersister { @Process public OrderAck storeOrder(Order order) { // persist the order and return an ack... } @OnSuccess public void logOrderPersisted(Message message) { // log it... } @OnException public void manualRollback(Message message, Throwable theError) { // manually rollback... } }
これらの両方のアノテーションの場合、メソッドに渡されるパラメーターは任意です。上記のパラメーターには、none、一部、またはすべてを指定できます。 Enterprise Service Bus のフレームワークは、それぞれの場合に関連するパラメーターを解決します。
14.13. レガシーアクション
14.14. レガシーアクションの動作および属性
- アクションの設定は、単一の
ConfigTree
パラメーターを持つコンストラクターのプロビジョニングを通じて行われます。 - アクションは、パイプラインを通過する すべてのメッセージ に対してインスタンス化されます。
- アクションには、ライフサイクルメソッドに関する知識はありません。
process
メソッドの呼び出しは常にリフレクションを介して行われます。
第15章 ゲートウェイとコネクター
15.1. ゲートウェイとコネクターの概要
はじめに
JBoss Enterprise SOA Platform と対話するすべてのクライアントが、そのネイティブプロトコルとメッセージ形式を理解することができるわけではありません。そのため、アーキテクト対応のエンドポイント(JBossESB を理解するエンドポイント)と、JBossESB を認識しないエンドポイント(JBossESB を理解しないもの)の間にブリッジできる必要があります。このようなブリッジングテクノロジーは、さまざまな分散システムに存在し、ゲートウェイやコネクターと呼ばれます。
15.2. ゲートウェイ
15.2.1. ゲートウェイリスナー
org.jboss.soa.esb.message.Message
形式に変換します。この変換は、ゲートウェイの種類に応じてさまざまな方法で行われます。変換が行われると、ゲートウェイリスナーはデータを正しい宛先にルーティングします。
15.2.2. ゲートウェイリスナーと通常のリスナーの相違点
- ゲートウェイクラスは、ファイル、JMS メッセージ、SQL テーブルなどに含まれる任意のオブジェクトを取得できます(各ゲートウェイクラスは特定のトランスポートに特化されています)、JBossESB リスナーは、このドキュメントのメッセージ セクションで説明されているように JBossESB の正規化されたメッセージのみを処理できます。ただし、これらのメッセージには任意のデータを含めることができます。
- message 設定アクションを実行するアクションクラスが 1 つだけ呼び出されます。allInOne リスナーは、アクション処理パイプラインを実行できます。
- 'picked up'(ピックアップされたオブジェクトは、Maker メッセージオブジェクトを返す単一の 'composer class')を呼び出すために使用されます。最終的には、このサービスに対応する必要があるターゲットサービスに配信されます。設定時に定義されるターゲットサービスは、実行時にレジストリーによって EPR (または EPR の一覧)に変換されます。レジストリーによって返される EPR は、Madobe Messages のヘッダーに含まれる 'toEPR' と似ています。ただし、着信オブジェクトは toEPR を決定する動的な方法を持たない 'ESB-unaware' であるため、この値は設定時にゲートウェイに提供され、すべての送信メッセージに含まれます。同梱のコンポーザークラスがいくつかあります。デフォルトのファイルコンポーザクラスは、ファイルの内容をメッセージボディーにパッケージ化するだけです。JMS メッセージでも同じプロセスが発生します。SQL テーブル行にクラスを作成するデフォルトのメッセージは、設定で指定されたすべての列のコンテンツを java.util.Map にパッケージ化することです。これらのデフォルトの composer クラスはほとんどの用途に適していますが、独自のクラスを指定することもできます。唯一の要件は、単一の ConfigTree 引数を取るコンストラクターが必要で、Message コンポジションメソッドを提供する必要があります(デフォルト名は process ですが、コンストラクター時に提供された ConfigTree 内の <action> 要素の process 属性で異なる設定を行うことができます)。処理メソッドは、型オブジェクトの単一の引数を取り、メッセージ値を返す必要があります。FileGateway は
file-filter-class
設定属性を受け入れます。これにより、問題のゲートウェイが使用するファイルを選択するのに使用できる FileFilter 実装を定義できます。ユーザー定義の FileFilter インスタンスの初期化はゲートウェイによって実行されます。インスタンスがorg.jboss.soa.esb.listeners.gateway.FileGatewayListener.FileFilterInit
タイプでもあると、init
メソッドが呼び出され、ゲートウェイ ConfigTree インスタンスに渡されます。デフォルトでは、FileFilter 実装は FileGateway によって定義され、使用されます。入力接尾辞が設定ファイルに定義されている場合、その接尾辞に一致するファイルが返されます。または、入力接尾辞がない場合は、作業接尾辞、エラー接尾辞、および post 接尾辞に一致しない限り、すべてのファイルが許可されます。
15.2.3. ゲートウェイデータマッピング
- JMS ゲートウェイ
- 入力メッセージが JMS TextMessage の場合、関連付けられた String はデフォルトの Body の場所に配置されます。ObjectMessage または BytesMessage の場合、コンテンツは body location という名前の BytesBody.BYTES_LOCATION 内に配置されます。
- ローカルファイルゲートウェイ
- これにより、"Body location" という名前の BytesBody.BYTES_LOCATION 内に内容が置かれます。
- Hibernate Gateway
- コンテンツは、Body location という名前の ListenerTagNames.HIBERNATE_OBJECT_DATA_TAG に配置されます。
- リモートファイルゲートウェイ
- コンテンツは、Body location という名前の BytesBody.BYTES_LOCATION に配置されます。
15.2.4. ゲートウェイデータマッピングの変更
- ファイルゲートウェイ
org.jboss.soa.esb.listeners.message.MessageComposer
インターフェイスのインスタンスは、変換を実行します。デフォルトの動作を変更するには、独自の Compose および decompose メソッドを定義する適切な実装を指定します。composer-class 属性名を使用して、設定ファイルに MessageComposer 実装を必ず指定してください。- JMS および Hibernate ゲートウェイ
- これらの実装では、設定クラスの定義にリフレクションアプローチを使用します。独自のメッセージ composer クラスを提供し、設定ファイルで composer-class 属性名を使用して、使用するインスタンスをゲートウェイに通知します。composer-process 属性を使用して、メッセージが必要なときに呼び出すクラスの動作をゲートウェイに通知することができます。このメソッドは オブジェクトを取り、メッセージを返す必要があります。指定しない場合は、プロセスのデフォルト名が使用されます。
15.3. コネクター
15.3.1. Java Connector Architecture (JCA)
- connections
- transactions
- security
- life-cycle
- work instances
- transaction inflow
- message inflow
15.3.2. JCA 経由での接続
org.jboss.soa.esb.listeners.jca.InflowGateway
クラスを実装するエンドポイントクラスを実装する必要があります。
public interface InflowGateway { public void setServiceInvoker(ServiceInvoker invoker); }
public class JmsEndpoint implements InflowGateway, MessageListener { private ServiceInvoker service; private PackageJmsMessageContents transformer = new PackageJmsMessageContents(); public void setServiceInvoker(ServiceInvoker invoker) { this.service = invoker; } public void onMessage(Message message) { try { org.jboss.soa.esb.message.Message esbMessage = transformer.process(message); service.deliverAsync(esbMessage); } catch (Exception e) { throw new RuntimeException(e); } } }
org.jboss.soa.esb.listeners.jca.JmsEndpoint
で提供されます。このクラスは、JMS JCA インフローアダプターを使用して再度使用できます。
15.3.3. JCA インフローゲートウェイの設定
jboss-esb.xml
ファイルの設定を変更して JCA インフローゲートウェイを設定します。
<service category="HelloWorld_ActionESB" name="SimpleListener" description="Hello World"> <listeners> <jca-gateway name="JMS-JCA-Gateway" adapter="jms-ra.rar" endpointClass="org.jboss.soa.esb.listeners.jca.JmsEndpoint"> <activation-config> <property name="destinationType" value="javax.jms.Queue"/> <property name="destination" value="queue/esb_gateway_channel"/> </activation-config> </jca-gateway> ... </service>
<service category="HelloWorld_ActionESB" name="SimpleListener" description="Hello World"> <listeners> <jca-gateway name="JMS-JCA-Gateway" adapter="jms-ra.rar" endpointClass="org.jboss.soa.esb.listeners.jca.JmsEndpoint"> <activation-config> <property name="destinationType" value="javax.jms.Queue"/> <property name="destination" value="queue/esb_gateway_channel"/> </activation-config> </jca-gateway> ... </service>
表15.1 JCA-gateway 設定属性
属性 | 必須 | Description |
---|---|---|
name | はい | ゲートウェイの名前 |
adapter | はい | 使用しているアダプターの名前。JBoss では、デプロイした RAR のファイル名です(例: jms-ra.rar )。 |
endpointClass | はい | エンドポイントクラスの名前。 |
messagingType | いいえ | アダプターのメッセージインターフェイス。指定しないと、エンドポイントクラスに基づいて推測されます。 |
transacted | いいえ | デフォルトは true です。JTA トランザクション内でメッセージを呼び出すかどうか。 |
15.3.4. 標準のアクティベーションプロパティーのマッピング
表15.2 標準のアクティベーションプロパティーのマッピング
属性 | 場所 | Description |
---|---|---|
maxThreads | jms-listener | 同時に処理できるメッセージの最大数。 |
dest-name | jms-message-filter | JMS 宛先名。 |
dest-type | jms-message-filter | JMS 宛先タイプ、QUEUE または TOPIC。 |
selector | jms-message-filter | JMS メッセージセレクター。 |
providerAdapterJNDI | jms-jca-provider | JCA インフローがリモート JMS プロバイダーにアクセスするために使用できるプロバイダーアダプターの JNDI の場所。これは、デフォルトの JCA インフローアダプターによってサポートされる JBoss 固有のインターフェイスであり、必要に応じて他のインフローアダプターで使用できます。 |
ActivationMapper
. インターフェイスを実装するクラスを指定すると、この動作を過剰に最適化できます。このクラスは、グローバルまたは個別のデプロイメント設定内で宣言できます。
jbossesb-properties.xml
ファイルでグローバルに指定すると、設定されるプロパティーの名前は org.jboss.soa.esb.jca.activation.mapper.<adapter name> で、値は ActivationMapper のクラス名です。
jms-ra.rar
のアクティベーション仕様でプロパティーをマップするために使用されるデフォルトの ActivationMapper の設定を示しています。
<properties name="jca"> <property name="org.jboss.soa.esb.jca.activation.mapper.jms-ra.rar" value="org.jboss.soa.esb.listeners.jca.JBossActivationMapper"/> </properties>
<jms-listener name="listener" busidref="bus" maxThreads="100"> <property name="jcaActivationMapper" value="TestActivationMapper"/> </jms-listener>
<jms-bus busid="bus"> <property name="jcaActivationMapper" value="TestActivationMapper"/> <jms-message-filter dest-type="TOPIC" dest-name="DestName"/> </jms-bus>
<jms-jca-provider name="provider" connection-factory="ConnectionFactory"> <property name="jcaActivationMapper" value="TestActivationMapper"/> <jms-bus busid="bus"> <jms-message-filter dest-type="TOPIC" dest-name="DestName"/> </jms-bus> </jms-jca-provider>
第16章 JAXB アノテーションの概要
16.1. JAXB アノテーションの概要
16.2. JAXB アノテーションのはじめに
META-INF/jaxb-intros.xml
ファイルに保存する必要があります。
16.3. JAXB アノテーションの概要設定の作成
- @XmlType
- @XmlElement
- https://jaxb.dev.java.net/nonav/2.1.3/docs/api/javax/xml/bind/annotation/XmlElement.html: これは、Field 要素およびMethod 要素になります。
- @XmlAttribute
- https://jaxb.dev.java.net/nonav/2.1.3/docs/api/javax/xml/bind/annotation/XmlAttribute.html: これは、Field 要素およびMethod 要素になります。
<?xml version = "1.0" encoding = "UTF-8"?> <jaxb-intros xmlns="http://www.jboss.org/xsd/jaxb/intros"> <!-- The type namespaces on the customerOrder are different from the rest of the message... --> <Class name="com.activebpel.ordermanagement.CustomerOrder"> <XmlType propOrder="orderDate,name,address,items" /> <Field name="orderDate"> <XmlAttribute name="date" required="true" /> </Field> <Method name="getXYZ"> <XmlElement namespace="http://org.jboss.esb/quickstarts/bpel/ABI_OrderManager" nillable="true" /> </Method> </Class> <!-- More general namespace config for the rest of the message... --> <Class name="com.activebpel.ordermanagement.*"> <Method name="get.*"> <XmlElement namespace="http://ordermanagement.activebpel.com/jaws" /> </Method> </Class> </jaxb-intros>
付録A 更新履歴
改訂履歴 | |||
---|---|---|---|
改訂 5.3.1-78.400 | 2013-10-31 | Rüdiger Landmann | |
| |||
改訂 5.3.1-78 | Thu Feb 07 2013 | CS Builder Robot | |
|