第3章 アプリケーションの移行


3.1. ほとんどのアプリケーションで必要な変更

3.1.1. ほとんどのアプリケーションで必要な変更の確認

JBoss EAP 6 でのクラスローディングと設定の変更は、ほぼすべてのアプリケーションに影響します。JBoss EAP 6 は、新しい標準の移植可能な JNDI 命名構文も使用します。これらの変更はほとんどのアプリケーションに影響するため、アプリケーションを移行する際に最初に以下の情報を確認することが推奨されます。

3.1.2. クラスローディングの変更

3.1.2.1. クラスローディングの変更によるアプリケーションの更新

モジュラークラスローディングがJBoss EAP 6 で大きく変更になり、ほとんどすべてのアプリケーションに影響します。アプリケーションを移行する際には、最初に以下の情報を確認してください。
  1. まず、アプリケーションとその依存関係のパッケージ化を確認します。詳細は、 「クラスローディングの変更によるアプリケーション依存関係の更新」を参照してください。
  2. アプリケーションがロギングする場合は、正しいモジュール依存関係を指定する必要があります。詳細は、 「ロギング依存関係の変更」を参照してください。
  3. モジュラークラスローディングの変更により、EAR または WAR のパッケージ構造を変更しなければならない場合があります。詳細は、 「EAR と WAR のパッケージ化の変更」を参照してください。

3.1.2.2. モジュール依存関係について

概要

モジュールは、独自のクラスと、明示的または暗黙的な依存関係がある任意のモジュールのクラスにのみアクセスできます。

暗黙的な依存関係

