2014-12-06 73 views
1

环境: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"); 

回答

0

最后 - 发现它!

的问题是,我想在注入东西EJB正在实施@Remote接口而不是@Local

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