Skip to content
btkatoufm edited this page Mar 31, 2022 · 1 revision

WebLogic_ja

1. WebLogic 14cを利用する際の注意点

Table 1. 確認環境のバージョン情報
terasoluan-gfw OS Java WebLogic RDBMS Browser Mail Server Message Queue

5.7.1.RELEASE

Red Hat Enterprise Linux 8.4

Oracle JDK 11.0.13

WebLogic 14.1.1.0 (※1)

Oracle 19.3.0.0.0

Firefox ESR 91 (91.3.0esr)

Postfix 3.6.3 + Dovecot 2.3.16

ActiveMQ 5.16.3

  • ※1 : ページがバッファサイズを超えてflushされた後にヘッダを取得するとNullPointerExceptionが発生する不具合を回避するため、「My Oracle Support」で提供されているパッチ32133880を適用。

1.1. weblogic.xmlの追加

1.1.1. WebアプリケーションのWEB-INFディレクトリ内のクラス(ライブラリ)を、WebLogicのlibディレクトリ内のクラス(ライブラリ)より優先してロードする

WebLogicには、WebLogicのlibディレクトリにクラスが格納されており、Webアプリケーションのクラスと競合して例外がスローされる場合がある。
Web アプリケーションのWEB-INFディレクトリ内のクラスを、WebLogicのlibディレクトリ内のクラスより優先してロードするためには、以下のいずれかの設定を行なう。

prefer-application-packagesを使用する方法

prefer-application-packagesで指定したパッケージは、常にWebアプリケーションのWEB-INFディレクトリ内からロードされる。
この設定を行うことで5.5.1以降および5.4.2のアプリケーションが正常に動作することを確認している。

<container-descriptor>
    <prefer-application-packages>
        <package-name>org.hibernate.validator.*</package-name><!-- (1) -->
        <package-name>javax.validation.*</package-name><!-- (2) -->
        <package-name>com.fasterxml.jackson.*</package-name><!-- (3) -->
        <package-name>org.joda.*</package-name><!-- (4) -->
        <package-name>org.slf4j.*</package-name><!-- (5) -->
        <package-name>org.apache.xmlbeans.*</package-name><!-- (6) -->
        <package-name>com.nimbusds.*</package-name><!-- (7) -->
    </prefer-application-packages>
</container-descriptor>
項番 説明

(1)

Hibernate Validatorが正常に動作しないため、当該パッケージの優先度を変更する。

(2)

Bean Validationのバージョンが競合しエラーが発生する場合があるため、当該パッケージの優先度を変更する。

(3)

Jacksonが正常に動作しないため、当該パッケージの優先度を変更する。

(4)

Joda Timeが正常に動作しないため、当該パッケージの優先度を変更する。

(5)

アプリケーションログが正常に出力されないため、SLF4Jのパッケージの優先度を変更する。

(6)

Apache POIを利用する場合、XMLBeansのバージョンが競合しエラーが発生する場合があるため、当該パッケージの優先度を変更する。(5.5.x以前では変更しなくてもエラーは発生しない)

(7)

Spring SecurityのOAuth2で実装したリソースサーバーでJWT認証を行う場合(5.7.1.RELEASE以降の OAuth2の記述 に従う場合)、Nimbus JOSE+JWTのバージョンが競合しエラーが発生する場合があるため、当該パッケージの優先度を変更する。

1.1.2. prefer-web-inf-classesを使用する方法

prefer-web-inf-classestrueを指定すると、Web アプリケーションのWEB-INFディレクトリ内のクラスがWebLogicのlibディレクトリ内のクラスより優先してロードされる。
この設定を行うことで5.4.2のアプリケーションが正常に動作することを確認している。
5.5.1以降のアプリケーションでは、Bean Validation 2.0の読み込みに失敗しアプリケーションが起動できないことが確認されている。

projectName-web/src/main/webapp/WEB-INF/weblogic.xml

<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
Note

prefer-web-inf-classestrueに設定した場合、WebLogicの<DOMAIN_HOME>/bin/setDomainEnv.shJAVA_OPTIONSにパラメータ-DANTLR_USE_DIRECT_CLASS_LOADING=trueの追加が必要である。
prefer-web-inf-classestrueにするとWebアプリケーションの"antlr.jar"が優先され、Webアプリケーションのデプロイ時に
java.lang.ClassCastException: antlr.CommonToken cannot be cast to antlr.Token
という例外がスローされる可能性がある。
Webアプリケーションのデプロイには、WebLogicのantlr.jarが利用されなければならないためである。

