ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server アプリケーションの開発
11g リリース 1 (10.3.1)
B55515-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

11 コンテキスト伝播のプログラミング

以下の節では、アプリケーションでコンテキスト伝播 API を使用する方法を説明します。

コンテキストの伝播について

コンテキストの伝播により、プログラマは情報をアプリケーションと関連付けできます。情報はその後、すべての要求と共に伝えられます。さらに、下流のコンポーネントは、この情報を送り元に戻せるように、情報に対し追加または修正を行えます。コンテキストの伝播は、作業領域、作業コンテキスト、またはアプリケーション トランザクションとしても知られています。

通常、コンテキストの伝播を使用するのは、アプリケーションの不可欠な一部である情報ではなく、アプリケーションの外部に情報を運ぶ必要があるアプリケーションです。たとえば、診断モニタ、アプリケーション トランザクション、アプリケーションのロード バランシングなどがそれに当たります。アプリケーションの外部にこの種類の情報を保持すると、不要な場合に API を使用しないようにしてアプリケーション自体の形を整えておくことができます。また、サード パーティ コンポーネントなどの読み込み専用コンポーネントに情報を追加することもできます。

コンテキスト伝播のプログラミングでは、最初に WorkContextMapWorkContext を作成するクライアント アプリケーションのコードを記述し、次にこのデータを取得および必要に応じて使用する呼び出し対象のアプリケーション自体のコードを記述します。呼び出し対象のアプリケーションは、EJB、Web サービス、サーブレット、JMS トピックまたはキューなど、どのような種類のものでも構いません。詳細については、「コンテキスト伝播のプログラミング : 主な手順」を参照してください。

WebLogic コンテキスト伝播 API は weblogic.workarea パッケージにあります。次の表に、主なインタフェースとクラスを示します。

表 11-1 WebLogic コンテキスト伝播 API のインタフェースとクラス

インタフェースまたはクラス 説明

WorkContextMap インタフェース

アプリケーションにデータを付け、アプリケーション要求を介してその情報を伝播するコンテキスト伝播のメイン インタフェース。WorkContextMaps は、クライアントまたはアプリケーションの JNDI 環境の一部で、java:comp/WorkContextMap という名前をルックアップして JNDI からアクセスできる。

WorkContext インタフェース

アプリケーションとともに渡されるユーザ データのマーシャリングおよびアンマーシャリングに使用するインタフェース。このインタフェースには、単純な 8 ビット ASCII コンテキスト (AsciiWorkContext)、long コンテキスト (LongWorkContext)、Serializable コンテキスト (SerializableWorkContext)、String コンテキスト (StringWorkContext) のデータをマーシャリングおよびアンマーシャリングするために 4 つの実装クラスがある。

WorkContext には、PrimitiveWorkContext というサブインタフェースが 1 つある。これは、特に単独のプリミティブ データ項目をマーシャリングおよびアンマーシャリングする場合に使用する。

WorkContextOutput/Input インタフェース

WorkContext 実装をそれぞれマーシャリングおよびアンマーシャリングするためのプリミティブ ストリームを表すインタフェース。

PropagationMode インタフェース

WorkContexts の伝播プロパティを定義する。WorkContext がローカルで伝播されるか、スレッド間で伝播されるか、RMI 呼び出し間で伝播されるか、JMS キューおよびトピック間で伝播されるか、SOAP メッセージ間で伝播されるかを指定する。指定しなかった場合のデフォルトは、同一スレッド内のリモート呼び出しとローカル呼び出し間でデータを伝播する。

PrimitiveContextFactory クラス

プリミティブ データのみを格納する WorkContexts を作成するためのコンビニエンス クラス。


コンテキスト伝播の完全な API マニュアルについては、「weblogic.workarea の Javadoc」を参照してください。

コンテキスト伝播のプログラミング : 主な手順

以下は、アプリケーション内でコンテキスト伝播を使用する高度な手順です。この手順では、反復的な開発環境を設定済みで、weblogic.workarea API を使用してコンテキスト伝播を使用するよう更新する既存のクライアントおよびアプリケーションがあることを前提にしています。

  1. クライアント アプリケーションを更新して WorkContextMap オブジェクトと WorkContext オブジェクトを作成し、ユーザ データをコンテキストに追加します。

    クライアントのコンテキスト伝播のプログラミング」を参照してください。

  2. クライアント アプリケーションが (WebLogic Server にデプロイされた Java EE コンポーネントで実行されるのではなく) スタンドアロンの場合、その CLASSPATH に Java EE アプリケーション クライアント (シン クライアント) が含まれるようにします。

    Oracle Fusion Middleware Oracle WebLogic Server スタンドアロン クライアントプログラマーズガイド』を参照してください。

  3. アプリケーション (EJB、Web サービス、サーブレットなど) をさらに更新して WorkContextMap を作成し、追加するコンテキストとユーザ データをクライアント アプリケーションから取得します。

    アプリケーションのコンテキスト伝播のプログラミング」を参照してください。

クライアントのコンテキスト伝播のプログラミング

以下のサンプル Java コードでは、Web サービスを呼び出すスタンドアロン Java クライアントを示します。また、この例では、weblogic.workarea.* コンテキスト伝播 API を使用してユーザ情報を呼び出しに関連付ける方法も示します。コンテキスト伝播に該当するコードを太字で示し、サンプルの後で説明を加えます。

コンテキスト伝播の完全な API マニュアルについては、「weblogic.workarea の Javadoc」を参照してください。


注意 :

Web サービスおよび Web サービスを呼び出すクライアント アプリケーションの詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server 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 サービスの <code>sayHello</code> オペレーションを呼び出す
 * 単純なスタンドアロンのクライアント アプリケーション。 *
 */
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;
    }
  }
}

上記の例で注目すべき点は以下のとおりです。

アプリケーションのコンテキスト伝播のプログラミング

以下のサンプル Java コードでは、Web サービスを実装する Java Web サービス (Java Web Service: JWS) ファイルを示します。JWS ファイルには、Web サービスの呼び出しに関連付けられるユーザ データを取得するためのコンテキスト伝播コードも含まれます。コンテキスト伝播に該当するコードを太字で示し、サンプルの後で説明を加えます。

コンテキスト伝播の完全な API マニュアルについては、「weblogic.workarea の Javadoc」を参照してください。


注意 :

Web サービスおよび Web サービスを呼び出すクライアント アプリケーションの詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server 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";
   }
  }
}

上記の例で注目すべき点は以下のとおりです。