JBoss6_ja - terasolunaorg/terasoluna-gfw GitHub Wiki
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のサーバモジュールと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) |
|
(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ファイルの中に含める方法もあるが、この方法での動作検証は行っていない。
JBoss環境において、リクエストパラメータにマルチバイト文字を含む場合、文字化けが発生する。 これを回避するためには、以下のURIエンコーディングの設定が必要となる。
-
デフォルトの文字コードを
org.apache.catalina.connector.URI_ENCODING
を使用して設定する -
さらにリクエストごとに文字コード設定している場合、
org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING
を使用してリクエストに文字コードを適用する
設定方法は、以下を参照されたい。
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"が適用される。
アプリケーションで 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"が適用される。
JBoss上でServlet 3.0のファイルアップロード機能を使用すると、リクエストパラメータやファイル名のマルチバイト文字が文字化けすることがある。
Commons FileUploadを使用することで、この問題を回避することができる。
使用方法は以下ガイドラインの説明を参照。