プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Serverのアップグレード
12c (12.2.1)
E70005-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

4 WebLogic Webサービスのアップグレード

次の項では、WebLogic Server 9.xまたは10.xからWebLogic Server 12.1.xリリースへのWebLogic Webサービスのアップグレード手順について説明します。また、8.1のWebLogic Webサービスを12.1.x WebLogic Webサービスにアップグレードする方法も説明します。

この章の内容は次のとおりです。


注意:

関連するWebサービス・ランタイムはこのリリースでもサポートされるため、10.3.xのWebLogic Webサービス(JAX-WSまたはJAX-RPC)は変更しなくてもバージョン12.1.xのWebLogic Serverで引き続き実行できますが、対象のWebサービス・ランタイムは非推奨になっており、今後のリリースの製品からは削除される予定です。このため、この章の説明に従って、10.3.xのWebサービスを12.1.xにアップグレードすることを強くお薦めします。

10.3.xのRESTful Webサービス(JAX-RS)の12.2.1へのアップグレード

10.3.xでは、RESTful Webサービス(JAX-RS)参照実装(RI)のJersey 1.9および1.1.5.1 Java APIをサポートするために、一連の事前構築済共有ライブラリがWebLogic Serverに付属しています。共有ライブラリを使用するためには、WebLogic Serverインスタンスにそのライブラリを登録し、Jerseyサーブレットを使用して共有ライブラリを参照するためにweb.xmlおよびweblogic.xmlのデプロイメント記述子をそれぞれ変更する必要があります。

12.2.1では、WebLogic ServerはJersey 2.21 (JAX-RS 2.0 RI)をサポートします。

次の項では、10.3.x RESTful Webサービス・アプリケーションを12.2.1にアップグレードする方法について説明します。

Jersey 2.5.1 (JAX-RS 2.0 RI)を使用するためのアップグレード

Jersey 2.5.1 (JAX-RS 2.0 RI)を使用するには、次のように、10.3.x RESTful Webサービス・アプリケーションを変更して、共有ライブラリを登録および使用する必要があります。

  1. 『Oracle WebLogic Server RESTful Webサービスの開発と保護』のWebLogic ServerインスタンスへのJersey 2.5.1 (JAX-RS 2.0 RI)共有ライブラリの登録に関する項の説明に従って、Jersey 2.5.1 (JAX-RS 2.0 RI)共有ライブラリをWebLogic Serverインスタンスに登録します。

  2. 『Oracle WebLogic Server RESTful Webサービスの開発と保護』のJersey 2.5.1 (JAX-RS 2.0 RI)を使用するためのWebアプリケーションの構成に関する項の説明に従って、Jersey 2.5.1 (JAX-RS 2.0 RI)への共有ライブラリ参照を変更するように、アプリケーションと一緒にパッケージ化されたweblogic.xmlを更新します。

  3. アプリケーションと一緒にパッケージ化されたweb.xmlを更新して、Jerseyサーブレットcom.sun.jersey.spi.container.servlet.ServletContainerへのWebリクエストを委任しないようにします。たとえば、次の<web-app>コンテンツを削除します。

    <web-app>
        <servlet>
            <display-name>My Jersey Application</display-name>
            <servlet-name>MyJerseyApp</servlet-name>
            <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>javax.ws.rs.Application</param-name>
                <param-value>myPackage.myJerseyApplication</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>MyJerseyApp</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    </web-app>
    

    追加の詳細な構成オプションについては、『Jersey 2.5.1 User Guide』を参照してください。

  4. 『Oracle WebLogic Server RESTful Webサービスの開発と保護』のJersey 2.5.1 (JAX-RS 2.0 RI)を使用したRESTful Webサービス・クライアントの開発に関する項の説明に従って、javax.ws.rs.client APIを使用するようにクライアントを更新します。

    Jersey 1.x JAX-RS RIクライアントAPIは、Jersey 2.5.1 (JAX-RS 2.0 RI)と互換性がありません。

10.xのWebLogic Webサービス(JAX-WS)の12.2.xへのアップグレード

10.x WebLogic Webサービスを12.2.xへアップグレードするために必要な手順はありません。JAX-WSのWebサービスは、変更や再コンパイルを行わずにWebLogic Server 12.2.xへ再デプロイすることができます。

8.1のWebLogic Webサービスの12.1.xへのアップグレード

12.1.2リリースで、8.1 WebLogic Webサービス・ランタイムは削除されています。8.1 WebLogic Webサービスを使用している場合、このリリースで使用可能なWebサービス・スタックに8.1 WebLogic Webサービス・アプリケーションをアップグレードする必要があります。8.1 WebLogic Webサービスは、SOAPペイロード内のXML要素をJavaオブジェクト内にマッピングする(その逆もまた同様)目的のため、Apache XMLBeansに依存します。XMLBeansは12.1.2でサポートされていません。次のアップグレード・パスを使用できます。

  • WebLogic JAX-RPCスタックへのアップグレード: これは、アップグレードに必要な作業レベルにおいて最も単純なアップグレード・パスです。WebLogic JAX-RPCスタックのXMLBeansサポートは8.1 WebLogic Webサービスと互換性があります。詳細は、「8.1のWebLogic WebサービスのWebLogic JAX-RPCスタックへのアップグレード」を参照してください。

  • JAX-WSスタックへのアップグレード: これは、WebLogic Serverにおける最新のテクノロジおよび規準のサポートを利用するという点で、最も優れたアップグレード・パスです。このパスには手作業によるアップグレード・プロセスが必要であり、作業レベルは既存の8.1 Webサービス・アプリケーションの性質によって決まります。たとえば、アプリケーションでXMLBeansをほとんど使用しない場合、アップグレード・プロセスは比較的容易なものになります。XMLBeansの依存性が高い8.1 Webサービス・アプリケーションの場合、XMLBeansクラスのかわりにJAXBクラスを使用するにはサービス実装のビジネス・ロジックを変更する必要があります。JAX-WSではRPCエンコード・スタイルはサポートされていません。RPCエンコード・スタイルの8.1 Webサービス・アプリケーションは、より相互運用性の高いリテラル・スタイルのサービス規定に対応することが必要になります。詳細は、「8.1のWebLogic WebサービスのWebLogic JAX-WSスタックへのアップグレード」を参照してください。

