2

複数のejb-jarとwarを含むEARファイルがあります。ejb-jarに、次のようなインターフェイスの複数の実装を挿入します。

@Inject
@Any
private Instance<ConfigurationProviderLocal> providerEjb;

このインターフェースの実装は戦争で定義されています。この実装は正常にデプロイされます。

Glassfish v3.1ログには、次のように表示されます。

情報:EJB FormConfigurationProviderBeanのポータブルJNDI名:[java:global / com.dialog.edialog_eservices_ear_1.0.1-SNAPSHOT / checkout-form-1.0-SNAPSHOT /FormConfigurationProviderBean、java:global / com.dialog.edialog_eservices_ear_1.0.1-SNAPSHOT / checkout- form-1.0-SNAPSHOT /FormConfigurationProviderBean!com.dialog.sbsm.talisker.core.config.api.ConfigurationProviderLocal]

しかし、私の実装の反復では:

for (ConfigurationProviderLocal provider : providerEjb) {
            [...]
        }

実装FormConfigurationProviderBeanが繰り返されることはありません。これを説明できるメッセージはログにありません。

また、戦争をスタンドアロンで展開すると(耳の内側ではなく、依存関係が埋め込まれている)、インジェクションは正しく機能します。

実装が戦争内で定義されている場合、CDIはサポートされますか?クラスローダーの問題はありますか?

4

1 に答える 1

0

セットアップが正しい場合(おそらくそうです)、これは機能するはずです。

JBoss World(AS 6)でも同様の問題が発生し、EAR内の異なるアーティファクトが相互に認識できませんでした。JBoss classloading-mechanismを再構成することで解決しましたが、これは単純な(そして独自仕様の)JBossのものでした。

最初のデバッグ手順として行うこと:実際に存在するBeanについてBeanManagerにクエリを実行します。これはあなたにヒントを与えるかもしれません。最初のBean処理をダンプする小さなCDI拡張機能も役立つ可能性があります。

それでもCLの問題のように見える場合は、Glassfishのドキュメントでその構成オプションを見つけることができます。それが既知の問題/問題であるかどうかをGlassFish開発者に確認することはおそらく価値があります...

于 2012-07-12T16:14:59.617 に答える