JBoss Seam:组件注入 POJO,但不注入会话 Bean

2024-04-11

我有一个处理登录的 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 注入了 EntityManager 实例。但是,一旦我添加@Stateless注释,没有任何注入发生!在这种情况下,EntityManager 实例在进入时为 nullauthenticate()方法。另一个有趣的注意事项是,对于我拥有的单独的有状态会话 bean,只有当我将其设为静态时,才会注入该类中的 Logger 实例。如果我有它非静态的,它不会被注入。这对于记录器来说很好,但是对于像这样的无状态会话 bean,我显然不能为这些组件提供静态成员变量。

我很困惑,因为这个验证器正是 Seam 预订示例中的样子:一个带有被注入的私有成员变量的无状态会话 bean。

有任何想法吗?


我好奇:

然而,一旦我添加@Stateless注释,没有任何注射发生!

So i hope您的身份验证器界面被标记与@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>

如果可以的话,看一下Dan Allen 的接缝安全 http://www.jboss.org/events/javaone/javaoneVideo3.html,JavaOne 的《Seam in Action》一书的作者。

regards,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JBoss Seam:组件注入 POJO,但不注入会话 Bean 的相关文章

随机推荐