質問

使いたい オムニフェイス 私のJave EE 7アプリケーションでは1.7。私のアプリケーションは、JAR と 細い戦争. 。JAR の一部は OmniFaces に依存しているため、OmniFaces アーティファクトは EAR 内に存在する必要がありますが、EAR 内には存在しません。 WEB-INF/lib 戦争中。

私のEARは次のようになります。

EAR
 +-- lib
 |    +-- [some 3rd party JARs]
 |    `-- omnifaces.jar
 +-- myEJBs.jar
 `-- myWAR.war

こうやって言うと、OmniFaces コンバーター ( GenericEnumConverter) は JSF に登録されていないため、機能しません。その理由が議論されている ここ そして ここ. 。基本的には JSF 2.0仕様 (セクション 11.5.1 注釈のクラスのスキャンの要件)、WAR のみ WEB-INF/lib ディレクトリがスキャンされます。

そこで私の質問は次のとおりです。 アプリケーションに OmniFaces を含めるにはどうすればよいですか?

それを 2 回含めます ( EAR/lib とWAR WEB-INF/lib)おそらく機能する可能性がありますが、不器用に感じます。少し前にRichFaces 4.3.5(同じ問題)で試しましたが、機能しませんでしたが、 IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter.

役に立ちましたか?

解決

OmniFaces は、JSF、EL、およびサーブレット API に依存する JSF ユーティリティ ライブラリです。これらは通常、EAR ではなく WAR 内でのみ使用できます。さらに、EJB (ビジネス サービス一般) は、JSF、EL、サーブレット API などの特定のフロントエンド API に依存することは想定されていません。JAX-RS、Spring MVC などの他のフロントエンドでは再利用できなくなります。

JSF ユーティリティとコンポーネント ライブラリ (OmniFaces や PrimeFaces など) は、EAR ではなく WAR に配置する必要があります。こちらも参照 インストール OmniFaces ホームページのセクション:

OmniFaces は WAR ライブラリ (Web フラグメント ライブラリ) として設計されているため、WAR 独自の Web アプリのランタイム クラスパスの他の場所に配置することはできません。 /WEB-INF/lib, 、EARなど /lib またはサーバーまたは JRE 自体の /lib. 。OmniFaces JAR ファイルがこの方法で誤って配置された場合、Web アプリケーションは OmniFaces にバンドルされた JSF/CDI アノテーション付きクラスを見つけることができず、デプロイ時または実行時にこれに関連する例外をスローします。これを解決するには、OmniFaces を WAR に戻します。 /WEB-INF/lib.

以下も参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top