我一直无法从我在 grails 2.0.3 上开发的独立客户端访问我的 EJB 服务。EJB 服务部署在 glassfish 服务器 (Java) 上。我在 netbeans 测试器类上测试了这段代码以访问 EJB:
Properties p = new Properties();
p.put("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
p.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
p.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
p.setProperty("org.omg.CORBA.ORBInitialHost", INTEGRATION_IP);
p.setProperty("org.omg.CORBA.ORBInitialPort", CORBA_PORT);
ctx = new InitialContext(p);
try {
this.admAuth = (AdmAuthenticationRemote) this.ctx.lookup(Tester.AUTHENTICATION_SERVICE_JNDI);
}catch(Exception e){
...
}
这Tester.AUTHENTICATION_SERVICE_JNDI
是一个包含已部署服务的路径的变量,在这种情况下,类似的东西"java:global/..."
表示正在请求的服务的地址。这种访问服务的方式在测试人员中非常有效,但是当我尝试从 grails 中做同样的事情时就不起作用了。我能够以相同的方式创建上下文,但是当我调用调用时ctx.lookup()
出现异常:
Message: Lookup failed for 'java:global/...' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory,
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
Cause: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory,
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}
[Root exception is java.lang.RuntimeException: Orb initialization erorr]
主要的异常是命名异常,表示在 中失败ctx.lookup()
,但原因是orb初始化异常,还有一个异常栈:
java.lang.RuntimeException: Orb initialization erorr
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: Can not set long field com.sun.corba.ee.impl.orb.ORBDataParserImpl.waitForResponseTimeout to java.lang.Integer
Caused by: java.lang.IllegalArgumentException: Can not set long field com.sun.corba.ee.impl.orb.ORBDataParserImpl.waitForResponseTimeout to java.lang.Integer
我真的迷路了。我一直有很多问题要让这件事继续下去,我必须得到所有 glassfish 罐子(库和模块)才能InitialContext()
打电话,但现在我不确定这是否仍然是罐子问题或配置问题或它是什么。
我知道IllegalArgumentException
当你尝试在java中分配不兼容的类型时会发生这种情况,但我没有设置类似的东西,所以我假设它是一个内部方法初始化。
所以问题是为什么会出现这个异常?
是否有另一种方法可以更好地从 grails 调用我的服务?