転送 SDK ユーザーズ ガイド

     前  次    目次     
ここから内容

Workshop for WebLogic 用の Oracle Service Bus 転送の開発

この章では、Oracle Service Bus Workshop for WebLogic デザイン タイム用の転送を開発するためのベスト プラクティス、設計上の考慮事項、およびパッケージ化について説明しています。転送 SDK のインタフェースは、転送プロトコルと Oracle Service Bus ランタイムの間の橋渡しを行います。

ヒント : この章を開始する前に、「設計上の考慮事項」を確認してください。

この章には、以下の節が含まれています。

 


はじめに

Oracle Service Bus 転送は、元々は、Oracle Service Bus サーバにデプロイし、Oracle Service Bus Console を使用してコンフィグレーションするように設計されています。Workshop for WebLogic などの設計環境で使用する場合、SDK と既存の転送を多少変更する必要があります。

このドキュメントでは、Oracle Service Bus 転送デザイン タイムを Oracle Service Bus Console 以外のプラットフォームで使用できるようにするための追加の手順について説明します。

サンプル ソケット転送は、Workshop for WebLogic に移植されており、Workshop for WebLogic 統合のベスト プラクティスと見なすことができます。サンプル ソケットのリソースは、ALSB_HOME/samples/servicebus/sample-transport/ にあります。Java ソース ファイルは /src サブディレクトリにあります。サンプルには、Workshop for WebLogic 統合および Oracle Service Bus Console デプロイメントの両方のサンプル ソケット転送を自動的にパッケージ化するビルド スクリプトも含まれています。サンプル ソケット転送のビルドおよびデプロイについては、「サンプル ソケット転送プロバイダ」を参照してください。

 


サービスのランタイムとサービスのコンフィグレーション

転送を開発する場合は、ランタイム アスペクトとコンフィグレーション アスペクトを区別する必要があります。ランタイム アスペクトには、プロキシ サービスまたはビジネス サービスのデプロイメントおよびサービスの実行時の呼び出しが含まれます。コンフィグレーション アスペクトには、プロキシまたはサービスのコンフィグレーションと検証が含まれます。

ランタイム アスペクトは、Oracle Service Bus サーバが実行されている状況で常に実行されるため、変更する必要はありません。ただし、コンフィグレーション アスペクトは、設計環境に依存します。

開発者は、以下の 3 種類のモードを考慮する必要があります。

  1. オンライン モード – カスタム転送のサービスが、実行中の Oracle Service Bus サーバで Oracle Service Bus Console によってコンフィグレーションされます。
  2. オフライン モード - 転送が、Oracle Service Bus サーバの外部で実行されている設計環境を使用してコンフィグレーションされます。リモート サーバは使用できません。
  3. オフライン モード (リモート サーバあり) - 転送が、Oracle Service Bus サーバの外部で実行されている設計環境を使用してコンフィグレーションされます。ただし、リモート サーバが利用可能であり、検証およびコンフィグレーションの両方の目的に使用できます。

Workshop for WebLogic で実行される転送は、オフライン モードと、必要に応じて、オフライン モード (リモート サーバあり) をサポートする必要があります。

この節では、以下のトピックを取り上げます。

オフライン メソッド

オフライン モードで転送をデプロイする場合、コンフィグレーション フレームワークは、すべてのリソースのコンフィグレーション用に 1 つのセッションを作成します。このセッションがアクティブ化されることはありません。プロキシ サービスまたはビジネス サービスは、実行中の Oracle Service Bus サーバにしかデプロイできないため、セッションをアクティブ化する必要はありません。ただし、やはり衝突およびコンフィグレーション エラーの検出は重要であるため、検証メソッドは引き続き実行されます。

以下は、オフライン モードで実装する必要がある、転送 SDK によって定義されているクラスおよびメソッドの最小セットのリストです。読みやすくするために、例外はメソッド シグネチャから削除されています。

