![]() ![]() ![]() ![]() |
ビジネス·プロセスを別のアプリケーションから呼び出す方法は、それぞれのビジネス要件によって異なります。ここでいうビジネス要件とは、クライアントが呼び出し先のビジネス·プロセスと同じアプリケーション内にあるかどうか、クライアントが Oracle Workshop for WebLogic コンポーネント (Web サービス (JWS)、ビジネス プロセス (JPD)、またはページ フロー (JPF)) かどうかなどです。ビジネス プロセスの呼び出し方法の詳細については、以下のトピックを参照してください。
ビジネス プロセスの機能は、さまざまな方法でクライアントにエクスポーズできます。たとえば、WSDL ファイル、プロセス コントロール、サービス ブローカ コントロール、ビジネス プロセス (Process.java) プロキシなどを使用してエクスポーズできます。
Oracle Workshop for WebLogic コンポーネント (Web サービス (JWS)、ビジネス プロセス (Process.java)、またはページ フロー (JPF)) の間には、プロセス コントロールおよびサービス ブローカ コントロールのみ使用できます。
プロセス コントロールを使用すると、Web サービス、ビジネス プロセス、またはページ フローからビジネス プロセスに要求を送信したり、ビジネス プロセスからのコールバックを受信したりできます。プロセス コントロールの呼び出しは Java Remote Method Invocation (RMI) の呼び出しです。対象となるビジネス プロセスは、呼び出し側と同じ Oracle WebLogic Server ドメイン上にホスティングされる必要があります。通常、プロセス コントロールは、親ビジネス プロセスからサブプロセスを呼び出す際に使用します。トランザクション コンテキストは、プロセス コントロール呼び出しを介して親プロセスからサブプロセスに伝播されます。つまり、対象ビジネス プロセスは、呼び出し側と同じトランザクションで実行されます。
サービス ブローカ コントロールを使用すると、ビジネス プロセスまたは Web サービスで、複数プロトコルの 1 つ (最も一般的に使用されるプロトコルは SOAP over HTTP) を使用して、別のサービスからコールバックを呼び出しおよび受信できます (これらのプロトコルの詳細については、「動的バインディングを使用する」を参照してください)。対象サービス (ビジネス プロセス、Web サービス、またはリモート (非 WorkShop) Web サービス) は、WSDL インタフェースをエクスポーズしている必要があります。使用される転送が HTTP または JMS のため、トランザクション コンテキストはサービス ブローカ コントロールの呼び出し経由では伝播されません。通常、サービス ブローカ コントロールはリモート サービスを呼び出します。
非 WorkShop クライアントからビジネス プロセスを呼び出すには、JPD プロキシを使用します。JPD プロキシを使用すると、あらゆる Java コードからビジネス プロセスと通信できます。JPD プロキシを使用してビジネス プロセスを呼び出す場合、呼び出しは Java RMI 呼び出しになります。トランザクション コンテキストは、JPD プロキシ呼び出しを介して、クライアントからビジネス プロセスに伝播されます。つまり、クライアントにトランザクション コンテキストがある場合、対象ビジネス プロセスはクライアントと同じトランザクションで実行されます。通常 JPD プロキシは、非 WorkShop J2EE クライアントまたは標準の Java クライアントで、ビジネス プロセスを呼び出すために使用します。
クライアントがビジネス プロセスを呼び出す方法は、そのクライアントの特性や、対象ビジネス プロセスから見てそのクライアントがどこに位置するかによって異なります。以下の節では、それぞれのケースについて説明します。
クライアントが Workshop クライアント (Web サービス、ビジネス プロセス、またはページ フロー) で、対象ビジネス プロセスがクライアントとは別のドメインにある場合は、サービス ブローカ コントロールを使用します。その場合は、サービス ブローカ コントロールを対象ビジネス プロセスから作成し、このコントロールを使用してビジネス プロセスを呼び出します。サービス ブローカ コントロールを作成して使用する方法については、「サービス ブローカ コントロール」を参照してください。
このケースでは、JPD プロキシを使用することもできます。その方法については、「操作方法 : JPD プロキシを使用してビジネス プロセスを呼び出すには」を参照してください。
クライアントが Workshop クライアント (Web サービス、ビジネス プロセス、またはページ フロー) で、対象ビジネス プロセスがクライアントと同じ Oracle Workshop for WebLogic アプリケーション内にある場合は、プロセス コントロールを使用します。その場合は、プロセス コントロールを対象ビジネス プロセスから作成し、このコントロールを使用してビジネス プロセスを呼び出します。プロセス コントロールを作成して使用する方法については、「プロセス コントロール」を参照してください。
このケースでは、サービス ブローカ コントロールを使用することもできます。その方法については、「サービス ブローカ コントロール」を参照してください。
クライアントがスタンドアロンの Java プログラム、非 WorkShop J2EE クライアント (EJB、サーブレット、または JSP) である場合は、JPD プロキシを使用して対象ビジネス プロセスを呼び出します。その方法については、「操作方法 : JPD プロキシを使用してビジネス プロセスを呼び出すには」を参照してください。
JPD プロキシ呼び出しは RMI 呼び出しであるため、クライアントおよび対象ビジネス プロセスが同じ組織内に存在していなければなりません。
警告 : | クライアント コールバックを含むビジネス プロセスでは、クライアント コールバックはプロセスを開始したクライアントに送信されます。ビジネス プロセスからのコールバックは、JPD プロキシでは受信できません。クライアント コールバックを含むビジネス プロセスを JPD プロキシから開始した場合、ビジネス プロセスはそれを開始したクライアント (つまり JPD プロキシ) にコールバックを送信しようとするため、実行時にエラーが発生します。 |
JPD プロキシを使用すると、あらゆる Java クライアント (スタンドアロン Java アプリケーション、EJB、JSP、サーブレットなど) から、あらゆるビジネス プロセス (同期、非同期、ステートフル、およびステートレス) を呼び出すことができます。Java プロキシを使用してビジネス プロセスを呼び出す手順は、そのプロキシを使用するクライアント アプリケーションが対象ビジネス プロセスと同じ JVM にあるかどうかによって異なります。
JPD プロキシは、ビジネス プロセスの RMI クライアントです。各ビジネス プロセスには、ビジネス プロセスのクライアント要求に適合するインタフェースが関連付けられています。このインタフェースを「JPD パブリック コントラクト」といいます。JPD パブリック コントラクトのメソッドには、対応するクライアント要求と同じシグネチャが割り当てられています。JPD プロキシは、JPD コントラクトのコンパイル済みクラス ファイルを格納する JAR です。このクラス ファイルを使用すると、ローカル Java クラスの場合と同じ方法で JPD にアクセスできます。JPD プロキシ呼び出しは Java RMI で行われます。JPD プロキシ呼び出しでは、トランザクション コンテキストがクライアントからビジネス プロセスに伝播されます。
JPD プロキシ JAR ファイルは、Oracle Workshop for WebLogic テスト ブラウザの [概要] ページにある [RMI プロキシ] リンクからダウンロードできます (「操作方法 : ビジネス プロセスに使用する JPD プロキシを取得するには」を参照)。
警告 : | クライアント コールバックを含むビジネス プロセスでは、それらのクライアント コールバックがプロセスを開始したクライアントに送信されます。ビジネス プロセスからのコールバックは、JPD プロキシでは受信できません。クライアント コールバックを含むビジネス プロセスを JPD プロキシから開始した場合、ビジネス プロセスはそれを開始したクライアント (つまり JPD プロキシ) にコールバックを送信しようとするため、実行時にエラーが発生します。 |
JpdProxy
クラスは、Oracle WebLogic Integration ビジネス プロセス タイプに対するプロキシのファクトリ クラスです。クライアントは、このクラスのいずれかの create()
メソッドを呼び出してプロキシ インスタンスを取得します。create()
メソッドは、入力として JPD コントラクト クラス (java.lang.Class
) を取ります。
次に、ビジネス プロセスの JPD コントラクト インタフェースのサンプル (RequestQuote.java
) を示します。
package weblogic.wli.jpdproxy;
import org.example.request.QuoteRequestDocument;
public interface RequestQuote {
public void quoteRequest(org.example.request.QuoteRequestDocument requestXML);
public static final String SERVICE_URI =
"/myApplication/requestquote/RequestQuote.jpd";
}
以下に、このサンプル コントラクト インタフェースの特徴を示します。
RequestQuoteProxy.jar
で、RequestQuote.class
という名前のクラス ファイルが含まれている)。public void quoteRequest(org.example.request.QuoteRequestDocument requestXML)
)。 注意 : | クライアント アプリケーションを記述する際は、ビジネス プロセスのソース コードを見ると、JPD プロキシ経由で使用できるクライアント要求メソッドを特定できます。ソース コードを表示するには、そのビジネス プロセス (JPD) を Oracle Workshop for WebLogic のグラフィカルな設計環境で開き、デザイン ビューでクライアント要求呼び出しを特定してから、ソース ビューを開いてメソッド名とシグネチャを確認します。 |
requestXML
(QuoteRequestDocument
型) を参照している。SERVICE_URI
static final フィールドが含まれている。SERVICE_URI
フィールドの文字列値は、Oracle Workshop for WebLogic テスト ブラウザから JPD プロキシをダウンロードした時点でのビジネス プロセスの URI です。クライアントでは、create
メソッドにこのコントラクトを渡しても、まったく別の値を渡しても構いません。
JPD プロキシ JAR の生成後にビジネス プロセス (JPD) を別の場所にデプロイした場合は、SERVICE_URI
として別の値が必要になります。たとえば、ビジネス プロセスが開発環境にデプロイされている状態で、そのビジネス プロセスから JPD プロキシを作成することは可能です。その後、プロダクション環境に移行するため、このビジネス プロセスを別の場所に移動したとします。この場合、ビジネス プロセスにアクセスするための URI が変わるため、メソッドを作成する際はクライアントから新しい URI 値を渡す必要があります。
Oracle WebLogic Server が起動していない場合は、サーバを起動するかどうかを尋ねるウィンドウが表示されます。サーバを起動する場合は [OK] をクリックします。
注意 : | バージョニングされたビジネス プロセスの JPD プロキシを生成する方法については、「バージョニングされたビジネス プロセスについて」を参照してください。 |
注意 : | デフォルトのパッケージは weblogic.wli.jpdproxy です。生成された JPD プロキシ用に別のパッケージを指定したい場合は、[RMI プロキシ] ボタンに関連付けられている [Java パッケージ] フィールドにパッケージ名を入力します。 |
JAR ファイルを以下のいずれかのディレクトリに保存します。
WEB-INF/lib
- そのプロキシを使用する Web アプリケーション (クライアント アプリケーション) の WEB-INF/lib
ディレクトリに JAR を保存します。この JAR ファイルは、Oracle Workshop for WebLogic のグラフィカルな設計環境では、[パッケージ・エクスプローラー
] ペインの WEB-INF/lib フォルダに表示されます。
APP-INF/lib
- JPD プロキシ JAR をアプリケーション (クライアント アプリケーション) 内の複数のプロジェクトから使用したい場合は、アプリケーションのルートにある APP-INF/lib
ディレクトリに JAR を保存します。この JAR ファイルは、Oracle Workshop for WebLogic のグラフィカルな設計環境では、[パッケージ・エクスプローラー
] ペインの当該アプリケーションのルートにあるライブラリ フォルダに表示されます。
JPD プロキシをスタンドアロン Java クライアント (Oracle WebLogic Server の外) から使用する場合は、クライアント Java アプリケーションにとって都合のよい任意の場所に JAR を保存し、その JAR をクライアントの CLASSPATH
環境変数に追加します。
注意 : | JAR ファイルのデフォルト名は <business-process-name> Proxy.jar です。business-process-name は、JPD プロキシの生成に使用するビジネス プロセスの名前です。既存の JAR ファイルと衝突していない限り、デフォルト名をそのまま使用します。 |
CLASSPATH
環境変数に追加します。<business-process-name>Proxy.jar
- Oracle Workshop for WebLogic テスト ブラウザからダウンロードした JPD プロキシです。business-process-name
は、JPD プロキシの生成に使用するビジネス プロセスの名前です。jpdproxy_client.jar
- ビジネス プロセスに依存しないクライアントサイド クラスを格納するサポート JAR です。このファイルは、インストールした Oracle WebLogic の次のディレクトリに格納されています。BEA_HOME
\wli_10.3\lib
BEA_HOME
は Oracle WebLogic Integration のインストール ディレクトリです。
この JAR には、抽象プロキシ ファクトリ クラス JpdProxy
、プロキシ実装 JpdProxyImpl
、およびその他のクライアントサイド実行時クラスが格納されています。
Schemas.jar
- ダウンロードした JPD プロキシ (<business-process-name>
Proxy.jar
) ファイルに、強く型付けされた XML または MFL 引数への参照が含まれている場合は、クラスパスに Schemas
.jar
ファイルを追加します。ここで、Schemas
は、アプリケーション内のスキーマ プロジェクトの名前です。Schemas
.jar
ファイルは、アプリケーションのルートにある APP-INF\lib に格納されています。weblogic.jar
- このファイルは、インストール先の BEA_HOME\wlserver_10.3\server\lib
に格納されています。wlcipher.jar
- クライアントを双方向 SSL で使用している場合は、CLASSPATH
にこの JAR を追加します。wlcipher.jar
は、インストール先の BEA_HOME\wlserver_10.3\server\lib
に格納されています。
対象ビジネス プロセスがバージョニングされている場合は、テスト ブラウザを呼び出す方法として、アクティブなバージョンのプロセスを実行する方法 (その場合、テスト ブラウザは仮想 URI で開かれる) と、アクティブでないバージョンのプロセスを実行する方法 (その場合、テスト ブラウザは特定の物理 URI で開かれる) があります。ビジネス プロセスのバージョンの作成方法については、「ビジネス プロセスのバージョニング」を参照してください。
このようにして開いたテスト ブラウザから JPD プロキシをダウンロードすると、JPD コントラクト インタフェースはそれぞれ仮想 JPD または物理 JPD に一致します。Java クライアントを作成する際は、JPD コントラクトとサービス URI をプロキシ ファクトリ メソッドに渡します。ほとんどの場合、JPD コントラクト インタフェースはすべてのバージョンで共通ですが、特定のバージョンのビジネス プロセスで、元のプロセスのパブリック インタフェースを拡張することも可能です。その場合は、プロキシ ファクトリに渡すサービス URI と JPD コントラクト インタフェースが一貫している必要があります。
この節では、Java クライアントから JPD プロキシを使用する方法について、サンプル コードに沿って説明します。内容は以下のとおりです。
ここでは、Java クライアントから JPD プロキシを使用する方法について説明します。コード リスト 29-2 は、JPD プロキシを使用してビジネス プロセスを呼び出す Java クライアントのサンプル コードです。このサンプルには、基本的なユーザ名/パスワード認証が含まれています。2 つ目のサンプル (コード リスト 29-5) では、Java クライアントに双方向 SSL を追加する方法について説明します。
このビジネス プロセスの JPD プロキシ JAR を入手するには、Oracle Workshop for WebLogic で発注書ビジネス プロセスを実行してテスト ブラウザを呼び出し、[概要] ページの [RMI プロキシ] リンクをクリックします。
以下の節では、「サンプル Java クライアント」のサンプル コードに沿って、Java クライアントから JPD プロキシ クライアントを使用する方法について説明します。
コード リスト 29-2 は、JPD プロキシを使用してビジネス プロセスを呼び出す Java クライアントのサンプル コードです。呼び出されるのは、PoRequest.java
というビジネス プロセスです。このサンプルには、基本的なユーザ名/パスワード認証が含まれています。2 つ目のサンプル (コード リスト 29-5) では、Java クライアントに双方向 SSL を追加する方法について説明します。
package your.package;
// プロキシ クラスは com.bea.wli.bpm.proxy パッケージに含まれている。
import com.bea.wli.bpm.proxy.JpdProxy;
import com.bea.wli.bpm.proxy.JpdProxySession;
import weblogic.wli.jpdproxy.PoProcess;
/**
* アプリケーションで必要になるすべてのパッケージをインポートする。たとえば、ビジネス プロセスで
* XML Bean を使用する場合であれば、そのために必要なパッケージをインポートする必要がある。
*/
import requisitionpo.www.purchase.PurchaseDocument;
import requisitionpo.www.purchaserequestreq.PurchaseRequestReqDocument
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.InitialContext;
import weblogic.jndi.Environment;
import java.io.*;
public class startPoProcess
{
public static void main(String[] args)
{
try
{
PoProcess p = (PoProcess)
JpdProxy.create(
PoProcess.class,
PoProcess.SERVICE_URI,
new JpdProxy.ContextHandler()
{
public Context getContext() throws NamingException
{
Environment env = new Environment();
env.setProviderUrl("t3://localhost:7001");
env.setSecurityPrincipal("weblogic");
env.setSecurityCredentials("weblogic");
return env.getInitialContext();
}
});
PoDocument document = PoDocument.Factory.newInstance();
Po po = document.addNewPo();
po.setSku("abc");
PoReferenceDocument ref = p.processPO(document);
p.done();
}
catch (Exception e) { ... }
}
}
このサンプル Java クライアントでは、以下のパッケージをインポートしています。
import com.bea.wli.bpm.proxy.JpdProxy;
import com.bea.wli.bpm.proxy.JpdProxySession;
プロキシ クラスは、com.bea.wli.bpm.proxy
パッケージに含まれています。クライアントは、JpdProxy.create()
から返されたプロキシを JpdProxySession
に型キャストして、ビジネス プロセスを呼び出す際に使用する会話 ID を設定および取得できます。会話 ID の設定および取得の方法については、「会話管理について」を参照してください。
プロキシ ファクトリ メソッド (JpdProxy.create()
) は、2 つのシグネチャを提供します。1 つはクライアントを対象ビジネス プロセスと同じ Oracle WebLogic Server ドメインで実行している場合に使用するシグネチャ、もう 1 つはクライアントを対象ビジネス プロセスとは別のドメインで実行している場合に使用するシグネチャです。
JpdProxy.create()
メソッドを実行すると、ビジネス プロセス (JPD) のクライアント プロキシが作成されます。JpdProxy.create()
への入力としては、JPD のメソッドを記述するパブリック コントラクト インタフェースを使用できます。この呼び出しの結果を、パブリック コントラクト クラスに型キャストできます。サービス URI を使用すると、サーバ上のビジネス プロセス (JPD) をユニークに特定できます。
クライアントを対象 JPD と同じ WLS サーバで実行している場合は、次のメソッドを使用します。
public static final Object create(Class publicContract, String serviceUri)
throws JpdProxyException
注意 : | ほとんどの場合、パブリック コントラクト インタフェースはすべてのバージョンで共通ですが、特定のバージョンのビジネス プロセスで、元のプロセスのパブリック インタフェースを拡張することも可能です。その場合は、プロキシ ファクトリに渡すサービス URI と JPD コントラクト インタフェースが一貫している必要があります。バージョニングされたビジネス プロセスの JPD プロキシを生成する方法については、「バージョニングされたビジネス プロセスについて」を参照してください。 |
このメソッド シグネチャ (コード リスト 29-4) は、コード リスト 29-2 のサンプル コードで使用されています。
JpdProxy.create()
メソッドを実行すると、ビジネス プロセス (JPD) のクライアント プロキシが作成されます。JpdProxy.create()
への入力としては、ビジネス プロセスのメソッドを記述するパブリック コントラクト インタフェースを使用できます。この呼び出しの結果を、パブリック コントラクト クラスに型キャストできます。サービス URI を使用すると、サーバ上のビジネス プロセスをユニークに特定できます。クライアントを対象 JPD とは別のドメインで実行している場合は、プロキシから JpdProxy.ContextHandler
を呼び出すことで、サーバおよびサーバサイド リソースへのログインに使用する JNDI コンテキストを取得します。
ContextHandler
を受け付けないバージョンの JpdProxy.create()
を使用している場合は、ProxyDispatcher
EJB のルックアップにクライアントの JNDI コンテキストが使用されます。
ContextHandler
は、以下の場合に必要になります。
注意 : | ProxyDispatcher EJB は、Oracle WebLogic Integration システムのステートレス セッション Bean で、JPD プロキシからの受信要求を処理します。スコープは Oracle WebLogic Server ドメインです。ProxyDispatcher は、クラスタ内のすべての管理対象サーバに対象指定されます。この EJB に認証および認可ポリシーを設定するには、Oracle WebLogic Server Administration Console を使用します。ユーザとセキュリティ コンテキストの関連付けには、JNDI ではなく JAAS (Java Authentication and Authorization Service) を使用することをお勧めします。詳細については、以下の Oracle WebLogic Server ドキュメントを参照してください。 |
注意 : | 「Oracle Oracle WebLogic JNDI」 |
注意 : | 「Java クライアントでの JAAS 認証の使用」 |
注意 : | JpdProxy 実装では、サーバに対する明示的な認証は行われません。代わりに、ContextHandler から返された JNDI コンテキストで ProxyDispatcherHome をルックアップする際に、JNDI 認証が行われます。 |
ContextHandler
が必要な場合は次のメソッドを使用します。
public static final Object create(Class publicContract, String serviceUri,
JpdProxy.ContextHandler ch) throws JpdProxyException
publicContract
は JPD のパブリック コントラクト インタフェースです。serviceUri
は JPD の URI です。 ch
はコンテキスト ハンドラです。クライアントがこの JpdProxy.ContextHandler
インタフェースのインスタンスを create メソッドに渡し、実行時にはプロキシ実装がこのインスタンスを使用して JNDI コンテキストを割り当てます。このコンテキストを使用して、サーバにログインし、受信プロキシ要求を処理するサーバサイド リソースをルックアップします。
コード リスト 29-2 には、Java クライアントで使用する getContext()
が示されています。
コンテキスト ハンドラ インタフェースの詳細については、Oracle WebLogic Integration Javadoc の JpdProxy.ContextHandler インタフェースを参照してください。
初期コンテキストの作成の詳細については、Oracle WebLogic Integration Javadoc の Environment クラスを参照してください。
JpdProxyException
には、プロキシの構築中に送出されるチェック済みの例外がラップされます。
JPD プロキシ経由でどのクライアント要求メソッドが使用できるかを特定するには、ビジネス プロセスのソース コードを確認します。ソース コードを表示するには、そのビジネス プロセス (JPD) を Oracle Workshop for WebLogic のグラフィカルな設計環境で開き、[デザイン] ビューでクライアント要求呼び出しを特定してから、[ソース] ビューを開いてメソッド名とシグネチャを確認します。
ビジネス プロセスからのコールバックは、JPD プロキシでは受信できません。「クライアント コールバックを含むビジネス プロセスの JPD プロキシを使用する場合の制限事項」を参照してください。
ビジネス プロセスの入力および戻り値としては、型付けされた XML (XML Bean) と型付けされたバイナリ データ (MFL) を使用できます。このようなビジネス プロセスから生成された JPD コントラクト インタフェースでは、これらの型を参照します (JPD コントラクトで参照されている XML 型のサンプルについては、「JPD プロキシとは」のコード リストを参照してください)。
なお、コード リスト 29-2 に示したサンプル Java クライアントでは、PoProcess ビジネス プロセスで使用する XML Bean 型をサポートするため、以下のパッケージがインポートされています。
import requisitionpo.www.purchase.PurchaseDocument;
import requisitionpo.www.purchaserequestreq.PurchaseRequestReqDocument
JpdProxySession
インタフェースを使用すると、ビジネス プロセスの呼び出し時に使用する会話 ID を設定および取得できます。クライアントで JpdProxySession
インタフェースを使用するには、JpdProxy.create()
から返されたプロキシを JpdProxySession
に型キャストします。
JpdProxy.create()
から返される動的なプロキシには、JpdProxySession
インタフェースが実装されています。JpdProxySession
インタフェースは、以下のメソッドを備えています。
String getConversationID()
void reset()
void setConversationID(String conversationID)
会話 ID は null に初期化されます。ビジネス プロセスが JPD プロキシ経由で呼び出されたとき、会話 ID が null であればユニークな ID が生成されます。このユニークな ID は、クライアントサイドの実行時状態内に保持されます。つまり、クライアントによって新しい会話 ID が指定されるか、ID が null にリセットされるまでは、後続の呼び出し用に値が保持されるということです。
ビジネス プロセスの別のインスタンスでのメソッド呼び出しにも、同じ JPD プロキシ インスタンスを使用できます。ただし、呼び出しに間違った会話 ID が使用されることのないよう、クライアントサイドで防止策を講じる必要があります。具体的には、クライアント アプリケーションが JPD プロキシ経由でのビジネス プロセス インスタンスの呼び出しを終了し、新しい会話を開始する際には、新しい会話の会話 ID を明示的に設定するか、JpdProxySession.reset()
を呼び出して JPD プロキシ経由で会話 ID を null にリセットする必要があります。
JpdProxySession インタフェースの詳細については、Oracle WebLogic Integration Javadoc の JpdProxySession インタフェースを参照してください。
次のコマンドラインは、コード リスト 29-2 に示したサンプル Java クライアント (startPoProcess
) を実行する際に設定する必要のあるオプションを示しています。
java -Dbea.home=C:\bea
startPoProcess
ここで、-Dbea.home=
C:\bea
には製品のインストール ディレクトリを指定します。
ビジネス プロセスからのコールバックは、JPD プロキシでは受信できません。クライアント コールバックを含むビジネス プロセスでは、それらのクライアント コールバックがビジネス プロセスを開始したクライアントに送信されます。クライアント コールバックを含むビジネス プロセスを JPD プロキシから開始した場合、ビジネス プロセスはそれを開始したクライアント (つまり JPD プロキシ) にコールバックを送信しようとするため、実行時にエラーが発生します。
この節のサンプルでは、Java クライアントに双方向 SSL を追加する方法について説明します。また、Java クライアントを実行する際に設定する必要のあるコマンドライン オプションについても説明します。これらのオプションを設定することで、Java クライアントと SSL サーバの間で双方向 SSL ハンドシェークを発生させることが可能になります。この節では、次のトピックについて説明します。
次のサンプルは、Java クライアントに双方向 SSL を追加する方法を示しています。サンプル コードの詳細については、コード リストを示した後に解説します。
import weblogic.wli.jpdproxy.MyProcess;
import javax.naming.Context;
import javax.naming.NamingException;
import weblogic.jndi.Environment;
import com.bea.wli.bpm.proxy.JpdProxy;
import java.io.*;
import javax.naming.InitialContext;
public class startMyProcess
{
public static void main(String[] args)
{
try {
InputStream key = new FileInputStream("C:\\certcmds\\qa\\pki\\keys\\newParent.key");
InputStream cert = new FileInputStream("C:\\keystore\\newParentx509.cer");
final InputStream FStream[] = {key,cert};
MyProcess tm = (MyProcess)
JpdProxy.create(MyProcess.class,MyProcess.SERVICE_URI,
new JpdProxy.ContextHandler()
{
public Context getContext() throws NamingException
{
Environment env = new Environment();
//SSL 用のセキュア ポートとして t3s を使用する
env.setProviderUrl("t3s://localhost:7002");
//その証明書用のクライアント証明書とプライベート キー
env.setSSLClientCertificate(FStream);
env.setSSLClientKeyPassword("testing123");
return env.getInitialContext();
}
});
String str = tm.requestQuote();
System.out.println("Return String = " + str);
}
catch (Exception ex)
{
//Got an exception
System.out.println("Got Exception: " + ex);
ex.printStackTrace();
}
}
}
このサンプルでは、前の節 (Java クライアントから JPD プロキシを使用するには) で使用した情報をベースに、双方向 SSL を Java クライアントに追加する方法を示しています。コード リスト 29-5 のサンプル コードに示した Java クライアントでは、JPD プロキシを使用して MyProcess.java
というビジネス プロセスを呼び出しています。
以下では、クライアントと Oracle WebLogic Server の間の双方向 SSL の設定に使用されているコード行について説明します。
import weblogic.wli.jpdproxy.MyProcess;
このクライアントは、デフォルト パッケージweblogic.wli.jpdproxy
の MyProcess.jar
内に含まれているプロキシ クラス経由でビジネス プロセスにアクセスします。
final InputStream FStream[] = {key,cert};
デジタル証明書を JNDI に渡すため、DER エンコードされた1 デジタル証明書を格納するファイル上で開かれる InputStream
の配列を作成しています。配列の 1 番目の要素はプライベート キー ファイル、2 番目の要素は Java クライアントのデジタル証明書ファイル2 です (デジタル証明書ファイルには、Java クライアントのプライベート キーが格納されます)。
注意 : | PEM エンコードされたデータがある場合は、 InputStream を渡す前に PEMInputStream クラスにラップできます。そのためには、ファイル内に PEM エンコードされたキーおよび証明書のインスタンスを作成した後に、次のコード行を追加します。 // キーまたは証明書が PEM ファイルの場合は入力ストリームをラップする weblogic.security.PEMInputStream クラスは、PEM ファイルに格納されているデジタル証明書を読み込みます。配列内の 1 番目の入力ストリームはプライベート キーで、2 番目の入力ストリームは単一の証明書または X.509 証明書のチェーンになります。このサンプルでは、単一の証明書が指定されています。 |
getInitialContext()
を呼び出すたびに、新しい Environment
オブジェクトを作成する必要があります。いったん User
オブジェクトとセキュリティ資格を指定すると、それらが Environment
オブジェクトに設定されたままになります。
Environment
クラスにより、これらのパラメータを格納するハッシュ テーブルが作成されます。env.setProviderURL
- クライアントは、このメソッドを呼び出して、SSL サーバとして機能する Oracle WebLogic Server インスタンスの URL を指定します。このサンプルでは、URL で t3s プロトコルが指定されています。t3s は、SSL プロトコルをベースとする Oracle WebLogic Server 独自のプロトコルです。注意 : | Oracle WebLogic Server クライアントでは、t3 および t3s プロトコルに加え、RMI over IIOP プロトコルも使用できます。RMI over IIOP の詳細については、Oracle WebLogic Serve ドキュメントの「RMI over IIOP の使い方」を参照してください。 |
return env.getInitialContext();
JNDI の getInitialContext()
メソッドが呼び出されると、Java クライアントと Oracle WebLogic Server が相互認証を実行します。デジタル証明書が検証できない場合や、Java クライアントのデジタル証明書がデフォルトの (アクティブな) セキュリティ レルムで認証できない場合は、例外が送出されます。認証されたユーザ オブジェクトは、Java クライアントのサーバ スレッドに格納され、保護されている Oracle WebLogic リソースに Java クライアントがアクセスする際のパーミッションのチェックに使用されます。
次のコマンドラインは、コード リスト 29-5 のサンプル Java クライアント (startMyProcess
) を実行する際に設定する必要のあるオプションを示しています。これらのオプションを設定することで、Java クライアントと Oracle WebLogic Server の間で双方向 SSL ハンドシェークを発生させることができます。
java -Dbea.home=C:\bea
-Djava.protocol.handler.pkgs=com.certicom.net.ssl
-Dweblogic.security.SSL.ignoreHostnameVerification=true
-Dweblogic.security.TrustKeyStore=CustomTrust
-Dweblogic.security.CustomTrustKeyStoreFileName=c:\keystore\trustCA.jks
-Dweblogic.security.CustomTrustKeyStoreType=jks
startMyProcess
使用するコマンドライン オプションは、Oracle WebLogic Server にどのタイプの信頼が設定されているかによって異なります。ここに示すサンプルでは、Oracle WebLogic Server にカスタム信頼が設定されています (その他に、Oracle WebLogic Server デモ信頼と Java 標準信頼があります)。
-Dbea.home=C:\bea
には製品のインストール ディレクトリを指定します。-Djava.protocol.handler.pkgs
- プロトコル ハンドラを指定しています。注意 : | SSL クライアントのライセンス要件 - WebLogic SSL クラス (weblogic.security.SSL ) を使用してエンタープライズ Java Bean (EJB) を呼び出すスタンドアロン Java クライアントでは、必ず BEA ライセンス ファイルを使用する必要があります。クライアント アプリケーションの実行時には、コマンドラインで -Dbea.home および -Djava.protocol.handler.pkgs システム プロパティを設定する必要があります。 |
-Dweblogic.security.SSL.ignoreHostnameVerification
- ホスト名の検証を無効にしています。つまり、SSL サーバがデジタル証明書に格納して返すホスト名が、SSL サーバへの接続に使用する URL のホスト名と一致するかどうかは検証されません。アプリケーションをプロダクション環境で実行する場合は、ホスト名検証を有効にすることをお勧めします。-Dweblogic.security.TrustKeyStore
- 接続先となるサーバ インスタンスで使用するキーストアを指定しています。このサンプルでは、CustomTrust というカスタム キーストアを使用しています。-Dweblogic.security.CustomTrustKeyStoreFileName
- 信頼キーストアへの完全修飾パスを指定しています。-Dweblogic.security.CustomTrustKeyStoreType
- キーストアのタイプを指定する省略可能なコマンドライン引数です。デフォルト値は、JDK の java.security
ファイルに指定されているキーストア タイプになります。通常は jks
です。注意 : | カスタム キーストアがパスワードで保護されている場合は、-Dweblogic.security.CustomTrustKeystorePassPhrase= password を追加します。 |
ここで示すサンプルでは、カスタム キーストアの CA 証明書を信頼しています。使用するコマンドライン オプションは、Oracle WebLogic Server にどのタイプの信頼が設定されているかによって異なります。次に例を示します。
SDK_HOME\jre\lib\security\cacerts
) のみを信頼する場合は、キーストアがパスワードで保護されていない限り、コマンドライン引数を指定する必要はありません。Java 標準信頼キーストアがパスワードで保護されている場合は、次のコマンドライン引数を追加します。-Dweblogic.security.JavaStandardTrustKeystorePassPhrase=password
BEA_HOME\wlserver_10.3\server\lib\DemoTrust.jks
) の両方を信頼する場合は、次の引数を追加します。 -Dweblogic.security.TrustKeyStore=DemoTrust
接続先のサーバ インスタンスでデモ用の ID と証明書が使用されている場合は、この引数を必ず指定する必要があります。Java 標準信頼キーストアがパスワードで保護されている場合は、次のコマンドライン引数を追加します。
-Dweblogic.security.JavaStandardTrustKeystorePassPhrase=password
Java クライアントでの SSL 認証の詳細については、以下の Oracle WebLogic Server ドキュメントを参照してください。
Weblogic JNDI の Environment Class クラス
<%@ page import="com.bea.wli.bpm.proxy.JpdProxy"%>
<%@ page import="com.bea.wli.bpm.proxy.JpdProxySession"%>
JpdProxySession
インタフェースの使用については、「プロキシ クラスをインポートするには」を参照してください。
「操作方法 : Java クライアントから JPD プロキシを使用するには」と同じサンプルを使用すると、コードは次のようになります。
try
{
PoProcess p = (PoProcess)
JpdProxy.create(
PoProcess.class,
PoProcess.SERVICE_URI,
new JpdProxy.ContextHandler()
{
public Context getContext() throws NamingException
{
Environment env = new Environment();
env.setProviderUrl("t3://localhost:7001");
env.setSecurityPrincipal("weblogic");
env.setSecurityCredentials("weblogic");
return env.getInitialContext();
}
});
PoDocument document = PoDocument.Factory.newInstance();
Po po = document.addNewPo();
po.setSku("abc");
PoReferenceDocument ref = p.processPO(document);
p.done();
}
catch (Exception e) { ... }
}
%>
</html>
注意 : | JpdProxy.create() クラスのシグネチャについては、「プロキシ ファクトリ (JpdProxy.create() ) メソッドを使用するには」を参照してください。 |
JPD プロキシを使用して、EJB からビジネス プロセスを呼び出すことも可能です。その方法は、Java ファイルから JPD プロキシを使用する場合と同じです。詳しい方法については、「操作方法 : Java クライアントから JPD プロキシを使用するには」を参照してください。
EJB の開発については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』を参照してください。
![]() ![]() ![]() |