Jakarta ee @JBossAS7中的资源注入不';行不通

Jakarta ee @JBossAS7中的资源注入不';行不通,jakarta-ee,jboss,resources,code-injection,Jakarta Ee,Jboss,Resources,Code Injection,(更新) 我已经在jboss-as-7.1.1.Final上部署了一个web应用程序作为独立的,我有一个启动类需要初始化,如下所示,该类运行良好: @Startup @Singleton public class StartupBean { @PostConstruct void init() { EmailSenderService emailSenderService = new EmailSenderService(); emailSe

(更新)

我已经在jboss-as-7.1.1.Final上部署了一个web应用程序作为独立的,我有一个启动类需要初始化,如下所示,该类运行良好:

@Startup  
@Singleton  
public class StartupBean {  

    @PostConstruct  
    void init() {  
    EmailSenderService emailSenderService = new EmailSenderService();
    emailSenderService.testMail();
    }
}
问题出现在另一类中,定义如下:

@Stateless
public class EmailSenderService {

    @Resource(mappedName="java:jboss/mail/Default")
    private Session mailSession;

    @PostConstruct
    public void testMail(){
        if(mailSession == null){
            System.out.println("NULL"); 
        }
    }
}
启动应用程序服务器时,该方法由startup类调用,但是容器未初始化mailSession属性,该属性为null

我的JBoss standalone.xml中有以下配置:

<subsystem xmlns="urn:jboss:domain:mail:1.0">
    <mail-session jndi-name="java:jboss/mail/Default">
        <smtp-server outbound-socket-binding-ref="mail-smtp">
        </smtp-server>
    </mail-session>
</subsystem>

知道为什么mailSession没有被容器初始化吗

虽然这是一个web应用程序,但我需要在HTTP请求之前进行一些初始化,这就是我使用@StartUp类和其他东西的原因


@Resource注释必须在bean类中使用。在您的情况下,
EmailSenderService
它只是被EJB容器忽略了

16.4.1.1使用注释输入简单环境条目

Bean提供者使用资源注释将Bean类的字段或方法注释为目标 用于注入一个简单的环境条目

还要注意,该字段不能是静态的

16.2.2环境条目说明

字段或方法可以有任何访问限定符(public、private等),但不能是静态的


亲爱的加布里埃尔,你提到了两点;首先谢谢,因为我不认识他们;我以这种方式应用了它们:我用无状态注释定义了EmailSenderService类,使其成为一个bean类,并从mailSession属性中删除了static关键字(检查问题中的更新);我将我的项目重新发布到JBoss,但仍然是一样的;mailSession为空。我甚至尝试了testMail()方法的PostConstruct,以确保所有资源注入都已完成,但在该调用中也是null。还有其他想法吗?问题是您正在使用一个由您自己而不是容器创建的实例:EmailSenderService EmailSenderService=new EmailSenderService()这是一个不由容器管理的简单POJO,看看我是如何检查您的链接并让容器通过@EJB实例化EmailSenderService类的,问题解决了。谢谢