2017-11-14 4 views
1

私は、新しいキーワードとローカル管理されたentitymanagerを使用して、DAOを作成していた古いアプリケーションをリファクタリングすることを任されました。バックエンドのCDI?

今私は接続を管理するためにJTAを使用することになっています。私が理解できるものは、CDIを使うべきです。これまでのところ問題はありませんでした。私のビューはCDIビューで、次の例のようにDAOを使用するすべてのDAO、または他のケースではDAOを使用します。

@CDIView(value = TestView.VIEW_ID) 
public class TestView extends Test implements View { 
public static final String VIEW_ID = "testviewer"; 

@Inject 
private 
TestInterface testInterface; 

public void viewLogic() { 

    ... 
} 

これはうまくいきますが、私は心配し始めています。背後にはスレッドがたくさんあり、同時に実行しているためです。これらのスレッドはオブジェクトの独自のインスタンスを必要とするため、注入できません。例は次のようになります。

@Stateless 
public class TestInterface { 

@Inject 
TestDAO testDAO; 



private List<TestRunner> getTestRunners(Test test, ToplevelTest tlt){ 
    List<TestRunner> runners = new ArrayList<>(); 
    for(SomeThing st : getTestSomethings()){ 
     if(st.condition()) 
      runners.add(new AbstractTestRunner()); 
     else runners.add(new FancyTestRunner()); 

    } 
} 

private SomeDataAccess(){ 
    testDAO.save(new Test()); 
} 

このサンプルコードは(と思う!)大丈夫ですが、これらのtestrunnersもdataccesslayerへのアクセスを持っている必要があります管理対象Bean内で実行されます。しかし、私はこれらの複数のインスタンス(可変)が必要です。

CDI.current()。get(MySingletonClass.class) これらのテストランナー内でデータアクセスとして使用するシングルトンリポジトリを取得することをお勧めしますこれまでのようにテストランナーだけが「新しい」?

これをすべて処理する方法はありますか?

すべての提案は暖かく受け取ります。私はむしろCDIの新しさです。

敬具

答えて

1

あなたはTestRunnersのコンストラクタにMySingletonClassのインスタンスを渡す、依存性の注入のより「原始的な」方法を使用することができます。