Glassfish和javax.naming.NameNotFoundException后的应用程序重新加载
环境: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");
最后 - 发现它!
的问题是,我想在注入东西EJB正在实施@Remote接口而不是@Local。
它可能与@Remote interdaces引用传递引用问题有关。