Jakarta ee 从视图范围的托管Bean访问已创建的EJB
在我的web项目中,我有以下组件:Jakarta ee 从视图范围的托管Bean访问已创建的EJB,jakarta-ee,ejb,jsf-2.2,Jakarta Ee,Ejb,Jsf 2.2,在我的web项目中,我有以下组件: EJBannotated类UserService EJBannotated类UserDAOImpl SessionScopedmanagedbean调用UserStateBean ViewScopedManagedBean调用AdminDashboardView EJBUserService是在UserStateBean的init方法(用PostConstruct注释)中创建的,而UserDAOImpl也是在UserService的init方法中创建的 问题:
EJB
annotated类UserService
EJB
annotated类UserDAOImpl
SessionScoped
managedbean
调用UserStateBean
ViewScoped
ManagedBean
调用AdminDashboardView
EJB
UserService
是在UserStateBean
的init
方法(用PostConstruct
注释)中创建的,而UserDAOImpl
也是在UserService
的init
方法中创建的
问题:
EJB
类是无状态的吗?(除了@EJB
)如果没有,应该在上面使用注释吗李>
AdminDashboardView
中,我需要访问UserService
EJB
。这样做的正确方式是什么李>
我已经尝试过的内容(2):
在
AdminDashboardView
中,我将其声明为成员,如下所示:
@EJB
private UserService userService;
在init
函数中,我有以下内容:userService=newuserservice()代码>
这很好,并且成功地完成了我想做的事情,但是,这是正确的方法吗?
我的想法是,它可能是正确的,因为我得到的UserService
EJB
的new
实例来自容器拥有的池()。这是正确的吗?绝对不是
您不应该像创建JSF/CDI托管bean那样自己创建EJB。您现在看到的是一个完全不受EJB容器控制的手动创建和管理的实例。如果EJB类依次包含一个@PersistenceContext
,或另一个@EJB
,那么它将保持null
,等等。而且手动创建的实例完全没有代理和事务管理的概念。new
的工作方式与main()
方法中的工作方式完全相同
将@Stateless
放在EJB类上,并在@PostConstruct
中放弃手动创建。@EJB
基本上已经注入了它(就像@Inject
基本上已经注入了任何@Named
)。@EJB
支持注入@Stateless
、@Stateful
和@Singleton
类
另见:
绝对不是
您不应该像创建JSF/CDI托管bean那样自己创建EJB。您现在看到的是一个完全不受EJB容器控制的手动创建和管理的实例。如果EJB类依次包含一个
@PersistenceContext
,或另一个@EJB
,那么它将保持null
,等等。而且手动创建的实例完全没有代理和事务管理的概念。new
的工作方式与main()
方法中的工作方式完全相同
将@Stateless
放在EJB类上,并在@PostConstruct
中放弃手动创建。@EJB
基本上已经注入了它(就像@Inject
基本上已经注入了任何@Named
)。@EJB
支持注入@Stateless
、@Stateful
和@Singleton
类
另见:
绝对不是
您不应该像创建JSF/CDI托管bean那样自己创建EJB。您现在看到的是一个完全不受EJB容器控制的手动创建和管理的实例。如果EJB类依次包含一个
@PersistenceContext
,或另一个@EJB
,那么它将保持null
,等等。而且手动创建的实例完全没有代理和事务管理的概念。new
的工作方式与main()
方法中的工作方式完全相同
将@Stateless
放在EJB类上,并在@PostConstruct
中放弃手动创建。@EJB
基本上已经注入了它(就像@Inject
基本上已经注入了任何@Named
)。@EJB
支持注入@Stateless
、@Stateful
和@Singleton
类
另见:
绝对不是
您不应该像创建JSF/CDI托管bean那样自己创建EJB。您现在看到的是一个完全不受EJB容器控制的手动创建和管理的实例。如果EJB类依次包含一个
@PersistenceContext
,或另一个@EJB
,那么它将保持null
,等等。而且手动创建的实例完全没有代理和事务管理的概念。new
的工作方式与main()
方法中的工作方式完全相同
将@Stateless
放在EJB类上,并在@PostConstruct
中放弃手动创建。@EJB
基本上已经注入了它(就像@Inject
基本上已经注入了任何@Named
)。@EJB
支持注入@Stateless
、@Stateful
和@Singleton
类
另见:
谢谢您的回复,但我仍在努力初始化用户服务
EJB
。1) 首先,它应该声明为无状态,因为它只包含一个UserDAO
EJB