8.1のWebLogic WebサービスのWebLogic JAX-RPCスタックへのアップグレード

この項では、WebLogic JAX-RPC実行時環境を使用するように8.1 WebLogic Webサービスをアップグレードする方法を説明します。WebLogic JAX-RPCのランタイムは、JSR 109: Implementing Enterprise Web Services仕様(http://www.jcp.org/en/jsr/detail?id=109)に基づいています。12.1.xのプログラミング・モデルでは、JSR 181: Web Services Metadata for the Java Platform仕様(JSR-181)(http://www.jcp.org/en/jsr/detail?id=181)で指定される標準JDK 1.5メタデータ・アノテーションを使用します。

8.1のWebサービスのアップグレードで行うタスクを大まかにまとめると次のようになります。以降の項の手順では、より詳しく説明します。

  • Webサービスを実装するJavaクラスやステートレス・セッションEJBの8.1のJavaソース・コードを、JWSアノテーションを使用するように更新します。

    12.1.xでは、WebLogic Webサービスは、JWSファイル(JWSアノテーションを含むJavaファイル)を使用して実装します。jwsc Antタスクは、常にWebサービスをプレーンJavaファイルとして実装します(ただし、JWSファイルに明示的にjavax.ejb.SessionBeanを実装する場合を除きます)。後者のケースは一般的ではありません。このプログラミング・モデルは、バックエンド・コンポーネントの種類(JavaクラスかEJBか)の指定が必要だった8.1のモデルとは異なります。

  • WebサービスをビルドするAntビルド・スクリプトを、8.1のservicegenタスクではなく12.1.xのWebLogic WebサービスAntタスクjwscを呼び出すように更新します。

以下の項では、次のことが前提となっています。

  • 8.1のWebサービスの生成にservicegenを使用したことがあり、より全般的には、WebLogic Serverで動作するWebサービスやその他のJava Platform, Enterprise Edition (Java EE)バージョン5アーティファクトを、開発環境でAntスクリプトを使用して繰り返し開発しています。この項の手順説明では、既存のAnt build.xmlファイルを更新する手順を説明します。

  • 8.1のWebサービスのJavaクラスまたはEJBのソース・コードにアクセスできます。

この項では、以下の内容については説明しません

  • JMS実装の8.1 Webサービスのアップグレード(WebLogic WebサービスJAX-RPCランタイムは、JMS実装のサービスをサポートしていないためです)。

  • 8.1より前のバージョンのWebサービスのアップグレード。

  • 8.1のWebサービスを呼び出すクライアント・アプリケーションから12.1.xのWebサービスを呼び出すクライアント・アプリケーションへのアップグレード。12.1.x Webサービスを起動するクライアント・アプリケーションを記述する方法の詳細は、『Oracle WebLogic Server JAX-RPC Webサービスの開発』のJava SEクライアントからのWebサービスの呼出しに関する項および別のWebサービスからのWebサービスの呼出しに関する項を参照してください。

Javaクラス実装の8.1のWebLogic Webサービスの
12.1.xへのアップグレード: 主な手順

Javaクラス実装の8.1のWebサービスを、WebLogic WebサービスJAX-RPCランタイムを使用するようにアップグレードする手順:

  1. コマンド・ウィンドウを開き、12.1.xのドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)スクリプトを実行して、WebLogic Server 12.1.x環境を設定します。

    WebLogic Serverドメインのデフォルトの場所は、ORACLE_HOME/user_projects/domains/domainNameです。ORACLE_HOMEは、インストール時に指定されたOracleホーム・ディレクトリで、domainNameはドメインの名前です。

  2. プロジェクト・ディレクトリを作成します。

       prompt> mkdir /myExamples/upgrade_pojo
    
  3. プロジェクト・ディレクトリの下に、srcディレクトリと、古い8.1のJavaクラスに対応する新しい12.1.xのJWSファイル(この手順で後述)のパッケージ名に相当するサブディレクトリを作成します。

       prompt> cd /myExamples/upgrade_pojo
        prompt> mkdir src/examples/webservices/upgrade_pojo
    
  4. 8.1のWebサービスを実装する古いJavaクラスを、作業ディレクトリのsrc/examples/webservices/upgrade_pojoディレクトリにコピーします。必要に応じてファイル名を変更してください。

  5. 次の手順に従ってJavaファイルを編集します。具体的な例については、「8.1のJavaファイルと対応する12.1.xのJWSファイルの例」にある新旧のサンプルJavaファイルを参照してください。

    1. 必要に応じて、新しい12.1.xのソース環境を反映するようにJavaファイルのパッケージ名とクラス名を変更します。

    2. import文を追加して、標準およびWebLogic固有のJWSアノテーションがインポートされるようにします。

    3. 少なくとも、次のJWSアノテーションを追加します。

      • JWSファイルがWebサービスを実装することを指定する標準の@WebServiceアノテーション(Javaクラス・レベルで追加)。

        以下のアノテーションも追加することをお薦めします。

      • Webサービスの種類(document-literal-wrapped、RPC-encodedなど)を指定する標準の@SOAPBindingアノテーション(クラス・レベルで追加)。

      • デプロイされたWebサービスを呼び出すURLで使用されるコンテキストとサービスURIを指定するWebLogic固有の@WLHttpTransportアノテーション(クラス・レベルで追加)。

      • 標準の@WebMethodアノテーション(Webサービス操作として公開されるメソッドごとにメソッド・レベルで追加)。

        JavaファイルでのJWSアノテーションの使用に関する概要については、『Oracle WebLogic Server JAX-RPC Webサービスの開発』のJWSファイルのプログラミングに関する項を参照してください。

    4. 12.1.x Webサービスに引き継ぐ8.1 Webサービスの機能によっては、JWSファイルに他のアノテーションを追加することが必要な場合もあります。8.1では、これらの機能の多くをservicegenの属性を使用して構成していました。「servicegen属性とJWSアノテーションまたはjwsc属性のマッピング」の表に、8.1でservicegenの属性を使用して有効にしていた機能に対応するJWSアノテーションをまとめてあります(相当するアノテーションがある場合のみ)。

  6. 8.1のWebサービスのビルドに使用していた古いbuild.xmlファイルを12.1.xの作業ディレクトリにコピーします。

  7. Ant build.xmlファイルを更新して、servicegenの代わりにjwsc Antタスクとその他のサポート・タスクが実行されるようにします。

    Antビルド・ファイルでbuild-serviceなどの新しいターゲットを作成し、前の手順で作成した新しいJWSファイルをコンパイルするjwsc Antタスク呼出しを追加することをお薦めします。このターゲットがいったん正常に機能すれば、古いservicegen Antタスクは削除できます。

    次に示す手順は、build.xmlファイルを更新する際の主な手順です。詳細な手順については、『Oracle WebLogic Server JAX-RPC Webサービスの開発』のJavaから開始するWebLogic Webサービスの開発: 主な手順に関する項およびWSDLファイルから開始するWebLogic Webサービスの開発: 主な手順に関する項で説明する、標準の反復開発プロセスを参照してください。

    次の各手順の例については、「8.1と更新された12.1.xのAntビルド・ファイルの例(Javaクラス実装のWebサービス)」を参照してください。

    1. jwsc taskdefをbuild.xmlファイルに追加します。

    2. build-serviceターゲットを作成し、この後の手順に従って12.1.xのWebサービスをビルドするのに必要なタスクを追加します。

    3. jwscタスクをビルド・ファイルに追加します。srdir属性にsrcディレクトリ(この例では/myExamples/upgrade_pojo/src)を設定し、destdir属性に前の手順で作成したエンタープライズ・アプリケーションのルート・ディレクトリを設定します。

      <jws>子要素のfile属性に、前の手順で作成した新しいJWSファイルの名前を指定します。

      12.1.x Webサービスに引き継ぐ8.1 Webサービスの機能によっては、jwscタスクに追加の属性を指定することが必要な場合もあります。8.1では、これらの機能の多くをservicegenの属性を使用して構成していました。「servicegen属性とJWSアノテーションまたはjwsc属性のマッピング」の表で、servicegenの属性を使用して有効にしていた機能に相当するjwsc属性があるかどうかについて説明しています。

  8. build-service Antターゲットを実行します。すべてのタスクを正しく完了すると、アップグレードされた12.1.xのWebサービスがエンタープライズ・アプリケーションに含まれます。

