2011-07-22 7 views
3

RichFaces 4 ExtendedDataTableをバックアップするデータモデルを@Injectできますが、EntityManagerがその作業を行う必要があります。 EntityManagerのクエリはもちろん、クラスを知る必要があり、メソッド呼び出しに渡すのではないでしょう(この場合、メソッドは自分のコードで呼び出されません)。理想的には、それはコンストラクタにあります。データモデルのCDIプロデューサメソッド

このような何か:

public class DataModel<T> { 
    @Inject private EntityManager em; 
    private Class<T> entityClass; 

    public DataModel(Class<T> entityClass) { 
     this.entityClass = entityClass; 
    } 

    //Sample method - this class will handle much more complex queries 
    public T findEntity(String key) { 
     return em.find(entityClass, key); 
    } 

は私のバッキングBeanにこののDataModelを注入するために使用することができCDI @Producerを作成することが可能ですか?注入するEntityManagerを許可しないだろうと思う - 私はあなたが

@Inject @JType(value = MyEntity.class) DataModel<MyEntity> dataModel; 

ような何かを行うことができますしかし、それは不器用なように見えたので、予選を行うことについて考えてきた、ともnew()を呼び出すために私@Producerを必要としますデータ・モデル。また、どのように修飾子を開発者が追加する必要があるかわかりません。

これにはもっと良いアプローチがありますが、何か不足していますか?

+2

があります。デザインパターンやフレームワークのアプリケーションの上に良いデザインではない、彼らは通信するためのツールです。 –

答えて

1

seam3のseam-persistenceモジュールを使用してこれを行います。 :

プロデューサー:

public class EntityManagerProducer { 

    @Produces 
    @ExtensionManaged 
    @ConversationScoped 
    @PersistenceUnit(unitName = "yourUnitName") 
    private EntityManagerFactory emf; 
} 

その後、あなたはエンティティマネージャを@Injectすることができます。

そうでなければ、私はあなたの本能で行くだろう有望と思われるDeltaSpikeプロジェクト(まだそれを使ったことがない)

+0

返信いただきありがとうございます!それは1年ですが、私は他のプロジェクトに移りましたので、これが問題を解決するかどうかを検証することはできませんが、私はそう思っています。 – tdm

関連する問題