gpt4 book ai didi

java - JBoss Seam : components injected into POJOs, 但不是 session Bean

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:03 26 4
gpt4 key购买 nike

我有一个处理登录的 Seam 组件,名称为“authenticator”:

@Name("authenticator")
public class AuthenticatorAction implements Authenticator
{
@PersistenceContext
private EntityManager em;

@In(required=false)
@Out(required=false, scope = SESSION)
private User user;

public boolean authenticate(){ ... }

}

这工作得很好,Seam 注入(inject)了 EntityManager 实例。但是,只要我添加了 @Stateless 注释,注入(inject)就不会发生!在这种情况下,EntityManager 实例在进入 authenticate() 方法时为 null。另一个有趣的注意事项是,使用我拥有的一个单独的有状态 session bean,该类中的 Logger 实例只有在我将其设为静态时才会被注入(inject)。如果我有非静态的,它不会被注入(inject)。这对记录器来说很好,但对于像这样的无状态 session bean,我显然不能为这些组件设置静态成员变量。

我很困惑,因为这个 validator 正是它在 Seam 预订示例中的样子:一个带有私有(private)成员变量的无状态 session bean 被注入(inject)。

有什么想法吗?

最佳答案

我很好奇:

However, as soon as I add the @Stateless annotation, none of the injection happens!

所以我希望您的Authenticator 接口(interface)标记 @javax.ejb.Local 或@javax.ejb.Remote。否则,您的 Stateless 将无法按预期工作。

当您拥有@Stateless Session bean 时,您必须激活Seam 拦截器 以启用@In-jection。有点像

pureCharger-jar.jar 
META-INF
ejb-jar.xml
persistence.xml

ejb-jar.xml如下所示

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
<interceptors>
<interceptor>
<interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
</interceptor>
</interceptors>
<assembly-descriptor>
<interceptor-binding>
<ejb-name>*</ejb-name>
<interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
</interceptor-binding>
</assembly-descriptor>
</ejb-jar>

如果可能的话,看看Seam Security with Dan Allen ,在 JavaOne,Seam in Action 一书的作者。

问候,

关于java - JBoss Seam : components injected into POJOs, 但不是 session Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2404299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com