(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类和其他东西的原因。
此致
答案 0 :(得分:1)
@Resource注释必须在bean类中使用。在您的情况下,EmailSenderService
中定义的注释
它只是被EJB容器忽略了。
According to ejb 3.1 specification:
16.4.1.1使用注释注入简单环境条目。
Bean Provider使用Resource注释来注释 bean类的字段或方法作为目标 用于注入简单的环境条目。
另请注意,该字段不得为静态。
16.2.2环境条目的注释。
字段或方法可以具有任何访问限定符(公共,私有等),但不能是静态的。