注意 : オフライン モード用に転送を完全に再実装する必要はありません。ほとんどの場合、転送は、既存のメソッドにいくつかの変更を加えるだけで、オンライン モードとオフライン モードの両方をサポートできます。

オフラインで作業する場合の制限

オフラインで作業する場合、サーバ上で実行されている WebLogic Server サービスは使用できません。「オフライン メソッド」で説明されているメソッド内でこれらのサービスを使用しないでください。

以下は、オフラインで作業する場合の制限の例です。

一部のサービスが使用できないため、転送のユーザ インタフェースがどのように影響を受けるかを評価する必要があります。一般的に、ユーザ インタフェースは、ユーザが値をサーバ環境から取得しようとする代わりに、値を手動でコンフィグレーションできるだけの柔軟性を備えている必要があります。

Workshop for WebLogic デザイン タイムでは、現時点では、Oracle Service Bus クラスタへのデプロイメントはサポートされていません。そのため、クラスタがないものとしてユーザ インタフェースを設定する必要があります。必要に応じて、ユーザは、カスタム ファイルを使用してコンフィグレーションを更新し、Oracle Service Bus クラスタへのデプロイメントを強制することができます。

たとえば、一部の転送では、TransportManagerHelper を使用し、ユーザがドロップダウン リストから選択できるようにして、使用可能な WorkManager 項目のリストを取得します。ただし、オフライン モードでは MBean が使用できないため、ドロップダウン リストを設定することはできません。転送プロバイダには次の 2 つの選択肢があります。

  1. ユーザが正確な WorkManager 名を入力できるようにします。この場合、オフラインで作業する際は、ユーザ インタフェースを、ドロップダウン リストではなくテキスト ボックスに変更する必要があります。
  2. より柔軟性の低いもう 1 つの選択肢は、デフォルトの WorkManager だけを使用してドロップダウン リストを設定する方法です。サービスが実行中の Oracle Service Bus サーバにプッシュされるときに、環境値の代入を使用して WorkManager 名を切り替えることができます。

オフライン (リモート サーバあり) での作業

オフラインで作業する場合に、リモート サーバを使用できる場合があります。たとえば、Workshop for WebLogic でサービスをコンフィグレーションするときに、ユーザが、リモートの Oracle Service Bus サーバを現在のプロジェクトに関連付けることができます。転送プロバイダは、WebLogic Server MBean にアクセスして情報を取得することで、リモート サーバを利用することができます。このモードは、オンラインでの作業に似ていますが、コードがサーバで実行されず、MBean しか使用できないため、やはりいくつかの制限が適用されます。

オフラインで作業する場合、以下の説明が適用されます。

MBean にアクセスするために、フレームワークは、TransportUI オブジェクトを要求するとき、または、プロバイダにコンフィグレーションを検証するように要求するときに、JMXConnector のインスタンスを提供します。JMXConnector は TransportUIContext または TransportValidationContext で使用できます。

JMXConnector connector = (JMXConnector)uiContext.get(TransportValidationContext.JMXCONNECTOR);

詳細については、「参照情報」のサンプル転送を参照してください。

コネクタが存在しない場合、リモート サーバは使用できません。このコネクタ オブジェクトはその後 MBean へのアクセスに使用できます。ヘルパー メソッドが TransportManagerHelper に追加されたため、WorkManager および WebLogic Server ドメイン MBean のリストを取得できます。

注意 : この動作は、オンライン モードおよびオフライン モード用に汎用化されています。TransactionManagerHelper で定義されている public static Set<String> getDispatchPolicies() メソッドは非推奨となるため、JMXConnector をパラメータとして持つ同じメソッドで置き換える必要があります。置き換えない場合、com.bea.wli.sb.transports.TransportException エラーが表示されます。

オフライン モードでの転送のブートストラップ

オンライン モードでは、転送を EAR ファイルとしてパッケージ化し、Oracle Service Bus サーバにデプロイする必要があります。起動時に EAR がロードされると、転送は、起動イベントでコールバックを登録し、TransportProvider のインスタンスを TransportManager に登録します。

