Skip to content
bttamuratsh edited this page Feb 23, 2017 · 19 revisions

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

確認環境のバージョン情報
terasoluan-gfw OS Java JBoss RDBMS Browser Mail Server Message Queue
5.3.0.RELEASE CentOS 7.2 OpenJDK 8u111 JBoss EAP 6.4.0.CVE-2015-7501 PostgreSQL 9.6.1 Firefox ESR 38 (38.5.0) Postfix 2.10.1 + Dovecot 2.1.10 ActiveMQ 5.13.4

はじめに

JBoss EAP(JBoss Enterprise Application Platform)環境において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.jboss.logging" /><!-- (3) -->
            <module name="org.slf4j" /><!-- (4) -->
            <module name="org.hibernate.validator" /><!-- (5) -->
            <module name="javax.inject.api" /> <!-- (6) -->
        </exclusions>
        <dependencies>
            <module name="org.apache.activemq" /><!-- (7) -->
            <module name="javax.jms.api" /><!-- (7) -->
            <module name="javax.annotation.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)
JBossのJava EEモジュールを除外する設定。Bean Validationライブラリ、JPAライブラリの競合を避けるために設定。
この設定を行わない場合、WARのデプロイ時にエラーが発生する。
(2)
JBossのJavaServer Facesモジュールを除外する設定。Bean Validationライブラリの競合を避けるため、(1)と合わせて設定する必要がある。
(3)
JBossのLoggingモジュールを除外する設定。この設定を行わない場合、WARのデプロイ時にエラーが発生する。
(4)
JBossのSLF4Jモジュールを除外する設定。この設定を行わない場合、アプリケーションログが正常に出力されない。
(5)
JBossのHibernate Validatorモジュールを除外する設定。この設定を行わない場合、Hibernate Validatorが正常に動作しない。
(6)
JBossのjavax.Inject.apiモジュールを除外する設定。現段階では除外しなくても問題は無いが、バージョンアップ時にエラーが起こる可能性を避けるために設定する。
(7)
JBossのjavax.jms.apiおよびorg.apache.activemqモジュールを参照する設定。この設定を行わない場合、Connection Factoryの定義に必要なクラスが存在しないため、ClassNotFoundExceptionが発生する。(JMSプロバイダとしてApache ActiveMQを使う場合は本設定が必要)
(8)
JBossのjavax.annotation.apiモジュールを参照する設定。この設定を行わない場合、@Resourceアノテーションによるインジェクションが動作しない。
(9)
JBossのJPAサブシステムが働かないように除外する設定。この設定を行わない場合、WARのデプロイ時にエラーが発生する。(O/R MapperとしてJPAを使う場合は本設定が必要)

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を使用することで、この問題を回避することができる。
使用方法は以下ガイドラインの説明を参照。

http://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/ArchitectureInDetail/FileUpload.html#file-upload-usage-commons-fileupload

Clone this wiki locally