Jakarta ee 将相同的有状态ejb实例注入不同的managedbeans
我试图在JSF上建立一个简单的博客。然而,我不知道如何将相同的有状态ejb实例注入到两个不同的托管bean中。我知道注入可以通过@ManagedProperty注释间接完成。诸如此类:Jakarta ee 将相同的有状态ejb实例注入不同的managedbeans,jakarta-ee,ejb,managed-bean,Jakarta Ee,Ejb,Managed Bean,我试图在JSF上建立一个简单的博客。然而,我不知道如何将相同的有状态ejb实例注入到两个不同的托管bean中。我知道注入可以通过@ManagedProperty注释间接完成。诸如此类: @ManagedBean @ViewScoped public class PostController implements Serializable { private static final long serialVersionUID = 1L; private Post temporaryPost;
@ManagedBean
@ViewScoped
public class PostController implements Serializable {
private static final long serialVersionUID = 1L;
private Post temporaryPost;
@ManagedProperty(value = "#{authenticationController}")
private AuthenticationController authenticationController;
@Inject
private PostEJB postEJB;
public void save() {
getTemporaryPost().setAuthor(
getAuthenticationController().getAuthenticationEJB()
.getCurrentSessionUser());
postEJB.create(getTemporaryPost());
}
}
我想摆脱
@ManagedProperty(value=“#{authenticationController}”)
私有身份验证控制器AuthenticationController
并直接注入AuthenticationEJB,如
@注入私有身份验证EJB AuthenticationEJB
因此,与其
getAuthenticationController().getAuthenticationEJB()
.getCurrentSessionUser()
我会得到
authenticationEJB.getCurrentSessionUser()
但是,问题是这是新的authenticationEJB实例,它不包含当前登录的用户(用户为null)。同时authenticationController.authenticationEJB.currentsessionuser包含登录用户
提前谢谢
终于找到答案了!这很容易:
@ManagedProperty(value = "#{authenticationController.authenticationEJB}")
private AuthenticationEJB authenticationEJB;
现在它指向同一个authenticationEJB实例。不过,我相信可能还有其他方法 好吧,你知道答案了,但也许有几条注释
- 为什么不使用
注释将bean直接注入@EJB
PostController
- 如果您开发一个新项目,使用
而不是JSF管理的bean,它们很快就会被弃用(而且整个javaee堆栈正在缓慢地向到处使用CDI的方向发展)cdibeans
- 然后您可以去掉
,每个bean(基本上是应用程序中的任何类)都可以通过@ManagedProperty
注释进行注入。同样的事情也适用于EJB,所以CDI在某种程度上统一了对大多数类型bean的访问李>@Inject
- 一些基本的CDI+JSF教程
@SessionScoped
处理后控制器
托管bean?只是尝试了一下,@SessonScoped没有帮助。对于EJB,我使用@EJB
而不是@Inject
,这可能对您有帮助不,这也没有帮助。但我找到了一个。我现在就发!终于找到答案了!这很简单:@ManagedProperty(value=“#{authenticationController.authenticationEJB}”)private authenticationEJB authenticationEJB;现在它指向同一个authenticationEJB实例。不过,我相信可能还有其他方法可以做到这一点。好吧,谢谢你的建议,我对这堆技术真的很陌生。我尝试过注入EJB,但据我所知,它为postController创建了一个新的EJB实例。示例:postController.authenticationEJB包含与AuthenticationController.authenticationEJB不同的数据。感谢CDI,不知道一切都发生了如此巨大的变化!这对于无状态的bean是正确的,但是你写到你的bean是有状态的,所以你应该在注入到的每个bean中得到相同的实例。我真的很困惑,也许我明天会详细检查它。是的,AuthenticationEJB是有状态的LocalBean。但是,当我将ManagedProperty(value=#{authenticationController.authenticationEJB})更改为EJB时,由于用户字段中为null(此处的用户是post作者),因此无法保存post。在另一种情况下,evrything可以正常工作。。如果我在这个JSF中使用EJB注释: