2016-05-03 12 views
0

でロードしています。現在、JEE 6アプリケーション(WARデプロイメント)をGF 3.1からPayara 4.1.1に移植しています。私たちは、EJBとCDI Beanを使用しています。それらは異なるjarファイルにパッケージ化されています。別のjarファイルにあるCDI Beanが見つからないという問題に直面しています。各jarファイルには独自のMETA-INF/beans.xmlがあり、WAR(WEB-INF/beans.xml)アーカイブ用のものもあります。 (豆発見モード=「すべて」) CDI BeanをPayara 4.1.1

  • の内側とEARデプロイメントWARを展開beans.xmlのを採用

    • :私はすでに、次の手順を試してみました。
    • 一般がある場合は誰もが知っていJEE 7要件

    を満たすために、最新バージョン(RichFacesの、グアバ、EclipseLinkは、...)にすべてのライブラリを更新CDI 1.1

  • で変更注釈を変更Glassfish/Payara 4.1.1のバグ?助けにはならなかった

    Thxを、 ベルント残念ながら

    。私はもう少し調査をしましたが、「一部の」BeanだけをBeanManagerから正しく注入または取得できないようです。動作しません。ここでは、クラス階層:

    public class AllwaysFalseRemoteBotCondition<E extends IStandardEntity> { 
    } 
    

    射出作品:私はクラスに上記変更した場合は

    `// AllwaysFalse is our own annotation. 
    @AllwaysFalse 
    @Named 
    public class AllwaysFalseRemoteCondition<E extends IStandardEntity> 
         extends ConditionBase<javax.persistence.criteria.Predicate, E> 
         implements RemoteCondition<javax.persistence.criteria.Predicate, E>  
    { 
    … 
    } 
    
    // The abstract base class 
    public abstract class ConditionBase<R, T extends IStandardEntity> implements  Condition<R, T> { 
    } 
    
    // The base interface 
    public interface RemoteCondition<T, E extends IStandardEntity> extends Condition<T, E> { 
    

    }

    public interface Condition<T, E extends IStandardEntity> extends Part<ConditionDescriptor> { 
    … 
    } 
    

    私はBeanManager getBeans()メソッドを使って豆を注入しようとした場合、私はタイプによる検索を行う場合は動作しません:私は「クラス」パラメータでインターフェイスクラスを提供する場合

    `BeanManager bm = getBeanManager(); 
        Set<Bean<?>> beans = bm.getBeans(clazz, annotations); 
    

    を戻り値は常にnullです。

  • +0

    私が知っているバグはありません。 server.logに何らかのエラーメッセージが表示されていますか?それはそれらを見るのを助けるでしょう。どのバージョンのPayaraを使用していますか?バージョンスキームは、年+四半期の最後の2桁です。最新のバージョンは161.1です(162日後にリリース予定) – Mike

    答えて

    0

    ソリューション

    Set<Bean<?>> beans = bm.getBeans(
        new TypeLiteral<RemoteCondition<javax.persistence.criteria.Predicate,?>>() {} 
        .getType(), 
        new AnnotationLiteral<AlwaysFalse>(){} 
    

    TypeLiteralは、問題を解決しました! Payaraのサポートに感謝します!

    0

    weld-servlet.jarをダウンロードしてあなたのプロジェクトのライブラリに入れてください。それよりも、なぜwildflyを使用していないのですか?彼はあなたのアプリケーションでcdiを実行するためにすべての瓶を運びます。

    +0

    残念ながらそれは役に立たなかった。私はもう少し調査をしました。ちょうど "いくつかの" BeanをBeanManagerから正しく注入または取得できないようです。ここで動作しないクラス階層: –

    関連する問題