<DOMAIN_HOME>/bin/setDomainEnv.sh

  • 変更前

JAVA_OPTIONS="${JAVA_OPTIONS}"
export JAVA_OPTIONS
  • 変更後

JAVA_OPTIONS="${JAVA_OPTIONS} -DANTLR_USE_DIRECT_CLASS_LOADING=true"
export JAVA_OPTIONS

1.2. URL 書き換えを無効にする

URL 書き換えを無効にする。これによって、セッション ID が URL にエンコーディングされ、クッキーがブラウザで無効の場合にセッション トラッキングが実行さないようにする。
デフォルトはtrueである。(jsessionIdをブラウザのURLに出力しないため。)

projectName-web/src/main/webapp/WEB-INF/weblogic.xml

<session-descriptor>
    <url-rewriting-enabled>false</url-rewriting-enabled>
</session-descriptor>

1.3. BASIC認証

WebLogicはデフォルトの状態では、リクエストにAuthorizationヘッダが付いていると、WebLogicのBASIC認証機能が作動してしまう。そのため、Webアプリケーション側でBASIC認証を設定する必要がある場合は、WLSTコンソールからWebLogicのセキュリティ設定を変更してBASIC認証をオフに設定する必要がある。

WLSTコンソールの起動

$ source <WL_HOME>/server/bin/setWLSEnv.sh
$ java weblogic.WLST

WLSTコマンドを実行して、BASIC認証をオフに設定

wls:/offline> connect('<ユーザー名>', '<パスワード>', 't3://<管理ホスト>:<管理ポート>')
wls:/<ドメイン名>/serverConfig/> edit()
wls:/<ドメイン名>/edit/> startEdit()
wls:/<ドメイン名>/edit/ !> cd('/SecurityConfiguration/mydomain')
wls:/<ドメイン名>/edit/SecurityConfiguration/mydomain !> cmo.setEnforceValidBasicAuthCredentials(false)
wls:/<ドメイン名>/edit/SecurityConfiguration/mydomain !> save()
wls:/<ドメイン名>/edit/SecurityConfiguration/mydomain !> validate()
wls:/<ドメイン名>/edit/SecurityConfiguration/mydomain !> showChanges()
wls:/<ドメイン名>/edit/SecurityConfiguration/mydomain !> activate()
wls:/<ドメイン名>/edit/SecurityConfiguration/mydomain> exit()

1.4. Java Required Files(JRF)について

TERASOLUNA Server Frameworkでは、JRFを有効にしていない状態のWebLogicで検証している。(Oracle Fusion Middleware InfrastructureやOracle JdeveloperをインストールしないでOracle WebLogic Serverのみをインストールする。)

Note

JRFライブラリをロードすると、Webアプリケーションのデプロイ時に
java.lang.ClassNotFoundException: org.apache.xpath.XPath at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:357)
という例外がスローされる可能性がある。

1.5. SOAPクライアントのタイムアウトの設定について

WebLogicでSOAPクライアントのタイムアウトを設定するにはJaxWsPortProxyFactoryBeanのカスタムプロパティに対してvalue-type性でInteger型を指定する必要がある。プロパティにvalue-type属性を指定しなかった場合、WebLogicのJAX-WS実装ライブラリがString型からInteger型へのキャストを試みて失敗し、org.springframework.remoting.RemoteAccessExceptionが発生する。

実装方法については開発ガイドラインの タイムアウトの設定 を参照されたい。

1.6. JPAのログ出力について

5.5.1から5.6.0への移行ガイド のSTEP「log4jdbc-remixのサポートを終了したことに伴う修正」にてJPA(Hibernate)のログ出力設定について解説しているが、WebLogicではJPAプロバイダとしてWebLogicに含まれるJPA実装が利用されるため、アプリケーションのlogback.xmlで設定してもログが出力されないことが確認されている。

「Oracle® Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの管理」の 20 WebLogic JDBCリソースのモニタリング 等を参考に、WebLogicの機能を利用してSQLをログ出力することを検討されたい。なお、アプリケーションでSQLをログ出力したい場合は以下の方法が考えられるが、いずれも各開発プロジェクトでテストを実施し、品質を確保されたい。

  • 5.6.0からサポート対象外となったlog4jdbc-remixを利用する
    利用するJDBCのバージョンやJPAプロバイダの実装により実行時エラーが発生する可能性があることに留意されたい。

  • log4jdbc-remixのようにデータソースBeanをプロキシするような実装を行う
    実装方法の解説は省略する。

Clone this wiki locally