オフライン モードでは、新しいメカニズムが転送を登録します。SDK では、com.bea.wli.sb.transports.TransportProviderFactory と呼ばれる新しいインタフェースが導入されています。転送の開発者は、このインタフェースを実装し、デフォルトのコンストラクタをパブリックにする必要があります。このインタフェースは、「参照情報」でサンプル実装と共に提供されています。

TransportProvideFactory がインスタンス化された場合、転送を (リモート サーバの有無にかかわらず) オフライン モードで動作させる必要があると想定できます。

注意 : 転送がオフライン モードで実行されているかどうかを判断するためにコンストラクタが呼び出されるときに、TransportProviderFactory でブール演算子を設定できます。この情報は、TransportUIContext および TransportValidationContext にも渡すことができます。この決定に際しては、技術部門に支援を受けることができます。

オフライン モードでの転送のパッケージ化

オフライン モードでは、異なる設計環境で転送を使用することができます。Workshop for WebLogic 環境は特定のパッケージ化を定義しています。これについては、次の節で説明します。一般的に、転送は、独立した JAR ファイルとして、外部の設計時環境から使用できる必要があります。独立した JAR ファイルでは、転送の config.xml file、ヘッダ、メタデータ、スキーマ、XBean クラス、TransportProviderFactory 実装、およびコンパイル済みの転送クラスが JAR ファイルに含まれます。

 


Workshop for WebLogic プラグインとしての転送のパッケージ化

Workshop for WebLogic プラグインとしてカスタム転送をパッケージ化し、同時に転送のユーザ インタフェースを実装することで、サービスの開発者が、開発環境でその転送を選択およびコンフィグレーションできるようになります。

図 4-1 は、使用可能な転送が設定されたドロップダウン フィールドを持つサービスの作成ウィザードを示しています。

図 4-1 サービスの作成時に使用可能なカスタム転送

サービスの作成時に使用可能なカスタム転送

図 4-2 は、選択した転送のコンフィグレーション ページを持つ (サービス作成後の) サービス エディタを示しています。

図 4-2 Workshop for WebLogic の転送コンフィグレーション ページ

Workshop for WebLogic の転送コンフィグレーション ページ

注意·:· TransportUIBinding インタフェースの実装によって、Workshop for WebLogic と Oracle Service Bus Console での、転送を選択およびコンフィグレーションするためのユーザ インタフェースが決まります。

Oracle Service Bus は、Workshop for WebLogic 用の Eclipse ベースのプラグインを提供しています。Oracle Service Bus のコア プラグインである com.bea.alsb.core は、Workshop for WebLogic 環境で、Oracle Service Bus 転送をプラグインとして登録するために使用される拡張ポイント (com.bea.alsb.core.transports) を定義しています。

転送プラグインのリソース

転送プラグインは、以下のリソースを提供する必要があります。

転送プラグインのパッケージ化

転送プラグインを JAR ファイルとして、または展開ディレクトリにパッケージ化できます。JAR としてパッケージ化すると、転送の移動がより容易になります。展開ディレクトリとしてパッケージ化すると、その他の Oracle Service Bus プラグインのリソースを参照できるようになります。たとえば、転送のヘルプを Workshop for WebLogic ヘルプ システムの Oracle Service Bus 転送のトピックと結合する場合、「Workshop for WebLogic でのカスタム転送のヘルプの提供」の説明に従って、転送プラグインを展開ディレクトリにパッケージ化する必要があります。

プラグインを JAR または展開ディレクトリのどちらにパッケージ化するかにかかわらず、転送の実装を JAR ファイルにパッケージ化する必要があります。

転送をプラグインとしてパッケージ化するには、以下のガイドラインに従います。

転送プラグインのパッケージ化の参考として、以下を行います。

 


参照情報

この節では、以下のトピックを取り上げます。

異なるモードでの動作

