![]() ![]() ![]() ![]() |
この章では、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 種類のモードを考慮する必要があります。
Workshop for WebLogic で実行される転送は、オフライン モードと、必要に応じて、オフライン モード (リモート サーバあり) をサポートする必要があります。
オフライン モードで転送をデプロイする場合、コンフィグレーション フレームワークは、すべてのリソースのコンフィグレーション用に 1 つのセッションを作成します。このセッションがアクティブ化されることはありません。プロキシ サービスまたはビジネス サービスは、実行中の Oracle Service Bus サーバにしかデプロイできないため、セッションをアクティブ化する必要はありません。ただし、やはり衝突およびコンフィグレーション エラーの検出は重要であるため、検証メソッドは引き続き実行されます。
以下は、オフライン モードで実装する必要がある、転送 SDK によって定義されているクラスおよびメソッドの最小セットのリストです。読みやすくするために、例外はメソッド シグネチャから削除されています。
注意 : | オフライン モード用に転送を完全に再実装する必要はありません。ほとんどの場合、転送は、既存のメソッドにいくつかの変更を加えるだけで、オンライン モードとオフライン モードの両方をサポートできます。 |
public interface TransportProvider
クラスString getId();
void validateEndPointConfiguration(TransportValidationContext context);
SchemaType getEndPointConfigurationSchemaType();
SchemaType getRequestMetaDataSchemaType();
SchemaType getRequestHeadersSchemaType();
SchemaType getResponseMetaDataSchemaType();
SchemaType getResponseHeadersSchemaType();
TransportProviderConfiguration getProviderConfiguration();
TransportUIBinding getUIBinding(TransportUIContext context);
void shutdown();
Collection<NonQualifiedEnvValue> getEnvValues(Ref ref,
EndPointConfiguration epConfig);
void setEnvValues(Ref ref, EndPointConfiguration epConfig,
Collection<NonQualifiedEnvValue> envValues);
Collection<Ref> getExternalReferences(EndPointConfiguration epConfig);
void setExternalReferences(Map<Ref, Ref> mapRefs, EndPointConfiguration
epConfig);
Map<String, String> getBusinessServicePropertiesForProxy(Ref ref);
XmlObject getProviderSpecificConfiguration(Ref ref, Map<String, String>
props);
public interface TransportProviderFactory
クラス
このインタフェースは、転送をオフライン モードで登録します。詳細については、「転送プロバイダのデプロイ」を参照してください。
public interface TransportUIBinding
クラス
このインタフェースですべてのメソッドを実装して、プロキシ サービスまたはビジネス サービスのコンフィグレーションに使用されるユーザ インタフェースを定義する必要があります。
public class TransportManagerHelper
クラス
通常、このクラスは TransportProvider
の開発者によって使用されます。ただし、オフライン モードで有効でない一部のメソッドが、例外を送出します。これについては、以下で説明します。public isAdmin()
などのその他のメソッドは、ランタイムまたはデプロイメント専用です。
オフライン (リモート サーバあり) で作業する場合、以下の 2 つのメソッドも使用できます。
public Set<String> getDispatchPolicies(JMXConnector connector);
メソッドpublic DomainRuntimeServiceMBean getDomainRuntimeServiceMBean(JMXConnector connector);
メソッド
詳細については、「オフライン (リモート サーバあり) での作業」を参照してください。
オフライン モードでは、以下の 2 つのメソッドは呼び出さないでください。
isAdmin
メソッドは例外を送出します (public static boolean isAdmin();
)。このメソッドは、java.lang.IllegalStateException
メッセージを送出します。clusterExists()
メソッドは、常に false を返します (public static boolean clusterExists();
)。このソッドは、常に false を返します。
オフラインで作業する場合、サーバ上で実行されている WebLogic Server サービスは使用できません。「オフライン メソッド」で説明されているメソッド内でこれらのサービスを使用しないでください。
一部のサービスが使用できないため、転送のユーザ インタフェースがどのように影響を受けるかを評価する必要があります。一般的に、ユーザ インタフェースは、ユーザが値をサーバ環境から取得しようとする代わりに、値を手動でコンフィグレーションできるだけの柔軟性を備えている必要があります。
Workshop for WebLogic デザイン タイムでは、現時点では、Oracle Service Bus クラスタへのデプロイメントはサポートされていません。そのため、クラスタがないものとしてユーザ インタフェースを設定する必要があります。必要に応じて、ユーザは、カスタム ファイルを使用してコンフィグレーションを更新し、Oracle Service Bus クラスタへのデプロイメントを強制することができます。
たとえば、一部の転送では、TransportManagerHelper を使用し、ユーザがドロップダウン リストから選択できるようにして、使用可能な WorkManager 項目のリストを取得します。ただし、オフライン モードでは MBean が使用できないため、ドロップダウン リストを設定することはできません。転送プロバイダには次の 2 つの選択肢があります。
オフラインで作業する場合に、リモート サーバを使用できる場合があります。たとえば、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 プラグインとしてカスタム転送をパッケージ化し、同時に転送のユーザ インタフェースを実装することで、サービスの開発者が、開発環境でその転送を選択およびコンフィグレーションできるようになります。
図 4-1 は、使用可能な転送が設定されたドロップダウン フィールドを持つサービスの作成ウィザードを示しています。
図 4-2 は、選択した転送のコンフィグレーション ページを持つ (サービス作成後の) サービス エディタを示しています。
注意·:· | 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 ファイルにパッケージ化する必要があります。
転送をプラグインとしてパッケージ化するには、以下のガイドラインに従います。
Bundle-Version
を Bundle-SymbolicName
に付加します。たとえば、サンプル ソケット転送の JAR は、Socket_Transport_3.0.0.0.jar という名前が付けられています。
ほとんどの転送でディスパッチ ポリシーが使用されており、これによりサービスの抑制が可能になります。このコードは、「サービスのランタイムとサービスのコンフィグレーション」で説明されている、以下の 3 つのモードを区別します。
コード リスト 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 (コード リスト 4-2) を使用して、Workshop for WebLogic に開発時の機能を提供できます。
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 のコード サンプルは、ソケット転送がこのインタフェースをどのように実装するかを示しています。
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
属性を定義している拡張ポイント スキーマからの抜粋です。
<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>
コード リスト 4-5 は、サンプル ソケット転送の plugin.xml ファイルでの転送の拡張を示しています。このファイルは、ALSB_HOME/samples/servicebus/sample-transport/eclipse/ にあります。
<?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 にもヘルプ エントリを持つことになります。詳細については、「カスタム転送のヘルプの作成」を参照してください。
コード リスト 4-6 はサンプル ソケット転送の MANIFEST.MF ファイルを示しています。このファイルは、ALSB_HOME/samples/servicebus/sample-transport/eclipse/META-INF/ にあります。
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
コード リスト 4-7 は、Workshop for WebLogic のサンプル ソケット転送をパッケージ化するターゲットを示しています。このファイルは、ALSB_HOME/samples/servicebus/sample-transport/ にあります。
<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 と共に、サンプル ソケット転送プラグインもビルドします。
サンプル ソケット転送のビルドの詳細については、「サンプル ソケット転送プロバイダ」を参照してください。
コード リスト 4-8 は、TransportManagerHelper メソッドを示しています。
public static Set<String> getDispatchPolicies(JMXConnector connector)
throws TransportException;
public static DomainRuntimeServiceMBean
getDomainRuntimeService(JMXConnector connector)
throws TransportException;
![]() ![]() ![]() |