需要在环境或系统属性错误中指定类名

时间:2014-07-19 02:37:50

标签: maven glassfish glassfish-4 netbeans-8

测试从独立客户端远程EJB到调用glassfish服务器4中部署的jar文件,但它向我显示以下消息:

Grave: null
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
    at javax.naming.InitialContext.lookup(InitialContext.java:411)
    at mx.com.gm.sga.cliente.ClientePersonaService.main(ClientePersonaService.java:39)

我的代码是:

public static void main( String[] args )
{
    System.out.println("------------Calling EJB from a client --------------- ");
    try {
        InitialContext jndi = new InitialContext( );

        PersonaServiceRemote personaService = (PersonaServiceRemote) jndi.lookup( "java:global/sga-jee/PersonaServiceImpl!mx.com.gm.sga.servicio.PersonaServiceRemote" );
        List< Persona > personas = personaService.listarPersonas();
        for (Persona persona : personas) {
            System.out.println( persona );
        }
    } catch (NamingException ex) {
        Logger.getLogger(ClientePersonaService.class.getName()).log(Level.SEVERE, null, ex);
    }

    System.out.println("------------End calling EJB --------------- ");
}

2 个答案:

答案 0 :(得分:0)

JNDI允许不同的提供商。对于初始上下文,使用系统属性java.naming.factory.initial指定实际实现的名称。对于根据FAQ的GlassFish,您不需要这样做。但我认为它要求您添加正确的glassfish客户端库,以使其适用于默认上下文:$GLASSFISH_HOME/glassfish/lib/gf-client.jar。查看常见问题解答,它列出了一些不同的案例(独立,应用客户端,第二个应用服务器......)。

答案 1 :(得分:0)

错误是针对: 持久性单元中的JDTA连接。 我将持久性单元配置为JDTA,我在GlassFish中创建了池连接,整个工作正常。 ;)