ほとんどの転送でディスパッチ ポリシーが使用されており、これによりサービスの抑制が可能になります。このコードは、「サービスのランタイムとサービスのコンフィグレーション」で説明されている、以下の 3 つのモードを区別します。

コード リスト 4-1 に示すように、リモート サーバへの接続はコンテキストから取得されます。

コード リスト 4-1 リモート サーバへの接続
/**
* ui オブジェクトでディスパッチ ポリシーを構築します。
*
* @param curDispatchPolicy
* @return 既存のディスパッチ ポリシーを含む TransportEditField
*/
public TransportEditField getDispatchPolicyEditField(StringcurDispatch
Policy) {
TransportUIFactory.TransportUIObject uiObject = null;
Set<String> wmSet = null;

if (SocketTransportProviderFactory.isOffline()) { // オンの場合
Eclipse は UIContext から MBean の取得を試みます
JMXConnector connector = (JMXConnector)uiContext.get
(TransportValidationContext.JMXCONNECTOR);
if (connector != null) {
try {
wmSet = TransportManagerHelper.getDispatchPolicies
(connector);
} catch (Exception ex) {
wmSet = null; //続行
}
}
} else { // サーバで実行する場合はヘルパーを使用してポリシーを
取得します
try {
wmSet = TransportManagerHelper.getDispatchPolicies();
} catch (TransportException e) {
SocketTransportUtil.logger
.error(SocketTransportMessagesLogger.
noDispatchPolicies(), e);
}
}

if (wmSet == null) // JMXConnector が使用できない場合または接続できない場合は
簡単な編集フィールドを提供します
{
uiObject = TransportUIFactory.createTextBox
(curDispatchPolicy);
} else // ドロップダウン リストを作成します
{
// デフォルトのワーク マネージャをリストに追加します。
wmSet.add(DEFAULT_WORK_MANAGER);
String[] values = wmSet.toArray(new String[wmSet.size()]);
uiObject = TransportUIFactory.createSelectObject(
values,
values,
curDispatchPolicy,
TransportUIFactory.SelectObject.DISPLAY_LIST,
false);
}
return TransportUIFactory.createEditField(DISPATCH_POLICY,
TextMessages.getMessage(TextMessages.DISPATCH_POLICY,
locale),
TextMessages.getMessage(TextMessages.DISPATCH_POLICY_INFO,
locale), uiObject);
}

TransportProviderFactory

TransportProviderFactory (コード リスト 4-2) を使用して、Workshop for WebLogic に開発時の機能を提供できます。

コード リスト 4-2 TransportProviderFactory クラス
package com.bea.wli.sb.transports;

import com.bea.wli.sb.transports.TransportException;
import com.bea.wli.sb.transports.TransportManager;

/**
* このインタフェースは、カスタム ALSB 転送を Eclipse にプラグインするための
拡張ポイントです。
* 実装で、デフォルトのクラス コンストラクタを宣言する必要があります。
*/
public interface TransportProviderFactory {

/**
* 転送マネージャに新しいプロバイダを登録します。通常は、
* ALSB のコア Eclipse プラグインによって呼び出されます。
* @param tm 登録先の転送マネージャ
*/
public void registerProvider(TransportManager tm) throws
TransportException;
/**
* @return このプロバイダを識別する「http」などのユニークな文字列
* このメソッドは provider.getId() に比べて同じ ID を返す必要があります
*/
String getId();
}

コード リスト 4-3 のコード サンプルは、ソケット転送がこのインタフェースをどのように実装するかを示しています。

コード リスト 4-3 インタフェースを実装するソケット転送の例
package com.bea.alsb.transports.sock;

import com.bea.wli.sb.transports.TransportManager;
import com.bea.wli.sb.transports.TransportException;
import com.bea.wli.sb.transports.TransportProviderFactory;
public class SocketTransportProviderFactory implements
TransportProviderFactory {

public static boolean isOffline() {
return isOffline;
}

private static boolean isOffline = false;

public void registerProvider(TransportManager tm) throws
TransportException {
isOffline = true;
SocketTransportProvider instance =
SocketTransportProvider.getInstance();
tm.registerProvider(instance, null);
}

public String getId() {
return SocketTransportProvider.ID;
}
}