Webサービスのデプロイとテストの詳細は、『Oracle WebLogic Server JAX-RPC Webサービスの開発』のWebLogic Webサービスのデプロイとアンデプロイに関する項と、WebサービスのWSDLの参照に関する項を参照してください。

次の各項に示すサンプルJavaコードの場合、アップグレードされた12.1.xのWebサービスのWSDLを呼び出すURLは次のようになります。

http://host:port/upgradePOJO/HelloWorld?WSDL
8.1のJavaファイルと対応する12.1.xのJWSファイルの例

次のサンプルJavaクラスが8.1のWebサービスを実装していたものと仮定します。

package examples.javaclass;
/**
  * Simple Java class that implements the HelloWorld Web service.   It takes
  * as input an integer and a String, and returns a message that includes these
  * two parameters.
  */
public final class HelloWorld81 {
  /**
    * Returns a text message that includes the integer and String input
    * parameters.
    *
    */
   public String sayHello(int num, String s) {
    System.out.println("sayHello operation has been invoked with arguments " + s + " and " + num);
    String returnValue = "This message brought to you by the letter "+s+" and the number "+num;
    return returnValue;
   }
}

これに対応するものとして、Javaクラス実装の12.1.x WebサービスのJWSファイルを次に示します(相違点が太字で示されています)。一部のJWSアノテーションの値が、「8.1と更新された12.1.xのAntビルド・ファイルの例(Javaクラス実装のWebサービス)」に示す8.1のservicegen Antタスクの属性から取得されている点に注意してください。

package examples.webservices.upgrade_pojo;
// Import standard JWS annotations
import javax.jws.WebService;
 import javax.jws.WebMethod;
 import javax.jws.soap.SOAPBinding;
// Import WebLogic JWS anntoation
import weblogic.jws.WLHttpTransport;
/**
  * Simple Java class that implements the HelloWorld92 Web service.   It takes
  * as input an integer and a String, and returns a message that includes these
  * two parameters.
  */
