|
以下の節では、アプリケーションでコンテキスト伝播 API を使用する方法を説明します。
コンテキストの伝播により、プログラマは情報をアプリケーションと関連付けできます。情報はその後、すべての要求と共に伝えられます。さらに、下流のコンポーネントは、この情報を送り元に戻せるように、情報に対し追加または修正を行えます。コンテキストの伝播は、作業領域、作業コンテキスト、またはアプリケーション トランザクションとしても知られています。
通常、コンテキストの伝播を使用するのは、アプリケーションの不可欠な一部である情報ではなく、アプリケーションの外部に情報を運ぶ必要があるアプリケーションです。たとえば、診断モニタ、アプリケーション トランザクション、アプリケーションのロード バランシングなどがそれに当たります。アプリケーションの外部にこの種類の情報を保持すると、不要な場合に API を使用しないようにしてアプリケーション自体の形を整えておくことができます。また、サード パーティ コンポーネントなどの読み込み専用コンポーネントに情報を追加することもできます。
コンテキスト伝播のプログラミングでは、最初に WorkContextMap
と WorkContext
を作成するクライアント アプリケーションのコードを記述し、次にこのデータを取得および必要に応じて使用する呼び出し対象のアプリケーション自体のコードを記述します。呼び出し対象のアプリケーションは、EJB、Web サービス、サーブレット、JMS トピックまたはキューなど、どのような種類のものでも構いません。詳細については、「コンテキスト伝播のプログラミング : 主な手順」を参照してください。
WebLogic コンテキスト伝播 API は weblogic.workarea
パッケージにあります。次の表に、主なインタフェースとクラスを示します。
コンテキスト伝播の完全な API マニュアルについては、weblogic.workarea の Javadoc を参照してください。
以下は、アプリケーション内でコンテキスト伝播を使用する高度な手順です。この手順では、反復的な開発環境を設定済みで、weblogic.workarea
API を使用してコンテキスト伝播を使用するよう更新する既存のクライアントおよびアプリケーションがあることを前提にしています。
WorkContextMap
オブジェクトと WorkContext
オブジェクトを作成し、ユーザ データをコンテキストに追加します。
「クライアントのコンテキスト伝播のプログラミング」を参照してください。
『スタンドアロン クライアント プログラマーズ ガイド』を参照してください。
WorkContextMap
を作成し、追加するコンテキストとユーザ データをクライアント アプリケーションから取得します。
「アプリケーションのコンテキスト伝播のプログラミング」を参照してください。
以下のサンプル Java コードでは、Web サービスを呼び出すスタンドアロン Java クライアントを示します。また、この例では、weblogic.workarea.*
コンテキスト伝播 API を使用してユーザ情報を呼び出しに関連付ける方法も示します。コンテキスト伝播に該当するコードを太字で示し、サンプルの後で説明を加えます。
コンテキスト伝播の完全な API マニュアルについては、weblogic.workarea の Javadoc を参照してください。
注意 : | Web サービスおよび Web サービスを呼び出すクライアント アプリケーションの詳細については、『WebLogic Web サービス入門』を参照してください。 |
package examples.workarea.client;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.Stub;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import weblogic.workarea.WorkContextMap;
import weblogic.workarea.WorkContext;
import weblogic.workarea.PrimitiveContextFactory;
import weblogic.workarea.PropagationMode;
import weblogic.workarea.PropertyReadOnlyException;
/**
* WorkArea Web サービスの sayHello オペレーションを呼び出す
* 単純なスタンドアロンのクライアント アプリケーション。
*
* @author Copyright (c) 2004 by BEA Systems. All Rights Reserved.
*/
public class Main {
public final static String SESSION_ID= "session_id_key";
public static void main(String[] args)
throws ServiceException, RemoteException, NamingException, PropertyReadOnlyException{
WorkAreaService service = new WorkAreaService_Impl(args[0] + "?WSDL");
WorkAreaPortType port = service.getWorkAreaPort();
WorkContextMap map = (WorkContextMap)new InitialContext().lookup("java:comp/WorkContextMap");
WorkContext stringContext = PrimitiveContextFactory.create("A String Context");
// 文字列コンテキストを配置
map.put(SESSION_ID, stringContext, PropagationMode.SOAP);
try {
String result = null;
result = port.sayHello("Hi there!");
System.out.println( "Got result: " + result );
} catch (RemoteException e) {
throw e;
}
}
}
weblogic.workarea.*
クラス、インタフェース、および例外をインポートする方法を示している。i
mport weblogic.workarea.WorkContextMap;
import weblogic.workarea.WorkContext;
import weblogic.workarea.PrimitiveContextFactory;
import weblogic.workarea.PropagationMode;
import weblogic.workarea.PropertyReadOnlyException;
java:comp/WorkContextMap
の JNDI ルックアップを実行することで WorkContextMap
を作成する方法を示している。WorkContextMap map = (WorkContextMap)
new InitialContext().lookup("java:comp/WorkContextMap");
PrimitiveContextFactory
を使用して WorkContext
を作成する方法を示している。この例では、WorkContext
は、単純な文字列値 A String Context
で構成されています。文字列値は、呼び出される Web サービスに渡されるユーザ データです。WorkContext stringContext =
PrimitiveContextFactory.create("A String Context");
SESSION_ID
とともにコンテキスト データを WorkContextMap
に追加し、それを現在のスレッドに関連付ける方法を示している。PropagationMode.SOAP
定数は、伝播が SOAP メッセージを介して発生するように指定します。これは、クライアントが Web サービスを呼び出しているためです。map.put(SESSION_ID, stringContext, PropagationMode.SOAP);
以下のサンプル Java コードでは、Web サービスを実装する Java Web サービス (Java Web Service: JWS) ファイルを示します。JWS ファイルには、Web サービスの呼び出しに関連付けられるユーザ データを取得するためのコンテキスト伝播コードも含まれます。コンテキスト伝播に該当するコードを太字で示し、サンプルの後で説明を加えます。
コンテキスト伝播の完全な API マニュアルについては、weblogic.workarea の Javadoc を参照してください。
注意 : | Web サービスおよび Web サービスを呼び出すクライアント アプリケーションの詳細については、『WebLogic Web サービス入門』を参照してください。 |
package examples.workarea;
import javax.naming.InitialContext;
// コンテキスト伝播クラスをインポート
import weblogic.workarea.WorkContextMap;
import weblogic.workarea.WorkContext;
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.WLHttpTransport;
@WebService(name="WorkAreaPortType",
serviceName="WorkAreaService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="workarea",
serviceUri="WorkAreaService",
portName="WorkAreaPort")
/**
* この JWS ファイルは、1 つのオペレーション sayHello を含む簡単な
* WebLogic Web サービスの基本となる
*
*/
public class WorkAreaImpl {
public final static String SESSION_ID = "session_id_key";
@WebMethod()
public String sayHello(String message) {
try {
WorkContextMap map = (WorkContextMap) new InitialContext().lookup("java:comp/WorkContextMap");
WorkContext localwc = map.get(SESSION_ID);
System.out.println("local context: " + localwc);
System.out.println("sayHello: " + message);
return "Here is the message: '" + message + "'";
} catch (Throwable t) {
return "error";
}
}
}
import weblogic.workarea.WorkContextMap;
import weblogic.workarea.WorkContext;
java:comp/WorkContextMap
の JNDI ルックアップを実行することで WorkContextMap
を作成する方法を示している。WorkContextMap map = (WorkContextMap)
new InitialContext().lookup("java:comp/WorkContextMap");
WorkContextMap
からコンテキストのユーザ データを取得する方法を示している。ここでは、キーは、Web サービスを呼び出したときにクライアント アプリケーションが設定したものと同じ SESSION_ID
です。WorkContext localwc = map.get(SESSION_ID);