我提前道歉,因为英语不是我的母语。我在测试与提供 ejb 服务的 java 服务器应用程序连接的独立客户端(使用 grails - groovy 框架创建)时遇到了一些麻烦。
我尝试通过 corba 和 wsdl 进行连接,两种方式都无法初始化上下文( ),因为它说我在运行我的应用程序(使用嵌入式 jetty grails 服务器)时InitialContext
缺少一些类( )。NoClassDefFoundError
我确信这个类应该在类路径中,因为我有一个包含它的 jar,并且这个 jar 在类路径中,作为我的 grails 应用程序的 lib 文件夹中的文件。
这就是我尝试初始化 bean 以调用服务的方式:
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory")
p.setProperty("org.omg.CORBA.ORBInitialHost", iProperties.getINTEGRATION_IP())
p.setProperty("org.omg.CORBA.ORBInitialPort", iProperties.getCORBA_PORT())
try{
ctx = new InitialContext(p)
authWS = (AdmAuthenticationRemote) ctx.lookup(AUTHENTICATION_SERVICE_JNDI); // CORBA
} catch(Throwable e){
ctx = new InitialContext(p)
authenticationWS = (AdmAuthenticationRemote) ctx.lookup(REMOTE_CLASS_PACKAGE_NAME) // WSDL
}
上面的代码没有';' 因为 groovy 不需要它们来运行 java 代码。我在一个 netbeans 环境小应用程序中测试了这段代码,并且都有效。当我尝试在我的 grails 应用程序中执行此操作时,问题就出现了。
这是我尝试调用任何服务时遇到的错误:
NoClassDefFoundError: org/jvnet/hk2/component/MultiMap
当然这不是完整的堆栈,但这是问题原因(由堆栈引起)。此类 ( org.jvnet.hk2.component.MultiMap
) 包含在文件中auto-depends.jar
(来自 glassfish 的 jar)。我尝试将gf-client.jar
and appserv-rt.jar
(glassfish jars too) 添加到 lib 中,以便应用程序将所有 glassfish jars 调用到类路径中,但这不起作用,我发现在独立应用程序中包含类的 jars 应该手动添加(甚至你我只是appserv-rt.jar
在 netbeans 测试文件中添加并工作!)所以我将此 jar 添加到我的 lib 文件夹中:
appclient.security.jar
auto-depends.jar
common-util.jar
config-api.jar
config.jar
config-types.jar
connectors-admin.jar
connectors-inbound-runtime.jar
connectors-internal-api.jar
connectors-runtime.jar
container-common.jar
deployment-common.jar
dol.jar
ejb-container.jar
ejb-internal-api.jar
ejb.security.jar
glassfish-api.jar
glassfish-corba-asm.jar
glassfish-corba-codegen.jar
glassfish-corba-csiv2-idl.jar
glassfish-corba-newtimer.jar
glassfish-corba-omgapi.jar
glassfish-corba-orbgeneric.jar
glassfish-corba-orb.jar
glassfish.jar
glassfish-naming.jar
gmbal.jar
hk2-core.jar
internal-api.jar
javax.ejb.jar
kernel.jar
management-api.jar
orb-connector.jar
orb-enabler.jar
orb-iiop.jar
security.jar
tiger-types-osgi.jar
当然,我也有带有远程接口和服务对象的 jar,我需要访问 glassfish 服务器中的服务。即使我这样做,这个错误也会不断发生。我没有想法,被这个问题困在这里,不知道如何解决它。我的问题是如何解决这个异常?是grails的问题吗??我没有配置一些 grails 文件吗?请任何想法将不胜感激。
提前致谢
凯文
更新:我也发现,如果我运行 clean 和 compile 命令,我会得到这个错误而不是之前的错误:
java.lang.ClassNotFoundException: org.jvnet.hk2.component.Inhabitant
我不确定为什么会发生这种情况,但是当我重新启动服务器(没有干净编译)时,它给出了以前的错误。