@WebService(name="HelloWorld92PortType", serviceName="HelloWorld",
             targetNamespace="http://example.org")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
              use=SOAPBinding.Use.LITERAL,
              parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
@WLHttpTransport(contextPath="upgradePOJO", serviceUri="HelloWorld",
                  portName="HelloWorld92Port")
public class HelloWorld92Impl {
  /**
    * Returns a text message that includes the integer and String input
    * parameters.
    *
    */
  @WebMethod()
   public String sayHello(int num, String s) {
    System.out.println("sayHello operation has been invoked with arguments " + s + " and " + num);
    String returnValue = "This message brought to you by the letter "+s+" and the number "+num;
    return returnValue;
   }
 }
8.1と更新された12.1.xのAntビルド・ファイルの
例(Javaクラス実装のWebサービス)

次の単純なbuild.xmlファイルでは、8.1でservicegen Antタスクを使用してWebLogic Webサービスをビルドする方法を示します。この例では、8.1のWebサービスを実装するJavaファイルがすでにexamples.javaclass.HelloWorld81クラスにコンパイルされています。

<project name="javaclass-webservice" default="all" basedir=".">
  <!-- set global properties for this build -->
   <property name="source" value="."/>
   <property name="build" value="${source}/build"/>
   <property name="war_file" value="HelloWorldWS.war" />
   <property name="ear_file" value="HelloWorldApp.ear" />
   <property name="namespace" value="http://examples.org" />
  <target name="all" depends="clean, ear"/>
  <target name="clean">
     <delete dir="${build}"/>
   </target>
  <!-- example of old 8.1 servicegen call to build Web Service -->
  <target name="ear">
     <servicegen
        destEar="${build}/${ear_file}"
        warName="${war_file}">
        <service
          javaClassComponents="examples.javaclass.HelloWorld81"
          targetNamespace="${namespace}"
          serviceName="HelloWorld"
          serviceURI="/HelloWorld"
          generateTypes="True"
          expandMethods="True">
        </service>
      </servicegen>
   </target>
</project>

これに対応するものとして、jwsc Antタスクを呼び出して12.1.xのWebサービスをビルドするbuild.xmlファイルを次に示します(この項で説明する該当タスクは太字で示してあります)。この例では、12.1.xのWebサービスを実装する新しいJWSファイルにHelloWorld92Impl.javaという名前が付けられています。

<project name="webservices-upgrade_pojo" default="all">
  <!-- set global properties for this build -->
  <property name="wls.username" value="weblogic" />
   <property name="wls.password" value="weblogic" />
   <property name="wls.hostname" value="localhost" />
   <property name="wls.port" value="7001" />
   <property name="wls.server.name" value="myserver" />
  <property name="ear.deployed.name" value="upgradePOJOEar" />
   <property name="example-output" value="output" />
   <property name="ear-dir" value="${example-output}/upgradePOJOEar" />
  <taskdef name="jwsc"
     classname="weblogic.wsee.tools.anttasks.JwscTask" />
  <taskdef name="wldeploy"
     classname="weblogic.ant.taskdefs.management.WLDeploy"/>
  <target name="all" depends="clean,build-service,deploy" />
  <target name="clean" depends="undeploy">
     <delete dir="${example-output}"/>
   </target>
  <target name="build-service">
    <jwsc
       srcdir="src"
       destdir="${ear-dir}">
      <jws file="examples/webservices/upgrade_pojo/HelloWorld92Impl.java" />
    </jwsc>
  </target>
  <target name="deploy">
     <wldeploy action="deploy" name="${ear.deployed.name}"
       source="${ear-dir}" user="${wls.username}"
       password="${wls.password}" verbose="true"
       adminurl="t3://${wls.hostname}:${wls.port}"
       targets="${wls.server.name}" />
   </target>
  <target name="undeploy">
     <wldeploy action="undeploy" name="${ear.deployed.name}"
       failonerror="false"
       user="${wls.username}" password="${wls.password}" verbose="true"
       adminurl="t3://${wls.hostname}:${wls.port}"
       targets="${wls.server.name}" />
   </target>
</project>

EJB実装の8.1のWebLogic Webサービスの
12.1.xへのアップグレード: 主な手順

次の手順では、WebLogic WebサービスJAX-RPCランタイムを使用するようにEJB実装の8.1 Webサービスをアップグレードする方法について説明します。

