You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK 17下WebSphere Liberty BASE远程EJB调用失败求助

问题描述

在两个独立VM部署的JavaEE应用间发起远程EJB调用时,主应用发起远程EJB查找后,服务器控制台抛出如下错误堆栈:

[err] Exception in thread "Yoko:ThreadPerRequest:Dispatcher" 
[err] java.lang.NoClassDefFoundError: Could not initialize class org.apache.yoko.orb.OB.SendingContextRuntimes
[err]   at org.apache.yoko.orb.OB.CollocatedServer.send(CollocatedServer.java:231)
[err]   at org.apache.yoko.orb.OB.CollocatedServer.sendReceive(CollocatedServer.java:295)
[err]   at org.apache.yoko.orb.OB.CollocatedClient.sendReceive(CollocatedClient.java:144)
[err]   at org.apache.yoko.orb.OB.Downcall.request(Downcall.java:300)
[err]   at org.apache.yoko.orb.OB.DowncallStub.invoke(DowncallStub.java:615)
[err]   at org.apache.yoko.orb.CORBA.Delegate.invoke(Delegate.java:403)
[err]   at org.apache.yoko.orb.CORBA.Delegate.is_a(Delegate.java:252)
[err]   at org.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:54)
[err]   at org.omg.CosNaming.NamingContextHelper.narrow(NamingContextHelper.java:68)
[err]   at org.apache.yoko.orb.CosNaming.tnaming2.NamingContextImpl$POAServant.resolveObject(NamingContextImpl.java:291)
[err]   at org.apache.yoko.orb.CosNaming.tnaming2.NamingContextBase.resolveContext(NamingContextBase.java:567)
[err]   at org.apache.yoko.orb.CosNaming.tnaming2.NamingContextBase.resolve(NamingContextBase.java:266)
[err]   at org.omg.CosNaming.NamingContextExtPOA._invoke(NamingContextExtPOA.java:366)
[err]   at org.apache.yoko.orb.OBPortableServer.ServantDispatcher.dispatch(ServantDispatcher.java:189)
[err]   at org.apache.yoko.orb.OBPortableServer.POA_impl._OB_dispatch(POA_impl.java:1245)
[err]   at org.apache.yoko.orb.OB.DispatchRequest_impl.invoke(DispatchRequest_impl.java:56)
[err]   at org.apache.yoko.orb.OB.DispatchThreadPerRequest_impl$Dispatcher.run(DispatchStrategyFactory_impl.java:70)
[err] Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.ExceptionInInitializerError [in thread "Default Executor-thread-19"]
[err]   at org.apache.yoko.rmi.impl.TypeRepository.get(TypeRepository.java:260)
[err]   at org.apache.yoko.rmi.impl.ValueHandlerImpl.<init>(ValueHandlerImpl.java:62)
[err]   at org.apache.yoko.rmi.impl.ValueHandlerImpl.<init>(ValueHandlerImpl.java:52)
[err]   at org.apache.yoko.rmi.impl.ValueHandlerImpl$HandlerHolder.<clinit>(ValueHandlerImpl.java:67)
[err]   at org.apache.yoko.rmi.impl.ValueHandlerImpl.get(ValueHandlerImpl.java:73)
[err]   at org.apache.yoko.rmi.impl.UtilImpl.createValueHandler(UtilImpl.java:460)
[err]   at javax.rmi.CORBA.Util.createValueHandler(Util.java:63)
[err]   at org.apache.yoko.orb.OB.SendingContextRuntimes.<clinit>(SendingContextRuntimes.java:30)
[err]   at org.apache.yoko.orb.OB.CollocatedServer.send(CollocatedServer.java:231)
[err]   at org.apache.yoko.orb.OB.CollocatedServer.sendReceive(CollocatedServer.java:295)
[err]   at org.apache.yoko.orb.OB.CollocatedClient.sendReceive(CollocatedClient.java:144)
[err]   at org.apache.yoko.orb.OB.Downcall.request(Downcall.java:300)
[err]   at org.apache.yoko.orb.OB.DowncallStub.invoke(DowncallStub.java:615)
[err]   at org.apache.yoko.orb.CORBA.Delegate.invoke(Delegate.java:403)
[err]   at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:81)
[err]   at com.ibm.ws.threading.internal.PolicyTaskFutureImpl.run(PolicyTaskFutureImpl.java:762)
[err]   at com.ibm.ws.threading.internal.PolicyExecutorImpl.runTask(PolicyExecutorImpl.java:1172)
[err]   at com.ibm.ws.threading.internal.PolicyExecutorImpl$GlobalPoolTask.run(PolicyExecutorImpl.java:198)
[err]   at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[err]   at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[err]   at java.base/java.lang.Thread.run(Thread.java:833)

注:两个JavaEE应用均部署在JDK 17环境中,远程EJB查找代码如下:

Context ctx = new InitialContext(jndiProps);
Object remoteObj = ctx.lookup("corbaname:iiop:10.0.0.127:2809/NameService#ejb/global/app_server_2/RMS.jar/OMSCoreServicesBean#com.dfn.oms.newgen.core.tx.service.OMSCoreServicesWrapperRemote");
return (OMSCoreServicesWrapperRemote) PortableRemoteObject.narrow(remoteObj, OMSCoreServicesWrapperRemote.class);
解决方案
  • 确保Yoko ORB依赖完整一致:错误根源是org.apache.yoko.orb.OB.SendingContextRuntimes类初始化失败,需检查两个应用的类路径,确认包含完整的Yoko ORB核心依赖包(如yoko-orb-core、yoko-rmi-impl等),且两端依赖版本完全一致,避免缺失或版本冲突。
  • 验证Yoko与JDK 17的兼容性:部分旧版Yoko ORB对JDK 17支持不足,需升级到官方标注支持JDK 17的Yoko稳定版本。
  • 调整线程上下文类加载器:在发起EJB查找前,显式设置线程上下文类加载器为当前应用的类加载器,避免跨线程类加载异常:
    Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
    
  • 检查JNDI配置准确性:确认客户端JNDI属性(如java.naming.factory.initial、java.naming.provider.url)配置正确,确保能正常连接到远程服务器的Naming Service,避免因连接问题触发内部类加载错误。
  • 排除CORBA实现冲突:若应用中存在其他CORBA/ORB实现(如Sun ORB、JacORB),需排除这些冲突依赖,确保仅使用Yoko ORB作为CORBA提供者,避免不同实现的类相互干扰。

内容的提问来源于stack exchange,提问作者Rangana Jayawardhena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:17:16