0

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

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

2 回答 2

0

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

于 2015-04-10T15:53:33.190 回答
0

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

于 2014-07-19T02:57:11.003 回答