12.1.xのWebサービスのプログラミング・モデルは、Webサービスの基底の実装を隠す点で8.1のモデルとはまったく異なります。WebサービスをJavaクラスで実装するかEJBで実装するかを前もって指定するのではなく、JWSファイルに明示的にjavax.ejb.SessionBeanを実装しないかぎり(一般的には実装しない)、jwsc Antタスクで常にプレーンJavaクラス実装が選択されます。このため、8.1のWebサービスは明示的にEJBで実装されていましたが、次の手順ではEJBクラスをインポートする方法やEJBGenを使用する方法は示されていません。かわりに、EJB実装の8.1のWebサービスに対応する12.1.xの標準的なJWSファイルを作成する方法を示します。

  1. コマンド・ウィンドウを開き、12.1.xのドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)スクリプトを実行して、WebLogic Server 12.1.x環境を設定します。

    WebLogic Serverドメインのデフォルトの場所は、ORACLE_HOME/user_projects/domains/domainNameです。ORACLE_HOMEは、インストール時に指定されたOracleホームで、domainNameはドメインの名前です。

  2. プロジェクト・ディレクトリを作成します。

       prompt> mkdir /myExamples/upgrade_ejb
    
  3. プロジェクト・ディレクトリの下に、srcディレクトリと、8.1のEJB実装に対応する新しい12.1.xのJWSファイル(この手順で後述)のパッケージ名に相当するサブディレクトリを作成します。

       prompt> cd /myExamples/upgrade_ejb
        prompt> mkdir src/examples/webservices/upgrade_ejb
    
  4. javax.ejb.SessionBeanを実装していた8.1 EJB Beanファイルを、作業ディレクトリのsrc/examples/webservices/upgrade_ejbディレクトリにコピーします。必要に応じてファイル名を変更してください。


    注意:

    8.1のホームおよびリモートEJBファイルをコピーする必要はありません。

  5. 次の手順に従ってEJB Beanファイルを編集します。具体的な例については、「8.1のEJBファイルと対応する12.1.xのJWSファイルの例」にある新旧のサンプルJavaファイルを参照してください。

    1. 必要に応じて、新しい12.1.xのソース環境を反映するようにJavaファイルのパッケージ名とクラス名を変更します。

    2. 必要に応じて、EJBクラス(javax.ejb.*)をインポートするimport文を削除します。これらのクラスは、アップグレード後のJWSファイルでは必要ありません。

    3. import文を追加して、標準およびWebLogic固有のJWSアノテーションがインポートされるようにします。

    4. JWSファイルのクラス宣言からimplements SessionBeanコードを削除して、それ以降javax.ejb.SessionBeanが実装されないようにします。

    5. EJB固有のメソッドをすべて削除します。

      • ejbActivate()

      • ejbRemove()

      • ejbPassivate()

      • ejbCreate()

    6. 少なくとも、次のJWSアノテーションを追加します。

      • JWSファイルがWebサービスを実装することを指定する標準の@WebServiceアノテーション(Javaクラス・レベルで追加)。

        以下のアノテーションも追加することをお薦めします。

      • Webサービスの種類(document-literal-wrapped、RPC-encodedなど)を指定する標準の@SOAPBindingアノテーション(クラス・レベルで追加)。

      • デプロイされたWebサービスを呼び出すURLで使用されるコンテキストとサービスURIを指定するWebLogic固有の@WLHttpTransportアノテーション(クラス・レベルで追加)。

      • 標準の@WebMethodアノテーション(Webサービス操作として公開されるメソッドごとにメソッド・レベルで追加)。

      JavaファイルでのJWSアノテーションの使用に関する概要については、『Oracle WebLogic Server JAX-RPC Webサービスの開発』のJWSファイルのプログラミングに関する項を参照してください。

    7. 12.1.x Webサービスに引き継ぐ8.1 Webサービスの機能によっては、JWSファイルに他のアノテーションを追加することが必要な場合もあります。8.1では、これらの機能の多くをservicegenの属性を使用して構成していました。「servicegen属性とJWSアノテーションまたはjwsc属性のマッピング」の表に、8.1でservicegenの属性を使用して有効にしていた機能に対応するJWSアノテーションをまとめてあります(相当するアノテーションがある場合のみ)。

  6. 8.1のWebサービスのビルドに使用していた古いbuild.xmlファイルを12.1.xの作業ディレクトリにコピーします。

  7. Ant build.xmlファイルを更新して、servicegenの代わりにjwsc Antタスクとその他のサポート・タスクが実行されるようにします。

    Antビルド・ファイルでbuild-serviceなどの新しいターゲットを作成し、前の手順で作成した新しいJWSファイルをコンパイルするjwsc Antタスク呼出しを追加することをお薦めします。このターゲットがいったん正常に機能すれば、古いservicegen Antタスクは削除できます。

    次に示す手順は、build.xmlファイルを更新する際の主な手順です。詳細な手順については、次で説明する標準の反復開発プロセスを参照してください:

    次の各手順の例については、「8.1と更新された12.1.xのAntビルド・ファイルの例(EJB実装の8.1のWebサービス)」を参照してください。

    1. jwsc taskdefをbuild.xmlファイルに追加します。

    2. build-serviceターゲットを作成し、この後の手順に従って12.1.xのWebサービスをビルドするのに必要なタスクを追加します。

    3. jwscタスクをビルド・ファイルに追加します。srdir属性にsrcディレクトリ(この例では/myExamples/upgrade_ejb/src)を設定し、destdir属性に前の手順で作成したエンタープライズ・アプリケーションのルート・ディレクトリを設定します。

      <jws>子要素のfile属性に、前の手順で作成した新しいJWSファイルの名前を指定します。

      12.1.x Webサービスに引き継ぐ8.1 Webサービスの機能によっては、jwscタスクに追加の属性を指定することが必要な場合もあります。8.1では、これらの機能の多くをservicegenの属性を使用して構成していました。「servicegen属性とJWSアノテーションまたはjwsc属性のマッピング」の表に、servicegenの属性を使用して有効にしていた機能に対応するjwsc属性があるかどうかを示しています。

  8. build-service Antターゲットを実行します。すべてのタスクを正しく完了すると、アップグレードされた12.1.xのWebサービスがエンタープライズ・アプリケーションに含まれます。

Webサービスのデプロイとテストの詳細は、『Oracle WebLogic Server JAX-RPC Webサービスの開発』のWebLogic Webサービスのデプロイとアンデプロイに関する項と、WebサービスのWSDLの参照に関する項を参照してください。

次の各項に示すサンプルJavaコードの場合、アップグレードされた12.1.xのWebサービスのWSDLを呼び出すURLは次のようになります。

http://host:port/upgradeEJB/HelloWorldService?WSDL
8.1のEJBファイルと対応する12.1.xのJWSファイルの例

