JBOSS AS 7中的@Resource注入不起作用

时间:2014-02-09 07:33:31

标签: java-ee jboss resources code-injection

(UPDATED)

我已经在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"); 
        }
    }
}

启动应用程序服务器时,该方法由启动类调用,但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类和其他东西的原因。

此致

1 个答案:

答案 0 :(得分:1)

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

According to ejb 3.1 specification:

  

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

     

Bean Provider使用Resource注释来注释 bean类的字段或方法作为目标   用于注入简单的环境条目。

另请注意,该字段不得为静态。

  

16.2.2环境条目的注释。

     

字段或方法可以具有任何访问限定符(公共,私有等),但不能是静态的。