拡張ポイント スキーマ

コード リスト 4-4 は、plugin.xml で示されているように、転送を Workshop for WebLogic プラグインとして追加するための transport 要素および transport-provider 属性を定義している拡張ポイント スキーマからの抜粋です。

コード リスト 4-4 拡張ポイント スキーマの一部
<element name="transport">
<complexType>
<attribute name="transport-provider" type="string" use="required">
<annotation>
<documentation>
</documentation>
<appInfo>
<meta.attribute kind="java" basedOn="
com.bea.wli.sb.transports.Transport
ProviderFactory"/>
</appInfo>
</annotation>
</attribute>
</complexType>
</element>

plugin.xml

コード リスト 4-5 は、サンプル ソケット転送の plugin.xml ファイルでの転送の拡張を示しています。このファイルは、ALSB_HOME/samples/servicebus/sample-transport/eclipse/ にあります。

コード リスト 4-5 Plugin.xml ファイル
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
<extension
id="socket"
name="Socket Transport"
point="com.bea.alsb.core.transports">
<transport transport-provider="com.bea.alsb.transports
.sock.SocketTransportProviderFactory"/>
</extension>
</plugin>


注意 : 通常、Workshop for WebLogic 内のライフ サイクル管理に転送プロバイダは必要ないため、標準のプラグインのように org.eclipse.core.runtime.Plugin クラスを拡張する必要はありません。

Workshop for WebLogic でカスタム転送のヘルプを提供する場合、plugin.xml にもヘルプ エントリを持つことになります。詳細については、「カスタム転送のヘルプの作成」を参照してください。

MANIFEST.MF

コード リスト 4-6 はサンプル ソケット転送の MANIFEST.MF ファイルを示しています。このファイルは、ALSB_HOME/samples/servicebus/sample-transport/eclipse/META-INF/ にあります。

コード リスト 4-6 サンプルの MANIFEST.MF ファイル
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Socket Transport Plug-in
Bundle-SymbolicName: Socket_Transport;singleton:=true
Bundle-Version: 3.0.0.0
Bundle-Localization: plugin
Bundle-ClassPath: .,
lib/sock_transport.jar
Require-Bundle: com.bea.alsb.core

Build.xml

コード リスト 4-7 は、Workshop for WebLogic のサンプル ソケット転送をパッケージ化するターゲットを示しています。このファイルは、ALSB_HOME/samples/servicebus/sample-transport/ にあります。

コード リスト 4-7 パッケージ化される Workshop for WebLogic のサンプル転送
<target name="create_plugin">
<mkdir dir="${build.dir.transports.sock.eclipse}/plugin"/>
<copy todir="${build.dir.transports.sock.eclipse}/plugin"
overwrite="true">
<fileset dir="${src.dir.transports.sock.eclipse}"/>
</copy>

<mkdir dir="${build.dir.transports.sock.eclipse}/plugin/lib"/>
<copy file="${sock.transport.jar}"
todir="${build.dir.transports.sock.eclipse}/plugin/lib"
overwrite="true"/>

<zip destfile="${sock.transport.eclipse.jar}" basedir="${build.dir.
transports.sock.eclipse}/plugin"/>
</target>

build-jar のターゲットは、デプロイ可能な転送 EAR と共に、サンプル ソケット転送プラグインもビルドします。

サンプル ソケット転送のビルドの詳細については、「サンプル ソケット転送プロバイダ」を参照してください。

TransportManagerHelper メソッド

コード リスト 4-8 は、TransportManagerHelper メソッドを示しています。

コード リスト 4-8 TransportManagerHelper メソッド
public static Set<String> getDispatchPolicies(JMXConnector connector)
throws TransportException;

public static DomainRuntimeServiceMBean
getDomainRuntimeService(JMXConnector connector)
throws TransportException;

  ページの先頭       前  次