环境:
GlassFish Server开源4.1版
disable-nonportable-jndi-names:true
问题:
当我部署或重新部署我的应用程序时 - 一切正常。 但是在从独立客户端连接期间出现重新加载或禁用/启用后出现异常:
线程中的异常" main" javax.naming.NamingException:查找失败的' java:global / SynisBackendEAR / SynisBackend / UnitronicsDriver' ...
...
引起:javax.naming.NameNotFoundException:未找到UnitronicsDriver ...
...
引起:java.lang.IllegalStateException:尝试注入Local ejb-ref name = com.protechnologia.synis.drivers.unitronics.UnitronicsDriver / configurationProvider,Local 3.x interface = com.protechnologia.synis.settings的异常。 ConfigurationProvider,ejb-link = null,lookup = java:app / SynisBackend / ConfigurationProviderXML,mappedName =,jndi-name =,refType =类com.protechnologia.synis.drivers.unitronics.UnitronicsDriver中的会话:对象不是声明类的实例
...
独立客户端的代码:
InitialContext ctx = new InitialContext();
Driver bean = (Driver) ctx.lookup("java:global/SynisBackendEAR/SynisBackend/UnitronicsDriver");
bean.test();
我想提一下,在部署或重新部署之后一切正常。
线索:
我发现问题出在以下查询中,正在处理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");
答案 0 :(得分:0)
终于 - 发现了!!!
问题是,我想注入的EJB是实现 @Remote 接口而不是 @Local 。
它可能与@Remote interdaces的传递引用问题有关。