JBoss6_ja - terasolunaorg/terasoluna-gfw GitHub Wiki

JBoss EAP 6を利用する際の注意点

確認環境のバージョン情報
terasoluan-gfw OS Java JBoss RDBMS Browser Mail Server Message Queue
5.4.2.RELEASE CentOS 7.4 OpenJDK 8u161 JBoss EAP 6.4.0 PostgreSQL 9.6.10 Firefox ESR 38 (38.8.0) Postfix 3.2.2 + Dovecot 2.3.1 ActiveMQ 5.15.3

はじめに

JBoss EAP(JBoss Enterprise Application Platform)6環境においてTERASOLUNA Server Framework for Java (5.x)を使用する場合、 以下の設定が必要となる。

  • jboss-deployment-structure.xmlの作成と設定
  • URIエンコーディングの設定
  • ファイルアップロード(Commons FileUpload)の設定

jboss-deployment-structure.xmlの作成と設定

JBossのサーバモジュールとTERASOLUNA Server Framework for Java (5.x)で使用しているライブラリが競合した場合、JBoss側のモジュールが優先されるため、正常に動作しないことがある。
そのため、jboss-deployment-structure.xmlを作成し、JBoss側のモジュールを除外(一部、参照)する設定が必要となる。
jboss-deployment-structure.xmlは、WEB-INF直下に配置する。

WEB-INF/jboss-deployment-structure.xml

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="javaee.api" /><!-- (1) -->
            <module name="javax.faces.api" /><!-- (2) -->
            <module name="org.hibernate.validator" /><!-- (3) -->
            <module name="org.jboss.logging" /><!-- (4) -->
            <module name="org.slf4j" /><!-- (5) -->
            <module name="javax.inject.api" /> <!-- (6) -->
        </exclusions>
        <dependencies>
            <module name="javax.annotation.api" /><!-- (7) -->
            <module name="javax.jms.api" /><!-- (8) -->
        </dependencies>
        <exclude-subsystems>
            <subsystem name="jpa" /><!-- (9) -->
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>
.. tabularcolumns:: |p{0.10\linewidth}|p{0.80\linewidth}|
項番 説明
(1)
Bean Validation・JPAのバージョンが競合しエラーが発生するため、Java EEモジュールを除外する。(入力チェックにBean Validationを使う、またはO/R MapperとしてJPAを使う場合は本設定が必要)
(2)
Bean Validationのバージョンが競合しエラーが発生するため、JavaServer Facesモジュールを除外する。(1)と合わせて設定する必要がある。(入力チェックにBean Validationを使う場合は本設定が必要)
(3)
Hibernate Validatorが正常に動作しないため、Hibernate Validatorモジュールを除外する。
(4)
JBoss Loggingのバージョンが競合しエラーが発生するため、JBoss Loggingモジュールを除外する。
(5)
アプリケーションログが正常に出力されないため、SLF4Jモジュールを除外する。
(6)
javax.inject.apiのバージョンが競合しエラーが発生する場合があるため、javax.inject.apiモジュールを除外する。(5.3.0.RELEASEでは除外しなくてもエラーは発生しない)
(7)
@Resourceアノテーションによるインジェクションが動作しないため、javax.annotation.apiモジュールを参照する。
(8)
クラスパス上にJMSのAPIクラスが必要なため、javax.jms.apiモジュールを参照する。(JMSを使う場合は本設定が必要) [1]
(9)
JPAのバージョンが競合しエラーが発生するため、JPAサブシステムが働かないように除外する。(O/R MapperとしてJPAを使う場合は本設定が必要)
[1]
アプリケーション内でApache ActiveMQ固有のクラスを使用する場合は、JBossのリソースアダプタの仕組みを利用するために追加したActiveMQモジュールを"javax.jms.api"モジュールと同様の方法で参照する必要がある(JBossのリソースアダプタの仕組みについては、Resource Adaptersを参照されたい)。
なお、ActiveMQに関連するjarファイルをwarファイルの中に含める方法もあるが、この方法での動作検証は行っていない。

URIエンコーディングの設定

JBoss環境において、リクエストパラメータにマルチバイト文字を含む場合、文字化けが発生する。
これを回避するためには、以下のURIエンコーディングの設定が必要となる。
  1. デフォルトの文字コードをorg.apache.catalina.connector.URI_ENCODINGを使用して設定する
  2. さらにリクエストごとに文字コード設定している場合、org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRINGを使用してリクエストに文字コードを適用する

設定方法は、以下を参照されたい。

  1. URIにデフォルトの文字コードを指定する方法
  2. URI中のリクエストパラメータの文字コードに、リクエストの文字コードを適用する方法

URIにデフォルトの文字コードを指定する方法

org.apache.catalina.connector.URI_ENCODINGを使用し、URIのデフォルトの文字コードを設定する。

  • 設定例

{JBOSS_HOME}/standalone/configuration/standalone.xml

<extensions>タグの次に以下の設定を追加する

<!--omitted-->
</extensions>

<system-properties>
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
</system-properties>

上記例では、"UTF-8"が適用される。

URI中のリクエストパラメータの文字コードに、リクエストの文字コードを適用する方法

アプリケーションでServletRequest#setCharacterEncoding(String)を使用してリクエストごとに文字コード設定を行っている場合、 org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRINGを使用して、リクエストの文字コードをURIリクエストパラメータに適応させる。

  • 設定例
request.setCharacterEncoding("Windows-31J");

{JBOSS_HOME}/standalone/configuration/standalone.xml

<extensions>タグの次に以下の設定を追加する

<!--omitted-->
</extensions>

<system-properties>
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
    <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>

上記例では、"Windows-31J"が適用される。

リクエストに文字コードを設定しない場合は、org.apache.catalina.connector.URI_ENCODINGで指定した"UTF-8"が適用される。

ファイルアップロード(Commons FileUpload)の設定

JBoss上でServlet 3.0のファイルアップロード機能を使用すると、 リクエストパラメータやファイル名のマルチバイト文字が文字化けすることがある。
Commons FileUploadを使用することで、この問題を回避することができる。
使用方法は以下ガイドラインの説明を参照。
⚠️ **GitHub.com Fallback** ⚠️