次の3つの項に示すBean、ホームおよびリモートのクラスとインタフェースが8.1のステートレス・セッションEJB(つまり8.1のWebサービス)を実装していたものと仮定します。

「対応する12.1.xのJWSファイル」に、対応する12.1.xのJWSファイルを示します。8.1のクラスと12.1.xのクラスの相違点は太字で示してあります。一部のJWSアノテーションの値が、「8.1と更新された12.1.xのAntビルド・ファイルの例(EJB実装の8.1のWebサービス)」に示す8.1のservicegen Antタスクの属性から取得されている点に注意してください。

8.1 SessionBeanクラス
package examples.statelessSession;
import javax.ejb.CreateException;
 import javax.ejb.SessionBean;
 import javax.ejb.SessionContext;
/**
  * HelloWorldBean is a stateless session EJB.  It has a single method,
  * sayHello(), that takes an integer and a String and returns a String.
  * <p>
  * The sayHello() method is the public operation of the Web service based on
  * this EJB.
   */
public class HelloWorldBean81 implements SessionBean {
  private static final boolean VERBOSE = true;
   private SessionContext ctx;
  // You might also consider using WebLogic's log service
   private void log(String s) {
     if (VERBOSE) System.out.println(s);
   }
  /**
    *   Single EJB business method.
    */
   public String sayHello(int num, String s) {
    System.out.println("sayHello in the HelloWorld EJB has "+
       "been invoked with arguments " + s + " and " + num);
    String returnValue = "This message brought to you by the "+
       "letter "+s+" and the number "+num;
    return returnValue;
   }
  /**
    * This method is required by the EJB Specification,
    * but is not used by this example.
    *
    */
   public void ejbActivate() {
     log("ejbActivate called");
   }
  /**
    * This method is required by the EJB Specification,
    * but is not used by this example.
    *
    */
   public void ejbRemove() {
     log("ejbRemove called");
   }
  /**
    * This method is required by the EJB Specification,
    * but is not used by this example.
    *
    */
   public void ejbPassivate() {
     log("ejbPassivate called");
   }
  /**
    * Sets the session context.
    *
    * @param ctx SessionContext Context for session
    */
   public void setSessionContext(SessionContext ctx) {
     log("setSessionContext called");
     this.ctx = ctx;
   }
  /**
    * This method is required by the EJB Specification,
    * but is not used by this example.
    *
    */
   public void ejbCreate () throws CreateException {
     log("ejbCreate called");
   }
}
8.1 リモート・インタフェース
package examples.statelessSession;
import java.rmi.RemoteException;
 import javax.ejb.EJBObject;
/**
  * The methods in this interface are the public face of HelloWorld.
  * The signatures of the methods are identical to those of the EJBean, except
  * that these methods throw a java.rmi.RemoteException.
   */
public interface HelloWorld81 extends EJBObject {
  /**
    * Simply says hello from the EJB
    *
    * @param num               int number to return
    * @param s                 String string to return
    * @return                  String returnValue
    * @exception               RemoteException if there is
    *                          a communications or systems failure
    */
   String sayHello(int num, String s)
     throws RemoteException;
 }
8.1 EJBホーム・インタフェース
package examples.statelessSession;
import java.rmi.RemoteException;
 import javax.ejb.CreateException;
 import javax.ejb.EJBHome;
/**
  * This interface is the Home interface of the HelloWorld stateless session EJB.
  */
 public interface HelloWorldHome81 extends EJBHome {
  /**
    * This method corresponds to the ejbCreate method in the
    * HelloWorldBean81.java file.
    */
   HelloWorld81 create()
     throws CreateException, RemoteException;
}
対応する12.1.xのJWSファイル

8.1のファイルと12.1.xのファイルの相違点は太字で示してあります。一部のJWSアノテーションの値は、「8.1と更新された12.1.xのAntビルド・ファイルの例(EJB実装の8.1のWebサービス)」に示す8.1のservicegen Antタスクの属性から取得されています。

package examples.webservices.upgrade_ejb;
// Import the standard JWS annotations
import javax.jws.WebMethod;
 import javax.jws.WebService;
 import javax.jws.soap.SOAPBinding;
// Import the WebLogic specific annotation
import weblogic.jws.WLHttpTransport;
// Class-level annotations
@WebService(name="HelloWorld92PortType", serviceName="HelloWorldService",
             targetNamespace="http://example.org")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
              use=SOAPBinding.Use.LITERAL,
              parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
@WLHttpTransport(contextPath="upgradeEJB", serviceUri="HelloWorldService",
                  portName="HelloWorld92Port")
/**
  * HelloWorld92Impl is the JWS equivalent of the HelloWorld81 EJB that
  * implemented the 8.1 Web Service.  It has a single method,
  * sayHello(), that takes an integer and a String and returns a String.
  */
public class HelloWorld92Impl {
  /** the sayHello method will become the public operation of the Web
    *  Service.
    */
  @WebMethod()
   public String sayHello(int num, String s) {
    System.out.println("sayHello in the HelloWorld92 Web Service has "+
       "been invoked with arguments " + s + " and " + num);
    String returnValue = "This message brought to you by the "+
       "letter "+s+" and the number "+num;
    return returnValue;
  }
}
8.1と更新された12.1.xのAntビルド・ファイルの
例(EJB実装の8.1のWebサービス)

次の単純なbuild.xmlファイルでは、8.1でservicegen Antタスクを使用してEJB実装のWebLogic Webサービスをビルドする方法を示します。この例の後に、jwsc Antタスクを呼び出して12.1.xのWebサービスをビルドする場合の、対応するbuild.xmlファイルを示します。

