LoginSignup
1
1

More than 1 year has passed since last update.

Spring5.3 × WebLogic14cでJSFライブラリ関連でWebアプリケーションの起動に失敗した話

Last updated at Posted at 2021-12-03

事象 サーバー起動時にWebアプリケーションの起動に失敗する

WebLogic14cをはじめて使った中でドハマリしたので、備忘録です。
過去にWebLogic11g、12cは使用したことがあります。

Spring5.3でWebアプリケーションを実装し、WebLogic14cへデプロイした際にこんなエラーに遭遇してしまいました。

javax.faces.FacesException: Unable to find CDI BeanManager

原因① JSFライブラリが不足していた

エラーの内容についていろいろと調べてみると、JSFライブラリが関連することがわかりました。
アプリケーション側でJSFライブラリは使用していないので、APサーバー側の依存によるものだと思います。
はじめはWebLogicに内包されているJSFライブラリではなく、Mavenセントラルリポジトリに公開されているものを使用してデプロイしたのですが、以下のような別のエラーに遭遇しました。

java.lang.ClassCastException: class com.sun.faces.vendor.WebContainerInjectionProvider cannot be cast to class com.sun.faces.spi.InjectionProvider

WebLogicのドキュメントを確認したところ、内包されているJSFライブラリをデプロイ・参照できるように設定する必要がありそうでした。
そのため、内包されているJSFライブラリ以外はWebLogicに対する互換性がないのでは?と考えました。

原因② weblogic.xmlに記載のクラスローダーの読み込み順序設定に問題があった

weblogic.xmlではクラスローダーの読み込み順序を設定して制御することができるのですが、今回の場合ではこの設定がうまくできていませんでした。
具体的には以下のような設定をして、デプロイしたWebアプリケーションを優先して読み込むようにしていました。

<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>

対処① WebLogicに内包されたJSFライブラリをデプロイ

内包されているライブラリは${weblogic_home}\wlserver\modulesに配置されていて、その中のglassfish.jsf.jarを使用します。
このファイルをコピーして以下のディレクトリに配置する必要があります。

${weblogic_home}\user_projects\domains\${domain_name}\lib

ドメインディレクトリごとのlibフォルダに配置することで、サーバー起動時にデプロイされるようになります。
また、上記で配置した内包されているもの以外でJSFライブラリ(javax.faces~.jar等)がデプロイすると重複してエラーになるため注意が必要です。

${weblogic_home}はWebLogicのインストールディレクトリ、${domain_name}はドメインごとのディレクトリとして適宜読み替えてください

対処② JSFライブラリが優先して読み込まれるようにクラスローダーの読み込み順序設定を変更

原因②のwls:prefer-web-inf-classesはデフォルトがfalseのため、削除します。
以下のようにパッケージ名を指定する形でクラスローダーの読み込み順序を設定し、JSFライブラリが優先して読み込まれるようにします。

<prefer-application-packages>
    <package-name>javax.faces.*</package-name>
    <package-name>com.sun.faces.*</package-name>
    <package-name>com.bea.faces.*</package-name>
</prefer-application-packages>
 <wls:prefer-application-resources>
    <wls:resource-name>javax.faces.*</wls:resource-name>
    <wls:resource-name>com.sun.faces.*</wls:resource-name>
    <wls:resource-name>com.bea.faces.*</wls:resource-name>
    <wls:resource-name>META-INF/services/com.sun.faces.*</wls:resource-name>
</wls:prefer-application-resources>

総括

対処①・②を行うことで問題なくデプロイおよびアプリケーションの起動が成功するようになりました。
この件に限らずサーバー依存の問題は解決するまでに結構ヒヤヒヤしますね。
WebLogic14c自体の情報が意外と少なくて、調べるのに少し苦労したのでお困りの方の参考になれば幸いです。

追記

根本原因としてはWebLogicのバグだったことがわかりました。
https://support.oracle.com/knowledge/Middleware/2785976_1.html

Oracleサポートアカウントをお持ちの方は、パッチを適用することでエラーが解消されるようです。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1