后端的 CDI?

CDI in backend?

我的任务是通过使用 new 关键字和本地托管实体管理器来重构一个旧应用程序,该应用程序曾经在各处创建 DAO。

现在我应该使用 JTA 来管理连接。据我所知,我应该为此使用 CDI。到目前为止还没有问题。我的视图是 CDI 视图,并且我 @Inject 我所有的 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());
}

此示例代码将在托管 bean 中执行,这很好(我认为!),但这些测试运行者还需要能够访问数据访问层。但我需要(一个变量)这些的多个实例。

我听说您可以使用 CDI.current().get(MySingletonClass.class) 获得一个单例存储库以用作这些测试运行器中的数据访问是一个好主意(并且可能吗?),然后像以前一样 "new" 测试运行器?

或者有更好的方法来处理这一切吗?

所有建议都受到热烈欢迎。我是 CDI 的新手。

此致

您可以使用更多 "primitive" 依赖注入方法,将 MySingletonClass 的实例传递到 TestRunners 构造函数中。