(UPDATED)
@Resource注入JBoss AS中7不起作用
我已經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");
}
}
}
啓動應用程序■當erver,該方法由啓動類調用,但mailSession屬性未由容器初始化併爲空。
我在我的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>
任何想法,爲什麼郵件會話沒有容器初始化?
雖然這是一個Web應用程序,但我需要在HTTP請求之前進行一些初始化,這就是爲什麼我使用@StartUp類和其他東西。
Regards
親愛的加百列,你提到了兩點;首先感謝,因爲我不知道他們;我這樣應用它們:我用無狀態註釋定義了EmailSenderService類,使它成爲一個bean類,並且我從mailSession屬性中刪除了static關鍵字(檢查問題中的更新);我重新發布了我的項目給JBoss,但仍然是一樣的; mailSession爲null。我甚至爲testMail()方法嘗試了PostConstruct,以確保所有資源注入都已完成,但在該調用中也爲空。任何其他想法? –
問題是您正在使用自己創建的實例而非Container創建的實例: EmailSenderService emailSenderService = new EmailSenderService() 這是一個簡單的POJO,它不受容器管理,查看bean [工作] (http://docs.oracle.com/javaee/6/tutorial/doc/giplj.html) –
我檢查了你的鏈接,讓容器通過@EJB實例化EmailSenderService類,並解決了問題。謝謝 –