サーバー内のデプロイヤーは、javax.apisun.jdk などの一般的に使用されているモジュールの依存関係を暗黙的に自動的に追加します。これにより、クラスが実行時にデプロイメントからアクセス可能になり、依存関係を明示的に追加するタスクから開発者を解放します。これらの暗黙的な依存関係が追加される方法とタイミングに関する詳細は、JBoss EAP 6 の 『Development Guide』 の『Class Loading and Modules』の章の『Implicit Module Dependencies』を参照してください(https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。

明示的な依存関係

他のクラスでは、モジュールを明示的に指定しないと、依存関係がないため、デプロイメントまたはランタイムエラーが発生します。依存関係がない場合、サーバーログに ClassNotFoundExceptions または NoClassDefFoundErrors トレースが記録されます。複数のモジュールが同じ JAR を読み込むか、またはモジュールが別のモジュールによって読み込まれたクラスを拡張するクラスを読み込む場合、サーバーログに ClassCastExceptions トレースが記録されます。依存関係を明示的に指定するには、MANIFEST.MF を変更するか、JBoss 固有のデプロイメント記述子ファイル jboss-deployment-structure.xml を作成します。モジュールの依存関係の詳細は、JBoss EAP 6 の『Development Guide』 の『Class Loading and Module』 の章の『Overview of Class Loading and Modules』を参照してください(https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。

3.1.2.3. クラスローディングの変更によるアプリケーション依存関係の更新

概要

JBoss EAP 6 でのクラスローディングは、これまでのバージョンの JBoss EAP とは大きく異なります。クラスローディングは JBoss Modules プロジェクトをベースにするようになりました。すべての JAR をフラットクラスパスに読み込む単一の階層構造クラスローダーではなく、各ライブラリーは、依存するモジュールにのみリンクするモジュールになります。JBoss EAP 6 のデプロイメントもモジュールであり、これらのクラスへの明示的な依存関係が定義されない限り、アプリケーションサーバーの JAR で定義されたクラスにアクセスできません。アプリケーションサーバーによって定義されるモジュール依存関係の一部が自動的に設定されます。たとえば、Java EE アプリケーションをデプロイする場合は、Java EE API の依存関係が自動的または暗黙的に追加されます。サーバーによって自動的に追加される依存関係の完全なリストについては、JBoss EAP 6 の 『Development Guide』 の『Class Loading and Modules』の章の『Implicit Module Dependencies』を参照してください(https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。

タスク

アプリケーションを JBoss EAP 6 に移行する場合は、モジュラークラスローディングの変更により、以下のタスクの 1 つまたは複数を実行しなければならない場合があります。

3.1.3. 設定ファイルの変更

3.1.3.1. JBoss EAP 6 でクラスローディングを制御するファイルの作成または変更

概要

モジュラークラスローディングを使用する JBoss EAP 6 の変更に伴い、1 つまたは複数のファイルを作成または編集して依存関係を追加したり、自動的な依存関係がロードされないようにする必要がある場合があります。クラスローディングとクラスローディングの優先順位に関する詳細は、JBoss EAP 6 の 『Development Guide』 の『Class Loading and Modules』の章を参照してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。

以下のファイルは、JBoss EAP 6 でのクラスローディングを制御するために使用されます。
jboss-web.xml
jboss-web.xml ファイルに <class-loading> 要素を定義した場合は、これを削除する必要があります。JBoss EAP 5 でこれが呼び出した動作が、JBoss EAP 6 ではデフォルトのクラスローディング動作であるため、これは不要になりました。この要素を削除しないと、サーバーログに ParseError および XMLStreamException が記録されます。
これは、コメントアウトされる jboss-web.xml ファイルの <class-loading> 要素の例です。
<!DOCTYPE jboss-web PUBLIC
    "-//JBoss//DTD Web Application 4.2//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
<jboss-web>  
<!-- 
    <class-loading java2ClassLoadingCompliance="false">
        <loader-repository>
            seam.jboss.org:loader=MyApplication
            <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
        </loader-repository>
    </class-loading>
 -->
 </jboss-web>

Copy to Clipboard Toggle word wrap
MANIFEST.MF
手動での編集
アプリケーションが使用するコンポーネントまたはモジュールによっては、このファイルに依存関係を 1 つまたは複数追加する必要がある場合があります。 Dependencies または Class-Path エントリーとして追加できます。
以下は、開発者により編集される MANIFEST.MF の例です。
Manifest-Version: 1.0
Dependencies: org.jboss.logmanager
Class-Path: OrderManagerEJB.jar

Copy to Clipboard Toggle word wrap
このファイルを変更する場合は、ファイルの最後に改行文字を含めるようにしてください。
Maven を使用した生成
Maven を使用する場合は、pom.xml ファイルを変更して MANIFEST.MF ファイルの依存関係を生成する必要があります。アプリケーションが EJB 3.0 を使用する場合は、pom.xml ファイルに以下のようなセクションがある可能性があります。
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ejb-plugin</artifactId>
    <configuration>
        <ejbVersion>3.0</ejbVersion>
    </configuration>
</plugin>
Copy to Clipboard Toggle word wrap
EJB 3.0 コードが org.apache.commons.log を使用する場合は、MANIFEST.MF ファイルにその依存関係が必要になります。その依存関係を生成するには、以下のように <plugin> 要素を pom.xml ファイルに追加します。
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ejb-plugin</artifactId>
    <configuration>
        <ejbVersion>3.0</ejbVersion>
        <archive>
            <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
        </archive>
    </configuration>
</plugin>
Copy to Clipboard Toggle word wrap
上記の例では、src/main/resources/META-INF/MANIFEST.MF ファイルには依存関係エントリーのみを含める必要があります。
Dependencies: org.apache.commons.logging
Copy to Clipboard Toggle word wrap
Maven は完全な MANIFEST.MF ファイルを生成します。
Manifest-Version: 1.0
Dependencies: org.apache.commons.logging
Copy to Clipboard Toggle word wrap
jboss-deployment-structure.xml
このファイルは、詳細な方法でクラスローディングを制御するために使用できる JBoss 固有のデプロイメント記述子です。MANIFEST.MF と同様に、このファイルを使用して依存関係を追加できます。また、自動依存関係が追加されなくなり、追加のモジュールを定義し、EAR デプロイメントの分離されたクラスローディング動作を変更し、さらにリソースルートをモジュールに追加することもできます。
以下は、JSF 1.2 モジュールの依存関係を追加し、JSF 2.0 モジュールの自動読み込みを阻止する jboss-deployment-structure.xml ファイルの例になります。
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
    <dependencies>
      <module name="javax.faces.api" slot="1.2" export="true"/>
      <module name="com.sun.jsf-impl" slot="1.2" export="true"/>
    </dependencies>
  </deployment>
  <sub-deployment name="jboss-seam-booking.war">
    <exclusions>
      <module name="javax.faces.api" slot="main"/>
      <module name="com.sun.jsf-impl" slot="main"/>
    </exclusions>
    <dependencies>
      <module name="javax.faces.api" slot="1.2"/>
      <module name="com.sun.jsf-impl" slot="1.2"/>
    </dependencies>
  </sub-deployment>
</jboss-deployment-structure>
Copy to Clipboard Toggle word wrap
このファイルの詳細は、 「jboss-deployment-structure.xml」 を参照してください。
application.xml
これまでのバージョンの JBoss EAP では、jboss-app.xml ファイルを使用して EAR 内のデプロイメントの順序を制御していました。これは当てはまらなくなりました。Java EE6 仕様は、application.xml<initialize-in-order> 要素を提供し、EAR 内の Java EE モジュールがデプロイされる順序を制御することができます。
多くの場合、デプロイメント順序を指定する必要はありません。アプリケーションが依存関係注入とリソース参照を使用して外部モジュールのコンポーネントを参照する場合、アプリケーションサーバーは正しく最適なコンポーネントの順序決定方法を暗黙的に決定できるため、多くの場合<initialize-in-order> 要素は必要ありません。
myApp.ear 内にパッケージ化された myBeans.jarmyApp.war が含まれるアプリケーションがあるとします。myApp.war のサーブレットは @EJB アノテーションを使用して、myBeans.jar から Bean を注入します。この場合、アプリケーションサーバーは、サーブレットが起動される前に EJB コンポーネントが利用可能であることを把握し、<initialize-in-order> 要素を使用する必要はありません。
ただし、そのサーブレットが以下のようなレガシー JNDI ルックアップスタイルのリモート参照を使用して Bean にアクセスする場合は、モジュールの順序を指定する必要がある場合があります。
init() {
  Context ctx = new InitialContext();
  ctx.lookup("TheBeanInMyBeansModule");
}
Copy to Clipboard Toggle word wrap
この場合、サーバーは EJB コンポーネントが myBeans.jar にあることを判断できず、myBeans.jar のコンポーネントが myApp.war のコンポーネントよりも先に初期化および起動されるように強制する必要があります。これには、<initialize-in-order> 要素を true に設定し、application.xml ファイルで myBeans.jar モジュールおよび myApp.war モジュールの順序を指定します。
以下は、<initialize-in-order> 要素を使用してデプロイメントの順序を制御する例です。myBeans.jarmyApp.war ファイルよりも先にデプロイされます。
<application xmlns="http://java.sun.com/xml/ns/javaee" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
             http://java.sun.com/xml/ns/javaee/application_6.xsd">
    <application-name>myApp</application-name>
    <initialize-in-order>true</initialize-in-order>
    <module>
        <ejb>myBeans.jar</ejb>
    </module>
    <module>
        <web>
            <web-uri>myApp.war</web-uri>
            <context-root>myApp</context-root>
        </web>
    </module>
</application>
Copy to Clipboard Toggle word wrap
application.xml ファイルのスキーマについては、http://java.sun.com/xml/ns/javaee/application_6.xsdを参照してください。
注記
<initialize-in-order> 要素を true に設定すると、デプロイメントが遅くなることに注意してください。デプロイメントの最適化に関してコンテナーの柔軟性を高めることができるため、依存関係の注入やリソース参照を使用して適切な依存関係を定義することが推奨されます。
jboss-ejb3.xml
jboss-ejb3.xml デプロイメント記述子は jboss.xml デプロイメント記述子に置き換わり、Java Enterprise Edition (EE)で定義された ejb-jar.xml デプロイメント記述子によって提供された機能をオーバーライドおよび追加します。新しいファイルは jboss.xml と互換性がなく、デプロイメントで jboss.xml は無視されるようになりました。
login-config.xml
login-config.xml ファイルはセキュリティー設定に使用されなくなりました。セキュリティーはサーバー設定ファイルの <security-domain> 要素に設定されるようになりました。スタンドアロンサーバーの場合、これは standalone/configuration/standalone.xml ファイルになります。管理対象ドメインでサーバーを実行している場合は、domain/configuration/domain.xml ファイルになります。

3.1.3.2. jboss-deployment-structure.xml

jboss-deployment-structure.xml は JBoss EAP 6 の新しい任意のデプロイメント記述子です。このデプロイメント記述子を使用すると、デプロイメントでクラスローディングを制御できます。
このデプロイメント記述子の XML スキーマは EAP_HOME/docs/schema/jboss-deployment-structure-1_2.xsd にあります。

3.1.3.3. 新しいモジュラークラスローティングシステムのパッケージリソース

概要

以前のバージョンの JBoss EAP では、WEB-INF/ ディレクトリー内のすべてのリソースが WAR クラスパスに追加されました。JBoss EAP 6 では、Web アプリケーションのアーティファクトのみが WEB-INF/classes および WEB-INF/lib ディレクトリーから読み込まれます。指定された場所にアプリケーションのアーティファクトをパッケージ化できないと、ClassNotFoundExceptionNoClassDefError、またはその他のランタイムエラーが発生する可能性があります。

これらのクラスローディングエラーを解決するには、アプリケーションアーカイブの構造を変更するか、カスタムモジュールを定義する必要があります。

リソースのパッケージの変更
アプリケーションだけがリソースを利用できるようにするには、プロパティーファイル、JAR、または他のアーティファクトを WEB-INF/classes/ または WEB-INF/lib/ ディレクトリーに移動し、それらをWAR でバンドル化する必要があります。このアプローチの詳細は、 「ResourceBundle プロパティーの場所の変更」 を参照してください。
カスタムモジュールの作成
JBoss EAP 6 サーバーで実行しているすべてのアプリケーションでカスタムリソースを使用できるようにするには、カスタムモジュールを作成する必要があります。このアプローチの詳細は、 「カスタムモジュールの作成」 を参照してください。

3.1.3.4. ResourceBundle プロパティーの場所の変更

概要

これまでのバージョンの JBoss EAP では、EAP_HOME/server/SERVER_NAME/conf/ ディレクトリーがクラスパスにあり、アプリケーションで利用できていました。JBoss EAP 6 のアプリケーションのクラスパスでプロパティーを使用できるようにするには、アプリケーション内にプロパティーをパッケージ化する必要があります。

手順3.1 ResourceBundle プロパティーの場所の変更

  1. WAR アーカイブをデプロイする場合は、これらのプロパティーを WAR の WEB-INF/classes/ フォルダーにパッケージ化する必要があります。
  2. これらのプロパティーを EAR のすべてのコンポーネントで利用できるようにしたい場合は、JAR のルートにパッケージ化してから JAR を EAR の lib/ フォルダーに配置する必要があります。

3.1.3.5. カスタムモジュールの作成

次の手順では、JBoss EAP サーバー上で実行されているすべてのアプリケーションがプロパティーファイルやその他のリソースを使用できるようにするために、カスタムモジュールを作成する方法について説明します。

手順3.2 カスタムモジュールの作成

  1. module/ ディレクトリー構造を作成し、反映させます。
    1. EAP_HOME/module ディレクトリーにディレクトリー構造を作成し、ファイルと JAR が含まれるようにします。以下に例を示します。
      $ cd EAP_HOME/modules/ 
      $ mkdir -p myorg-conf/main/properties
      Copy to Clipboard Toggle word wrap
    2. プロパティーファイルを、前のステップで作成した EAP_HOME/modules/myorg-conf/main/properties/ ディレクトリーに移動します。
    3. EAP_HOME/modules/myorg-conf/main/ ディレクトリーに、以下の XML が含まれる module.xml ファイルを作成します。
      <module xmlns="urn:jboss:module:1.1" name="myorg-conf">
          <resources>
              <resource-root path="properties"/>
          </resources>
      </module>
      Copy to Clipboard Toggle word wrap
  2. サーバー設定ファイルの ee サブシステムを変更します。管理 CLI を使用するか、ファイルを手動で編集できます。
    • 管理 CLI を使用してサーバー設定ファイルを変更するには、以下の手順に従います。
      1. サーバーを起動し、管理 CLI へ接続します。
        • Linux の場合は、コマンドラインで以下を入力します。
           EAP_HOME/bin/jboss-cli.sh --connect
          Copy to Clipboard Toggle word wrap
        • Windows の場合は、コマンドラインで以下を入力します。
          C:\>EAP_HOME\bin\jboss-cli.bat --connect
          Copy to Clipboard Toggle word wrap
        次の応答が表示されるはずです。
        Connected to standalone controller at localhost:9999
        Copy to Clipboard Toggle word wrap
      2. ee サブシステムで myorg-conf <global-modules> 要素を作成するには、コマンドラインで以下を入力します。
        /subsystem=ee:write-attribute(name=global-modules, value=[{"name"=>"myorg-conf","slot"=>"main"}])
        Copy to Clipboard Toggle word wrap
        以下の結果が表示されるはずです。
        {"outcome" => "success"}
        Copy to Clipboard Toggle word wrap
    • サーバー設定ファイルを手作業で編集する場合は、次の手順に従ってください。
      1. サーバーを停止し、サーバー設定ファイルをテキストエディターで開きます。スタンドアロンサーバーを実行している場合は、これは EAP_HOME/standalone/configuration/standalone.xml ファイルで、管理対象ドメインを実行している場合は EAP_HOME/domain/configuration/domain.xml ファイルになります。
      2. ee サブシステムを見つけ、myorg-conf のグローバルモジュールを追加します。以下は、myorg-conf 要素が含まれるように変更された ee サブシステム要素の例になります。

        例3.1 myorg-conf 要素

        <subsystem xmlns="urn:jboss:domain:ee:1.0" >            
            <global-modules>
                <module name="myorg-conf" slot="main" />            
            </global-modules>
        </subsystem>
        Copy to Clipboard Toggle word wrap
  3. my.properties という名前のファイルを正しいモジュールの場所にコピーした場合は、以下のようなコードを使用してプロパティーファイルをロードできるようになります。

    例3.2 プロパティーファイルの読み込み

    Thread.currentThread().getContextClassLoader().getResource("my.properties");
    Copy to Clipboard Toggle word wrap

3.1.4. ロギングの変更

3.1.4.1. ロギング依存関係の変更

概要

JBoss LogManager はすべてのロギングフレームワークのフロントエンドをサポートするため、現在のロギングコードを維持したり、新しい JBoss ロギングインフラストラクチャーに移行したりできます。意思決定に関係なく、モジュラークラスローディングの変更により、アプリケーションを変更して必要な依存関係を追加する必要があります。

3.1.4.2. サードパーティーロギングフレームワーク用のアプリケーションコードの更新

概要

JBoss EAP 6 では、Apache Commons Logging、Apache log4j、SLF4J、Java Logging などの一般的なサードパーティーフレームワークのロギング依存関係がデフォルトで追加されます。ほとんどの場合、JBoss EAP コンテナーによって提供されるロギングフレームワークを使用することが推奨されます。ただし、サードパーティーフレームワークが提供する特定の機能が必要な場合は、デプロイメントから対応する JBoss EAP モジュールを除外する必要があります。デプロイメントでサードパーティーのロギングフレームワークが使用されますが、サーバーログは JBoss EAP ロギングサブシステム設定を引き続き使用します。

以下の手順は、デプロイメントから JBoss EAP 6 の org.apache.log4j モジュールを除外する方法を示しています。最初の手順は、JBoss EAP 6 の任意のリリースで機能します。2 つ目の手順は、JBoss EAP 6.3 以降にのみ適用されます。

手順3.4 log4j.properties または log4j.xml ファイルを使用する JBoss EAP 6 を設定

この手順は、すべてのバージョンの JBoss EAP 6 で機能します。
注記
このメソッドは log4j 設定ファイルを使用するため、実行時に log4j ロギング設定を変更できる必要はなくなりました。
  1. 以下の内容で jboss-deployment-structure.xml を作成します。
    <jboss-deployment-structure>
        <deployment>
            <!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
            <exclusions>
                <module name="org.apache.log4j" />
            </exclusions>
        </deployment>
    </jboss-deployment-structure>
    
    Copy to Clipboard Toggle word wrap
  2. WAR をデプロイする場合は META-INF/ ディレクトリーまたは WEB-INF/ ディレクトリーに、EAR をデプロイする場合は META-INF/ ディレクトリーに、それぞれ jboss-deployment-structure.xml ファイルを配置します。デプロイメントに依存する子デプロイメントが含まれる場合は、それぞれのサブデプロイメントについてもモジュールを除外する必要があります。
  3. EAR の lib/ ディレクトリーまたは WAR デプロイメントの WEB-INF/classes/ ディレクトリーに、それぞれ log4j.properties または log4j.xml ファイルを追加します。WAR の lib/ ディレクトリーにファイルを配置する場合は、jboss-deployment-structure.xml ファイルに <resource-root> パスを指定する必要があります。
    <jboss-deployment-structure>
        <deployment>
            <!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
            <exclusions>
                <module name="org.apache.log4j" />
            </exclusions>
            <resources>
                <resource-root path="lib" />
            </resources>
        </deployment>
    </jboss-deployment-structure>
    
    Copy to Clipboard Toggle word wrap
  4. 以下のランタイム引数を使用して JBoss EAP 6 サーバーを起動します。これにより、アプリケーションのデプロイメント時に ClassCastException がコンソールに表示されなくなります。
    -Dorg.jboss.as.logging.per-deployment=false
    Copy to Clipboard Toggle word wrap
  5. アプリケーションをデプロイします。

手順3.5 JBoss EAP 6.3 以降のロギング依存関係の設定

JBoss EAP 6.3 以降では、新しい add-logging-api-dependencies ロギングシステムプロパティーを使用して、サードパーティーのロギングフレームワークの依存関係を除外できます。以下の手順は、JBoss EAP スタンドアロンサーバーでこのロギング属性を変更する方法を示しています。
  1. 以下のランタイム引数を使用して JBoss EAP 6 サーバーを起動します。これにより、アプリケーションのデプロイメント時に ClassCastException がコンソールに表示されなくなります。
    -Dorg.jboss.as.logging.per-deployment=false
    Copy to Clipboard Toggle word wrap
  2. ターミナルを開き、管理 CLI に接続します。
    • Linux の場合は、コマンドラインで以下を入力します。
      $ EAP_HOME/bin/jboss-cli.sh --connect
      
      Copy to Clipboard Toggle word wrap
    • Windows の場合は、コマンドラインで以下を入力します。
      C:\>EAP_HOME\bin\jboss-cli.bat --connect
      
      Copy to Clipboard Toggle word wrap
  3. logging サブシステムの add-logging-api-dependencies 属性を変更します。
    この属性は、コンテナーが暗黙的なロギング API 依存関係をデプロイメントに追加するかどうかを制御します。
    • デフォルトの true に設定すると、暗黙的なロギング API 依存関係がすべて追加されます。
    • false に設定すると、依存関係はデプロイメントに追加されません。
    サードパーティーのロギングフレームワークの依存関係を除外するには、以下のコマンドを使用してこの属性を false に設定する必要があります。
    /subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
    Copy to Clipboard Toggle word wrap
    このコマンドは、<add-logging-api-dependencies> 要素を standalone.xml 設定ファイルの logging サブシステムに追加します。
    <subsystem xmlns="urn:jboss:domain:logging:1.4">
        <add-logging-api-dependencies value="false"/>
        ....
    </subsystem>
    
    Copy to Clipboard Toggle word wrap
  4. アプリケーションをデプロイします。

3.1.4.3. 新しい JBoss ロギングフレームワークを使用するためのコード変更

概要

新しいフレームワークを使用するには、以下の手順のようにインポートとコードを変更します。

手順3.6 JBoss ロギングフレームワークを使用するためのコードと依存関係の変更

  1. インポートとロギングコードを変更します。
    新しい JBoss ロギングフレームワークを使用するコードの例を以下に示します。
    import org.jboss.logging.Level;
    import org.jboss.logging.Logger;
    
    private static final Logger logger = Logger.getLogger(MyClass.class.toString());
    
    if(logger.isTraceEnabled()) {
        logger.tracef("Starting...", subsystem);
    }
    
    Copy to Clipboard Toggle word wrap
  2. ロギング依存関係を追加します。
    JBoss Logging クラスが含まれる JAR は、org.jboss.logging という名前のモジュールにあります。MANIFEST-MF ファイルは以下のようになるはずです。
    Manifest-Version: 1.0
    Dependencies: org.jboss.logging
    
    Copy to Clipboard Toggle word wrap

3.1.5. アプリケーションのパッケージ化の変更

3.1.5.1. EAR と WAR のパッケージ化の変更

概要

アプリケーションを移行する場合、モジュラークラスローディングへの変更が原因で EAR または WAR のパッケージ構造を変更しなければならない場合があります。モジュール依存関係は、以下の特定の順序で読み込まれます。

  1. システムの依存関係
  2. ユーザーの依存関係
  3. ローカルリソース
  4. デプロイメント間の依存関係

手順3.7 アーカイブパッケージの変更

  1. WAR をパッケージ化します。
    WAR は 1 つのモジュールで、WAR のすべてのクラスは、同じクラスローダーで読み込まれます。つまり、WEB-INF/lib ディレクトリーにパッケージ化されたクラスは WEB-INF/classes ディレクトリーにあるクラスと同じように処理されます。
  2. EAR をパッケージ化します。
    EAR は複数のモジュールで構成されます。EAR/lib/ ディレクトリーは単一のモジュールで、EAR 内のすべての WAR または EJB jar サブデプロイメントは個別のモジュールです。明示的な依存関係が定義されない限り、クラスは EAR 内の他のモジュールのクラスにアクセスできません。サブデプロイメントは、EAR/lib/ ディレクトリーのクラスへのアクセスを提供する親モジュールの自動的な依存関係を常に持ちます。ただし、サブデプロイメントには相互のアクセスを許可する自動依存関係が常にあるわけではありません。この動作は、以下のように ee サブシステム設定の <ear-subdeployments-isolated> 要素を設定することで制御されます。
    <subsystem xmlns="urn:jboss:domain:ee:1.0" >            
      <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
    </subsystem>
    Copy to Clipboard Toggle word wrap
    デフォルトでは false に設定され、サブデプロイメントは EAR 内の他のサブデプロイメントに属するクラスを参照できます。
    クラスローディングに関する詳細は、JBoss EAP 6 の 『Development Guide』 の『Class Loading and Modules』の章を参照してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。

3.1.5.2. ルートコンテキストの優先順位の変更

JBoss EAP 5 では、jboss-web.xml WAR ファイルで定義された <context-root> 要素が application.xml EAR ファイルで定義された <context-root> 要素よりも優先されます。
JBoss EAP 6 では、逆です。application.xml EAR ファイルで定義された <context-root> 要素は、jboss-web.xml WAR ファイルで定義された <context-root> 要素よりも優先されます。WAR ファイルが EAR アーカイブ内にデプロイされている場合、application.xml ファイルに <context-root> 要素を定義します。

3.1.6. データソースおよびリソースアダプター設定の変更

3.1.6.1. 設定変更によるアプリケーションの更新

JBoss EAP 5 では、サービスおよびサブシステムは多くの異なるファイルで設定されていました。JBoss EAP 6 では、主に 1 つのファイルで設定が実行されるようになりました。アプリケーションが以下のリソースまたはサービスのいずれかを使用する場合、設定の変更が必要になる場合があります。
  1. アプリケーションがデータソースを使用する場合は、 「DataSource設定の更新」 を参照してください。
  2. アプリケーションが JPA を使用し、現在 Hibernate JAR をバンドルしている場合は、移行オプションについて 「Hibernate または JPA のデータソースの設定」 を参照してください。
  3. アプリケーションがリソースアダプターを使用する場合は、 「リソースアダプター設定の更新」 を参照してください。
  4. 基本的なセキュリティーの変更の設定方法に関する情報は、 「アプリケーションセキュリティーの変更の設定」 を参照してください。

3.1.6.2. DataSource設定の更新

概要

これまでのバージョンの JBoss EAP では、JCA DataSource 設定は *-ds.xml のサフィックスのファイルで定義されていました。その後、このファイルはサーバーの deploy/ ディレクトリーにデプロイされるか、アプリケーションとともにパッケージ化されます。JDBC ドライバーは server/lib/ ディレクトリーにコピーされるか、アプリケーションの WEB-INF/lib/ ディレクトリーにパッケージ化されます。DataSource のこの設定方法は開発用に引き続きサポートされますが、JBoss の管理ツールではサポートされないため、本番環境では推奨されません。

JBoss EAP 6 では、DataSource はサーバー設定ファイルで設定されます。JBoss EAP 6 インスタンスが管理対象ドメインで実行されている場合、DataSource は domain/configuration/domain.xml ファイルで設定されます。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、DataSource は standalone/configuration/standalone.xml ファイルで設定されます。このように設定されたDataSourceは、Web 管理コンソールやコマンドラインインターフェース(CLI)などの JBoss 管理インターフェイスを使用して管理および制御できます。これらのツールにより、デプロイメントの管理や、管理対象ドメインで実行されている複数のサーバーの設定が容易になります。
次のセクションでは、利用可能な管理ツールで管理しサポートできるように、DataSource 設定を変更する方法を説明します。

JBoss EAP 6 の管理可能な DataSource 設定への移行

JDBC 4.0 準拠のドライバーは、デプロイメントまたはコアモジュールとしてインストールできます。JDBC 4.0 に準拠するドライバーには、ドライバークラス名を指定する META-INF/services/java.sql.Driver ファイルが含まれます。JDBC 4.0 に準拠していないドライバーには、追加の手順が必要です。ドライバーを JDBC 4.0 準拠にする方法や、現在の DataSource 設定を Web 管理コンソールおよび CLI で管理できる設定に更新する方法は、 「JDBC ドライバーのインストールおよび設定」 を参照してください。

アプリケーションが Hibernate または JPA を使用する場合は、追加の変更が必要になる場合があります。詳細は、 「Hibernate または JPA のデータソースの設定」 を参照してください。

IronJacamar 移行ツールを使用した設定データの変換

IronJacamar ツールを使用して DataSource および ResourceAdapter 設定を移行できます。このツールは、*-ds.xml スタイルの設定ファイルを JBoss EAP 6 で想定される形式に変換します。詳細は、 「IronJacamar Tool を使用したデータソースおよびリソースアダプター設定の移行」 を参照してください。

リモートDataSourceルックアップを実行するコードの移行

以前のバージョンの JBoss EAP では、DataSource オブジェクトの JNDI リモートルックアップを実行できますが、以下の理由により推奨されません。

  • サーバーリソースのクライアント制御は信頼性がなく、クライアントがクラッシュしたり、サーバーへの接続を失うと接続が漏洩する可能性があります。
  • すべてのデータベース操作が MBean を介してプロキシーされるため、パフォーマンスは非常に遅くなります。
  • トランザクションの伝播はサポートされていません。

この機能は JBoss EAP 6 から削除されたため、アプリケーションの移行時に NotSerializableException が表示されることがあります。推奨される方法は、EJB を作成してDataSource にアクセスし、EJB をリモートで呼び出すことです。詳細は、本ガイドの「『リモート呼び出しの変更』」を参照してください。詳細は、JBoss EAP 6の 『Development Guide』 を参照してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。

3.1.6.3. JDBC ドライバーのインストールおよび設定

概要

JDBC ドライバーは、以下の 2 つの方法のいずれかでコンテナーにインストールできます。

  • デプロイメントとして
  • コアモジュールとして
各アプローチの長所とデメリットを以下に示します。

JBoss EAP 6 では、データソースはサーバー設定ファイルで設定されます。JBoss EAP 6 インスタンスが管理対象ドメインで稼働している場合、データソースは domain/configuration/domain.xml ファイルで設定されます。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、データソースは standalone/configuration/standalone.xml ファイルで設定されます。両方のモードで同じであるスキーマ参照情報は、JBoss EAP 6 のインストールの docs/schema/ ディレクトリーにあります。ここでは、サーバーがスタンドアロンサーバーとして実行され、データソースが standalone.xml ファイルで設定されることを前提とします。

手順3.8 JDBC ドライバーのインストールおよび設定

  1. JDBC ドライバーをインストールします。
    1. JDBC ドライバーをデプロイメントとしてインストールします。
      これが、ドライバーをインストールするのに推奨される方法です。JDBC ドライバーがデプロイメントとしてインストールされると、通常の JAR としてデプロイされます。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、JDBC 4.0 準拠の JAR を EAP_HOME/standalone/deployments/ ディレクトリーにコピーします。管理対象ドメインでは、管理コンソールまたは管理 CLI を使用して JAR をサーバーグループにデプロイする必要があります。
      以下は、デプロイメントとしてスタンドアロンサーバーにインストールされた MySQL JDBC ドライバーの例です。
      $cp mysql-connector-java-5.1.15.jar EAP_HOME/standalone/deployments/
      Copy to Clipboard Toggle word wrap
      JDBC 4.0 準拠のドライバーは自動的に認識され、名前とバージョンでシステムにインストールされます。JDBC 4.0 準拠の JAR には、ドライバークラス名を指定する META-INF/services/java.sql.Driver という名前のテキストファイルが含まれます。ドライバーが JDBC 4.0 に準拠していない場合には、以下のいずれかの方法でデプロイ可能にすることができます。
      • java.sql.Driver ファイルを作成し、META-INF/services/ パスの下にある JAR に追加します。このファイルにはドライバークラス名が含まれている必要があります。以下に例を示します。
        com.mysql.jdbc.Driver
        Copy to Clipboard Toggle word wrap
      • デプロイメントディレクトリーに java.sql.Driver ファイルを作成します。スタンドアロンサーバーとして実行されている JBoss EAP 6 インスタンスの場合は、ファイルを EAP_HOME/standalone/deployments/META-INF/services/java.sql.Driver に配置する必要があります。サーバーが管理対象ドメインにある場合は、管理コンソールまたは管理 CLI を使用してファイルをデプロイする必要があります。
      このアプローチの利点は以下のとおりです。
      • モジュールを定義する必要がないため、これが最も簡単な方法です。
      • 管理対象ドメインでサーバーを実行している場合は、このアプローチを使用するデプロイメントは、ドメイン内のすべてのサーバーに自動的に伝播されます。これは、管理者がドライバー JAR を手動で配布する必要がないことを意味します。
      このアプローチの短所は以下のとおりです。
      • JDBC ドライバーが複数の JAR(ドライバー JAR および依存ライセンス JAR、またはローカリゼーション JAR など)で構成される場合、ドライバーをデプロイメントとしてインストールすることはできません。JDBC ドライバーをコアモジュールとしてインストールする必要があります。
      • ドライバーが JDBC 4.0 に準拠していない場合、ドライバークラス名が含まれるファイルを作成し、JARにインポートするか、deployments/ ディレクトリーにオーバーレイする必要があります。
    2. JDBC ドライバーをコアモジュールとしてインストールします。
      JDBC ドライバーをコアモジュールとしてインストールするには、EAP_HOME/modules/ ディレクトリーにファイルパス構造を作成する必要があります。この構造には、JDBC ドライバー JAR、追加のベンダーライセンスまたはローカリゼーション JAR、およびモジュールを定義する module.xml ファイルが含まれます。
      • コアモジュールとしてのMySQL JDBC ドライバーのインストール
        1. ディレクトリー構造 EAP_HOME/modules/com/mysql/main/を作成します。
        2. main/ サブディレクトリーで、MySQL JDBC ドライバーの以下のモジュール定義が含まれる module.xml ファイルを作成します。
          <?xml version="1.0" encoding="UTF-8"?>
          <module xmlns="urn:jboss:module:1.0" name="com.mysql">
          <resources>
              <resource-root path="mysql-connector-java-5.1.15.jar"/>
          </resources>
          <dependencies>
              <module name="javax.api"/>
          </dependencies>
          </module>
          
          
          Copy to Clipboard Toggle word wrap
          モジュール名 "com.mysql" は、このモジュールのディレクトリー構造と一致します。<dependencies> 要素は、このモジュールの依存関係を他のモジュールに指定するために使用されます。この場合、すべての JDBC データソースの場合と同様に、javax.api という名前の別のモジュールで定義される Java JDBC API に依存します。このモジュールは modules/system/layers/base/javax/api/main/ ディレクトリーにあります。
          注記
          module.xml ファイルの先頭にスペースがないことを確認します。そうでないと、このドライバーの「New missing/unsatisfied dependencies」エラーが表示されます。
        3. MySQL JDBC ドライバー JAR を EAP_HOME/modules/com/mysql/main/ ディレクトリーにコピーします。
          $ cp mysql-connector-java-5.1.15.jar EAP_HOME/modules/com/mysql/main/
          Copy to Clipboard Toggle word wrap
      • IBM DB2 JDBC ドライバーおよびライセンス JAR をコアモジュールとしてインストールします。
        この例は、JDBC ドライバー JAR に加えて JAR を必要とするドライバーをデプロイする方法を説明するためにのみ提供されています。
        1. ディレクトリー構造 EAP_HOME/modules/com/ibm/db2/main/ を作成します。
        2. main/ サブディレクトリーで、IBM DB2 JDBC ドライバーおよびライセンスの以下のモジュール定義が含まれる module.xml ファイルを作成します。
          <?xml version="1.0" encoding="UTF-8"?>
          <module xmlns="urn:jboss:module:1.1" name="com.ibm.db2">
            <resources>
              <resource-root path="db2jcc.jar"/>
              <resource-root path="db2jcc_license_cisuz.jar"/>
            </resources>
            <dependencies>
              <module name="javax.api"/>
              <module name="javax.transaction.api"/>
            </dependencies>
          </module>
          
          Copy to Clipboard Toggle word wrap
          注記
          module.xml ファイルの先頭にスペースがないことを確認します。そうでないと、このドライバーの「New missing/unsatisfied dependencies」エラーが表示されます。
        3. JDBC ドライバーおよびライセンス JAR を EAP_HOME/modules/com/ibm/db2/main/ ディレクトリーにコピーします。
          $ cp db2jcc.jar EAP_HOME/modules/com/ibm/db2/main/
          $ cp db2jcc_license_cisuz.jar EAP_HOME/modules/com/ibm/db2/main/
          Copy to Clipboard Toggle word wrap
      このアプローチの利点は以下のとおりです。
      • これは、JDBC ドライバーが複数の JAR で構成される場合に機能する唯一の方法です。
      • この方法では、JDBC 4.0 に準拠していないドライバーを、ドライバー JAR を変更したり、ファイルオーバーレイを作成したりせずにインストールできます。
      このアプローチの短所は以下のとおりです。
      • モジュールの設定がより困難です。
      • モジュールは、管理対象ドメインで実行されているすべてのサーバーに手動でコピーする必要があります。
  2. データソースを設定します。
    1. データベースドライバーを追加します。
      同じファイルの <drivers> 要素に <driver> 要素を追加します。ここでも、これには *-ds.xml ファイルで以前に定義された同じデータソース情報が含まれます。
      まず、ドライバー JAR が JDBC 4.0 に準拠しているかどうかを判断します。JDBC 4.0 に準拠するJARには、ドライバークラス名を指定する META-INF/services/java.sql.Driver ファイルが含まれます。サーバーはこのファイルを使用して JAR のドライバークラスの名前を探します。JDBC 4.0 に準拠するドライバーは、JAR ですでに指定されているため、<driver-class> 要素は必要ありません。以下は、JDBC 4.0 準拠の MySQL ドライバーのドライバー要素の例です。
      <driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"/>
      
      Copy to Clipboard Toggle word wrap
      JDBC 4.0 に準拠していないドライバーでは、ドライバークラス名を指定する META-INF/services/java.sql.Driver ファイルがないため、ドライバークラスを識別する <driver-class> 属性が必要です。以下は、JDBC 4.0 に準拠していないドライバーのドライバー要素の例です。
      <driver name="mysql-connector-java-5.1.15.jar" module="com.mysql">
      <driver-class>com.mysql.jdbc.Driver</driver-class></driver>
      
      Copy to Clipboard Toggle word wrap
    2. データソースを作成します。
      standalone.xml ファイルの <datasources> セクションに <datasource> 要素を作成します。このファイルには、*-ds.xml ファイルで以前に定義された同じデータソース情報の多くが含まれます。
      重要
      サーバーの再起動後に変更が維持されるようにするには、サーバーを停止してからサーバー設定ファイルを編集する必要があります。
      以下は、standalone.xml ファイルの MySQL データソース要素の例になります。
      <datasource jndi-name="java:/YourDatasourceName" pool-name="YourDatasourceName">
        <connection-url>jdbc:mysql://localhost:3306/YourApplicationURL</connection-url>
        <driver>mysql-connector-java-5.1.15.jar</driver>
        <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
        <pool>
          <min-pool-size>100</min-pool-size>
          <max-pool-size>200</max-pool-size>
        </pool>
        <security>
          <user-name>USERID</user-name>
          <password>PASSWORD</password>
        </security>
        <statement>
          <prepared-statement-cache-size>100</prepared-statement-cache-size>
          <share-prepared-statements/>
        </statement>
      </datasource>
      
      Copy to Clipboard Toggle word wrap
  3. アプリケーションコードの JNDI 参照を更新します。
    定義した新しい JNDI 標準データソース名を使用するには、アプリケーションのソースコードの古い JNDI ルックアップ名を置き換える必要があります。詳細は、 「新しい JNDI 名前空間ルールに従うようにアプリケーションを変更」 を参照してください。
    新しい JNDI 名を使用するには、データソースにアクセスする既存の @Resource アノテーションも置き換える必要があります。以下に例を示します。
    @Resource(name = "java:/YourDatasourceName").
    
    Copy to Clipboard Toggle word wrap

3.1.6.4. Hibernate または JPA のデータソースの設定

アプリケーションが JPA を使用し、現在 Hibernate JAR をバンドルしている場合、JBoss EAP 6 に含まれる Hibernate を使用できます。このバージョンの Hibernate を使用するには、アプリケーションから古い Hibernate バンドルを削除する必要があります。

手順3.9 Hibernate バンドルの削除

  1. アプリケーションライブラリーフォルダーから Hibernate JAR を削除します。
  2. persistence.xml ファイルの <hibernate.transaction.manager_lookup_class> 要素は必要ないため、この要素を削除またはコメントアウトします。

3.1.6.5. リソースアダプター設定の更新

概要

以前のバージョンのアプリケーションサーバーでは、リソースアダプターの設定は、*-ds.xml のサフィックスのファイルで定義されていました。JBoss EAP 6 では、リソースアダプターはサーバー設定ファイルで設定されます。管理対象ドメインで実行している場合、設定ファイルは EAP_HOME/domain/configuration/domain.xml ファイルになります。スタンドアロンサーバーとして実行している場合は、EAP_HOME/standalone/configuration/standalone.xml ファイルでリソースアダプターを設定します。両方のモードで同じであるスキーマ参照情報は、IronJacamar Web サイト(http://www.ironjacamar.org/documentation.html)の 『Schemas』 セクションにあります。

重要
サーバーの再起動後に変更が維持されるようにするには、サーバーを停止してからサーバー設定ファイルを編集する必要があります。

リソースアダプターの定義

リソースアダプター記述子情報は、サーバー設定ファイルの以下のサブシステム要素で定義されます。

<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>
Copy to Clipboard Toggle word wrap
リソースアダプターの *-ds.xml ファイルで以前に定義された同じデータソース情報の一部を使用します。

以下は、サーバー設定ファイルのリソースアダプター要素の例です。
<resource-adapters>
  <resource-adapter>
    <archive>multiple-full.rar</archive>
    <config-property name="Name">ResourceAdapterValue</config-property>
    <transaction-support>NoTransaction</transaction-support>
    <connection-definitions>
      <connection-definition
      class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConnectionFactory1"
      enabled="true" jndi-name="java:/eis/MultipleConnectionFactory1"
      pool-name="MultipleConnectionFactory1">
    <config-property name="Name">MultipleConnectionFactory1Value</config-property>
      </connection-definition>
      <connection-definition
      class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConnectionFactory2"
      enabled="true" jndi-name="java:/eis/MultipleConnectionFactory2"
      pool-name="MultipleConnectionFactory2">
    <config-property name="Name">MultipleConnectionFactory2Value</config-property>
      </connection-definition>
    </connection-definitions>
    <admin-objects>
      <admin-object
      class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject1Impl"
      jndi-name="java:/eis/MultipleAdminObject1">
    <config-property name="Name">MultipleAdminObject1Value</config-property>
      </admin-object>
      <admin-object class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject2Impl"
      jndi-name="java:/eis/MultipleAdminObject2">
    <config-property name="Name">MultipleAdminObject2Value</config-property>
      </admin-object>
      </admin-objects>
  </resource-adapter>
</resource-adapters>
Copy to Clipboard Toggle word wrap

3.1.6.6. リークしたデータソース接続の検出

概要

JBoss EAP 6 では、Cached Connection Manager (CCM)デバッグユーティリティーを使用して、リークされたデータソース接続を検出できます。このトピックでは、CCM ユーティリティーを有効にしてデバッグする方法を説明します。

手順3.10 Cached Connection Managerの有効化

  1. <use-ccm="true" を設定して、サーバー設定ファイルの datasources サブシステムで CCM を有効にします。これはデフォルト値であり、明示的に設定する必要はありません。
    <subsystem xmlns="urn:jboss:domain:datasources:1.2">
      <datasources>
        <datasource ... enabled="true" use-ccm="true">
          ...
        </datasource>
      </datasources>
    </subsystem>
    Copy to Clipboard Toggle word wrap
  2. <cached-connection-manager> がサーバー設定ファイルの jca サブシステムに存在することを確認します。debug 属性を true に設定します。
    <subsystem xmlns="urn:jboss:domain:jca:1.1">
      ...
      <cached-connection-manager debug="true" error="true"/>
      ...
    </subsystem>
    Copy to Clipboard Toggle word wrap
    debug="true" を設定すると、以下が発生します。
    • "Closing a connection for you. Please close them yourself"というメッセージと共に、INFOメッセージがログに記録されます。
    • リークした接続を開いたコード用にスタックトレースが生成されます。
    • リークした接続が閉じられます。
    追加のプロパティー error="true" を使用すると、RuntimeException を発生させ、ログに ERROR メッセージを生成できます。
  3. デバッグを有効にすることは、パフォーマンスおよびログファイルのサイズに影響を及ぼすため、テスト時のみを使用することが推奨されます。リークが残っていないことを確認してから、アプリケーションを実稼働環境にデプロイする前に、debug="true" 設定を削除するか、<cached-connection-manager debug="false"/> を使用して、設定を元に戻します。

手順3.11 Cached Connection Manager によって報告されないリークのデバッグ

  1. サーバー設定ファイルの datasource サブシステムに use-ccm="false"が設定されていないことを確認します。
  2. サーバー設定ファイルの datasource サブシステムに jta="false"が設定されていないことを確認します。
  3. org.jboss.jca では、最小ロギングレベルが INFO に設定されていることを確認します。

3.1.7. セキュリティーの変更

3.1.7.1. アプリケーションセキュリティーの変更の設定

Basic 認証のセキュリティー設定

これまでのバージョンの JBoss EAP では、EAP_HOME/server/SERVER_NAME/conf/ ディレクトリーに置かれたプロパティーファイルはクラスパス上にあり、UsersRolesLoginModule によって簡単に確認できました。JBoss EAP 6 では、ディレクトリー構造が変更になりました。プロパティーファイルは、クラスパスで利用できるようにするためにアプリケーション内にパッケージ化する必要があります。

重要
サーバーの再起動後に変更が維持されるようにするには、サーバーを停止してからサーバー設定ファイルを編集する必要があります。
Basic 認証のセキュリティーを設定するには、standalone/configuration/standalone.xml または domain/configuration/domain.xml サーバー設定ファイルのsecurity-domains の下に、新しいセキュリティードメインを追加します。
<security-domain name="example">
    <authentication>
        <login-module code="UsersRoles" flag="required">
            <module-option name="usersProperties" 
                    value="${jboss.server.config.dir}/example-users.properties"/>
            <module-option name="rolesProperties" 
                    value="${jboss.server.config.dir}/example-roles.properties"/>
        </login-module>
    </authentication>
</security-domain>
Copy to Clipboard Toggle word wrap
JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合には、 ${jboss.server.config.dir}EAP_HOME/Standalone/configuration/ ディレクトリーを参照します。インスタンスが管理対象ドメインで実行されている場合には、 ${jboss.server.config.dir}EAP_HOME/domain/configuration/ ディレクトリーを参照します。

セキュリティードメイン名の変更

JBoss EAP 6 では、セキュリティードメインの名前にプレフィックス java:/jaas/ が使用されなくなりました。

  • Web アプリケーションの場合、jboss-web.xml のセキュリティードメイン設定からこのプレフィックスを削除する必要があります。
  • エンタープライズアプリケーションの場合、jboss-ejb3.xml ファイルのセキュリティードメイン設定からこのプレフィックスを削除する必要があります。JBoss EAP 6 では、このファイルは jboss.xml に置き換えられています。

3.1.8. JNDI の変更

3.1.8.1. アプリケーション JNDI 名前空間名の更新

概要

EJB 3.1 では、標準化されたグローバル JNDI 名前空間と、Java EE アプリケーションのさまざまなスコープにマッピングする関連する名前空間が導入されました。移植可能な EJB 名は java:globaljava:module、および java:app の 3 つのみにバインドされます。JNDI を使用する EJB のアプリケーションは、新しい標準化された JNDI 名前空間規則に従うように変更する必要があります。

JNDI マッピングの例

以前のリリースの JNDI 名前空間の例と JBoss EAP 6 でどのように指定されているかは、 「以前のリリースの JNDI 名前空間の例と JBoss EAP 6 での指定方法」を参照してください。

3.1.8.2. 移植可能な EJB JNDI 名

概要

Java EE 6 仕様は、それぞれ独自のスコープを持つ 4 つの論理名前空間を定義しますが、移植可能な EJB 名はその内の 3 つにのみバインドされます。以下の表は、各名前空間の使用方法と使用するタイミングの詳細を示しています。

Expand
表3.1 移植可能な JNDI 名前空間
JNDI 名前空間 説明
java:global
この名前空間内の名前は、アプリケーションサーバーインスタンスにデプロイされたすべてのアプリケーションによって共有されます。この名前空間の名前を使用して、同じサーバーにデプロイされた EJB 外部アーカイブを検索します。
java:global/jboss-seam-booking/jboss-seam-booking-jar/HotelBookingActionは、java:global 名前空間の例です。
java:module
この名前空間内の名前は、モジュールのすべてのコンポーネント(例:単一の EJB モジュールのすべてのエンタープライズBeanや Web モジュールのすべてのコンポーネント)によって共有されます。
java:module/HotelBookingAction!org.jboss.seam.example.booking.HotelBookingは、java:module 名前空間の例です。
java:app
この名前空間内の名前は、単一アプリケーションのすべてのモジュールのすべてのコンポーネントで共有されます。たとえば、同じ EAR ファイルの WAR と EJB jar ファイルは java:app 名前空間内のリソースにアクセスできます。
java:app/jboss-seam-booking-jar/HotelBookingActionは、java:app 名前空間の例です。
JNDI の命名コンテキストに関する詳細は、「JSR 316: JavaTM Platform, Enterprise Edition (Java EE) Specification, v6」のセクション EE.5.2.2「Application Component Environment Namespaces」を参照してください。仕様は、http://jcp.org/en/jsr/detail?id=316からダウンロードできます。

3.1.8.3. JNDI 名前空間ルールの確認

概要

JBoss EAP 6 で JNDI 名前空間名が改善され、アプリケーションサーバーにバインドされるすべての名前に対して予測可能かつ一貫性のあるルールを提供するだけでなく、今後の互換性の問題を回避します。したがって、アプリケーションの現在の名前空間が新しいルールに準拠しない場合に、問題が発生する可能性があります。

名前空間は以下のルールに従う必要があります。

  1. DefaultDSjdbc/DefaultDS などの修飾されていない相対名は、コンテキストに応じて java:comp/envjava:module/env、または java:jboss/env との相対値として修飾する必要があります。
  2. /jdbc/DefaultDS などの修飾されていない 絶対 名は、java:jboss/root 名との相対値として修飾する必要があります。
  3. java:/jdbc/DefaultDS などの修飾された 絶対 名は、上記の非修飾 絶対 名と同じ方法で修飾する必要があります。
  4. 特別な java:jboss 名前空間は AS サーバーインスタンス全体で共有されます。
  5. java: プレフィックスの 相対 名は、5つの名前空間compmoduleappglobal、またはプロプライエタリーの jboss のいずれかになければなりません。java:xxx (ここで、xxx は上記の 5 つのいずれとも一致しない)で始まる名前の場合、無効な名前エラーが発生します。

3.1.8.4. 新しい JNDI 名前空間ルールに従うようにアプリケーションを変更

  • 以下は、JBoss EAP 5.1 の JNDI ルックアップの例になります。このコードは、通常初期化メソッドにあります。
    private ProductManager productManager;
    try {
        context = new InitialContext();
        productManager = (ProductManager) context.lookup("OrderManagerApp/ProductManagerBean/local");
    } catch(Exception lookupError) {
        throw new ServletException("Unable to find the ProductManager bean", lookupError);
    }
    
    Copy to Clipboard Toggle word wrap
    ルックアップ名は OrderManagerApp/ProductManagerBean/local であることに注意してください。
  • 以下は、依存性注入を使用して同じルックアップを JBoss EAP 6 でコーディングする方法の例になります。
    @EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager")
    private ProductManager productManager;
    
    Copy to Clipboard Toggle word wrap
    ルックアップ値は、メンバー変数として定義され、新しい移植可能な java:app JNDI 名前空間名 java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager を使用するようになりました。
  • 依存性注入を使用しない場合は、上記のように新しい InitialContext を作成し、新しい JNDI 名前空間名を使用するようにルックアップを変更できます。
    private ProductManager productManager;
    try {
        context = new InitialContext();
        productManager = (ProductManager) context.lookup("java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager");
    } catch(Exception lookupError) {
        throw new ServletException("Unable to find the ProductManager bean", lookupError);
    }
    
    Copy to Clipboard Toggle word wrap

3.1.8.5. 以前のリリースの JNDI 名前空間の例と JBoss EAP 6 での指定方法

Expand
表3.2 JNDI 名前空間マッピングテーブル
JBoss EAP 5.x での名前空間 JBoss EAP 6 での名前空間 追加のコメント
OrderManagerApp/ProductManagerBean/local java:module/ProductManagerBean!services.ejb.ProductManager Java EE 6 の標準バインディング。現在のモジュールがスコープで、同じモジュール内でのみアクセスできます。
OrderManagerApp/ProductManagerBean/local java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager Java EE 6 の標準バインディング。現在のアプリケーションがスコープで、同じアプリケーション内でのみアクセスできます。
OrderManagerApp/ProductManagerBean/local java:global/OrderManagerApp/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager Java EE 6 の標準バインディング。アプリケーションサーバーがスコープで、グローバルにアクセスできます。
java:comp/UserTransaction java:comp/UserTransaction 名前空間は現在のコンポーネントがスコープです。Java EE 6 ではないスレッド(例:アプリケーションが直接作成したスレッド)からはアクセスできません。
java:comp/UserTransaction java:jboss/UserTransaction グローバルにアクセス可能。java:comp/UserTransaction が利用できない場合に使用します。
java:/TransactionManager java:jboss/TransactionManager  
java:/TransactionSynchronizationRegistry java:jboss/TransactionSynchronizationRegistry  
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat