应用重新加载后的Glassfish和javax.naming.NameNotFoundException

时间:2014-12-06 09:26:38

标签: java-ee glassfish ejb

环境:

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");

1 个答案:

答案 0 :(得分:0)

终于 - 发现了!!!

问题是,我想注入的EJB是实现 @Remote 接口而不是 @Local

它可能与@Remote interdaces的传递引用问题有关。