测试从独立客户端远程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 --------------- ");
}
答案 0 :(得分:0)
JNDI允许不同的提供商。对于初始上下文,使用系统属性java.naming.factory.initial
指定实际实现的名称。对于根据FAQ的GlassFish,您不需要这样做。但我认为它要求您添加正确的glassfish客户端库,以使其适用于默认上下文:$GLASSFISH_HOME/glassfish/lib/gf-client.jar
。查看常见问题解答,它列出了一些不同的案例(独立,应用客户端,第二个应用服务器......)。
答案 1 :(得分:0)
错误是针对: 持久性单元中的JDTA连接。 我将持久性单元配置为JDTA,我在GlassFish中创建了池连接,整个工作正常。 ;)