<project name="ejb-webservice" default="all" basedir=".">
  <!-- set global properties for this build -->
   <property name="source" value="."/>
   <property name="build" value="${source}/build"/>
   <property name="ejb_file" value="HelloWorldWS.jar" />
   <property name="war_file" value="HelloWorldWS.war" />
   <property name="ear_file" value="HelloWorldApp.ear" />
   <property name="namespace" value="http://examples.org" />
  <target name="all" depends="clean,ear"/>
  <target name="clean">
     <delete dir="${build}"/>
   </target>
  <!-- example of old 8.1 servicegen call to build Web Service -->
  <target name="ejb">
     <delete dir="${build}" />
     <mkdir dir="${build}"/>
     <mkdir dir="${build}/META-INF"/>
     <copy todir="${build}/META-INF">
       <fileset dir="${source}">
         <include name="ejb-jar.xml"/>
       </fileset>
     </copy>
     <javac srcdir="${source}" includes="HelloWorld*.java" 
            destdir="${build}" />
     <jar jarfile="${ejb_file}" basedir="${build}" />
     <wlappc source="${ejb_file}" />
   </target>
 <target name="ear" depends="ejb">
    <servicegen
       destEar="${build}/${ear_file}"
       warName="${war_file}">
       <service
         ejbJar="${ejb_file}"
         targetNamespace="${namespace}"
         serviceName="HelloWorldService"
         serviceURI="/HelloWorldService"
         generateTypes="True"
         expandMethods="True">
       </service>
     </servicegen>
  </target>
</project>

これに対応するものとして、jwsc Antタスクを呼び出して12.1.xのWebサービスをビルドするbuild.xmlファイルを次に示します(この項で説明する該当タスクは太字で示してあります)。

<project name="webservices-upgrade_ejb" default="all">
  <!-- set global properties for this build -->
  <property name="wls.username" value="weblogic" />
   <property name="wls.password" value="weblogic" />
   <property name="wls.hostname" value="localhost" />
   <property name="wls.port" value="7001" />
   <property name="wls.server.name" value="myserver" />
  <property name="ear.deployed.name" value="upgradeEJB" />
   <property name="example-output" value="output" />
   <property name="ear-dir" value="${example-output}/upgradeEJB" />
  <taskdef name="jwsc"
     classname="weblogic.wsee.tools.anttasks.JwscTask" />
  <taskdef name="wldeploy"
     classname="weblogic.ant.taskdefs.management.WLDeploy"/>
  <target name="all" depends="clean,build-service,deploy" />
  <target name="clean" depends="undeploy">
     <delete dir="${example-output}"/>
   </target>
  <target name="build-service">
    <jwsc
       srcdir="src"
       destdir="${ear-dir}">
      <jws file="examples/webservices/upgrade_ejb/HelloWorld92Impl.java" />
    </jwsc>
  </target>
  <target name="deploy">
     <wldeploy action="deploy" name="${ear.deployed.name}"
       source="${ear-dir}" user="${wls.username}"
       password="${wls.password}" verbose="true"
       adminurl="t3://${wls.hostname}:${wls.port}"
       targets="${wls.server.name}" />
   </target>
  <target name="undeploy">
     <wldeploy action="undeploy" name="${ear.deployed.name}"
       failonerror="false"
       user="${wls.username}" password="${wls.password}" verbose="true"
       adminurl="t3://${wls.hostname}:${wls.port}"
       targets="${wls.server.name}" />
   </target>
</project>

servicegen属性とJWSアノテーションまたはjwsc属性のマッピング

次の表に、8.1のservicegen Antタスクの属性と、それに対応する12.1.xのJWSアノテーションまたはjwsc属性を示します。

最初の列には、メインのservicegen Antタスクの属性と、servicegenの4つの子要素(<service><client><handlerChain>、および<security>)の属性が混在しています。

12.1.xのJWSアノテーションとjwsc Antタスクの詳細は、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』JWSアノテーション・リファレンス「jwsc」を参照してください。

表4-1 servicegen属性とJWSアノテーションまたはjwsc属性のマッピング

servicegenまたはservicegenの子要素の属性 対応するJWSアノテーションまたはjwsc属性

contextURI

WebLogic固有の@WLHttpTransportアノテーションのcontextPath属性。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

destEAR

jwsc Antタスクのdestdir属性。

keepGenerated

jwsc AntタスクのkeepGenerated属性。

mergeWithExistingWS

対応する属性はありません。

overwrite

対応する属性はありません。

warName

jwsc Antタスクの<jws>子要素のname属性。

ejbJAR

(service子要素の属性)

jwsc Antタスクは、コンパイルされたEJBまたはJavaクラスからではなく、JWSファイルからWebサービス・アーティファクトを生成するため、直接的に対応するものはありません。

間接的に対応するのは、JWSファイルの名前を指定するjwsc Antタスクの<jws>子要素のfile属性。

excludeEJBs

(service子要素の属性)

対応する属性はありません。

expandMethods

(service子要素の属性)

対応する属性はありません。

generateTypes

(service子要素の属性)

対応する属性はありません。

ignoreAuthHeader

(service子要素の属性)

対応する属性はありません。

includeEJBs

(service子要素の属性)

対応する属性はありません。

javaClassComponents

(service子要素の属性)

jwsc Antタスクは、コンパイルされたEJBまたはJavaクラスからではなく、JWSファイルからWebサービス・アーティファクトを生成するため、直接的に対応するものはありません。

