環境:Glassfish和javax.naming.NameNotFoundException後的應用程序重新加載
GlassFish應用服務器版4.1
禁用,不可移植,JNDI的名字:真
問題:
當我部署或重新部署我的應用程序 - 一切正常。 但經過刷新或禁用/啓用以下從獨立的客戶端連接時出現異常:在線程
異常「主要」 javax.naming.NamingException中:查找失敗的Java:全球/ SynisBackendEAR/SynisBackend/UnitronicsDriver「 javax.naming.NameNotFoundException:...
...
所致UnitronicsDriver沒有發現......
...
引起:java.lang.IllegalStateException:異常試圖注入本地EJB-REF名稱= com.protechnologia.synis.drivers.unitronics.UnitronicsDriver/configurationProvider,本地3.X接口= com.protechnologia.synis.settings.ConfigurationProvider ,EJB鏈路= NULL,查找= java的:應用程序/ SynisBackend/ConfigurationProviderXML,mappedName =,JNDI名稱=,RefType的=會話到類com.protechnologia.synis.drivers.unitronics.UnitronicsDriver:對象不是聲明的一個實例類
...
獨立的客戶端的代碼:
InitialContext ctx = new InitialContext();
Driver bean = (Driver) ctx.lookup("java:global/SynisBackendEAR/SynisBackend/UnitronicsDriver");
bean.test();
我想提一下,在部署或重新部署之後,一切正常。
線索:
我發現taht問題是出在以下查找taht正在Deplyment否則不工作:
@Singleton
@Startup
public class UnitronicsDriver implements Driver {
@EJB(lookup = "java:app/SynisBackend/ConfigurationProviderXML")
protected ConfigurationProvider conf;
下一個線索:
用手動查找替換@EJB解決了這個問題,但爲什麼?
conf = (ConfigurationProvider) ctx.lookup("java:app/SynisBackend/ConfigurationProviderXML");