-
Notifications
You must be signed in to change notification settings - Fork 55
JBoss6_ja
btiwahorisu edited this page May 24, 2019
·
19 revisions
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>
.. 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ファイルの中に含める方法もあるが、この方法での動作検証は行っていない。
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を使用することで、この問題を回避することができる。
使用方法は以下ガイドラインの説明を参照。