間接的に対応するのは、JWSファイルの名前を指定するjwsc Antタスクの<jws>子要素のfile属性。

JMSAction

(service子要素の属性)

JMS実装のWebサービスは12.1.xリリースではサポートされないため、対応するものはありません。

JMSConnectionFactory

(service子要素の属性)

JMS実装のWebサービスは12.1.xリリースではサポートされないため、対応するものはありません。

JMSDestination

(service子要素の属性)

JMS実装のWebサービスは12.1.xリリースではサポートされないため、対応するものはありません。

JMSDestinationType

(service子要素の属性)

JMS実装のWebサービスは12.1.xリリースではサポートされないため、対応するものはありません。

JMSMessageType

(service子要素の属性)

JMS実装のWebサービスは12.1.xリリースではサポートされないため、対応するものはありません。

JMSOperationName

(service子要素の属性)

JMS実装のWebサービスは12.1.xリリースではサポートされないため、対応するものはありません。

protocol

(service子要素の属性)

以下のいずれかのWebLogic固有アノテーション。

  • @WLHttpTransport

  • @WLJmsTransport

注意: これらはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

serviceName

(service子要素の属性)

標準の@WebServiceアノテーションのserviceName属性。

serviceURI

(service子要素の属性)

WebLogic固有の@WLHttpTransportまたは@WLJmsTransportアノテーションのserviceUri属性。

注意: これらはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

style

(service子要素の属性)

標準の@SOAPBindingアノテーションのstyle属性。

typeMappingFile

(service子要素の属性)

対応する属性はありません。

targetNamespace

(service子要素の属性)

標準の@WebServiceアノテーションのtargetNamespace属性。

userSOAP12

(service子要素の属性)

WebLogic固有の@weblogic.jws.Binding JWSアノテーションのvalue属性。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

clientJarName

(client子要素の属性)

対応する属性はありません。

packageName

(client子要素の属性)

直接的に対応する属性はありません。

クライアント・サイドJavaコードおよびアーティファクトを生成するには、clientgen AntタスクのpackageName属性を使用します。

saveWSDL

(client子要素の属性)

対応する属性はありません。

userServerTypes

(client子要素の属性)

対応する属性はありません。

handlers

(handlerChain子要素の属性)

標準の@HandlerChainまたは@SOAPMessageHandlersアノテーション。

name

(handlerChain子要素の属性)

標準の@HandlerChainまたは@SOAPMessageHandlersアノテーション。

duplicateElimination

(reliability子要素の属性)

直接的に対応する属性はありません。

Webサービスの信頼性のあるメッセージングのポリシー・アサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

『Oracle WebLogic Server JAX-RPC Webサービスの開発』のWebサービスの信頼性のあるメッセージングの使用に関する項を参照してください。

persistDuration

(reliability子要素の属性)

直接的に対応する属性はありません。

Webサービスの信頼性のあるメッセージングのポリシー・アサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

このリリースでは、対応する属性はJAX-RPC Webサービスに対してのみ有効です。『Oracle WebLogic Server JAX-RPC Webサービスの開発』のWebサービスの信頼性のあるメッセージングの使用に関する項を参照してください。

enablePasswordAuth

(security子要素の属性)

直接的に対応する属性はありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

encryptKeyName

(security子要素の属性)

直接的に対応する属性はありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

encryptKeyPass

(security子要素の属性)

直接的に対応する属性はありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

password

(security子要素の属性)

直接的に対応する属性はありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

『Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

signKeyName

(security子要素の属性)

直接的に対応する属性はありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

signKeyPass

(security子要素の属性)

直接的に対応する属性はありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

username

(security子要素の属性)

直接的に対応する属性はありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。


8.1のWebLogic WebサービスのWebLogic JAX-WSスタックへのアップグレード

この項では、WebLogic JAX-WSスタックを使用するように8.1 WebLogic Webサービスをアップグレードする方法を説明します。

WebLogic JAX-WSのランタイムは、JAX-WS (The Java API for XML-Based Web Services) 2.2仕様とWeb Services for Java EE v1.3 (JSR 109)仕様に基づいています。これらはWebサービスの定義にJava Web Service (JWS)ソース・ファイルで使用されるアノテーションを定義します。Antタスクが次に使用されてJWSがJavaクラスにコンパイルされ、すべての関連するアーティファクトが生成されます。Java Webサービス(JWS)は、JAX-WS Webサービスの中核部分です。

8.1 Webサービスのアップグレードには次の高レベル・タスクが含まれます。

  • WebサービスEJBの2.xから3.xへのアップグレード。

    JAX-WSはEJB 3.0および3.xをサポートします。EJB 2.xはサポートしません。

  • 8.1 Webサービス・クラスをJAX-WS JWSファイルとして書き換えて、8.x固有の機能を類似したJAX-WS機能にマッピングします。

    8.1 Webサービス機能とJAX-WS 12.1.x機能の間に1対1で対応するものはありません。

  • WebサービスをビルドするAntビルド・スクリプトを、8.1のservicegenタスクではなく12.1.xのWebLogic WebサービスAntタスクjwscを呼び出すように更新します。

  • JAX-WS clientgen Antタスクを使用して新規のJAX-WSクライアントを生成します。

JAX-WSのアップグレードに関する考慮事項

JAX-WSにアップグレードする前に、次の点を考慮してください。

  • JAX-WS仕様はdocument-literalおよびrpc-literal形式をサポートしていますが、rpc-encodedはサポートしていません。

  • SOAP配列はJAX-WSではサポートされません。

JAX-WSの詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』を参照してください。