JBoss6_ja - terasolunaorg/terasoluna-gfw GitHub Wiki

目次

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

Table 1. 確認環境のバージョン情報
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

1.1. はじめに

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

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

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

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

1.2. 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>
項番 説明

(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ファイルの中に含める方法もあるが、この方法での動作検証は行っていない。

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

JBoss環境において、リクエストパラメータにマルチバイト文字を含む場合、文字化けが発生する。 これを回避するためには、以下のURIエンコーディングの設定が必要となる。

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

  2. さらにリクエストごとに文字コード設定している場合、org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING を使用してリクエストに文字コードを適用する

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

1.3.1. 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"が適用される。

1.3.2. 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"が適用される。

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

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

⚠️ **GitHub.com Fallback** ⚠️