在 CORBA 程序中调用 createEntityManager 会导致异常:org.omg.CORBA.OBJECT_NOT_EXIST

Posted

技术标签:

【中文标题】在 CORBA 程序中调用 createEntityManager 会导致异常:org.omg.CORBA.OBJECT_NOT_EXIST【英文标题】:Calling createEntityManager in CORBA program causes exception: org.omg.CORBA.OBJECT_NOT_EXIST 【发布时间】:2014-09-10 12:46:50 【问题描述】:

我有一个运行良好的 CORBA 客户端-服务器程序。客户端可以远程获取一个servant并调用方法。

我现在想让服务器使用 JPA 与数据库交互。但是,当我将这一行添加到服务器代码时,一切都出错了:

emf.createEntityManager();

服务器构建,它注册到 orbd 没有错误。但是,当我运行尝试与服务器连接的客户端时,出现以下异常:

例外:org.omg.CORBA.OBJECT_NOT_EXIST:

完整的异常和堆栈跟踪是:

异常:org.omg.CORBA.OBJECT_NOT_EXIST: ----------BEGIN 服务器端堆栈跟踪---------- org.omg.CORBA.OBJECT_NOT_EXIST:vmcid:SUN 次要代码:401 已完成:否 在 com.sun.corba.se.impl.logging.ActivationSystemException.errorInBadServerIdHandler(ActivationSystemException.java:239) 在 com.sun.corba.se.impl.logging.ActivationSystemException.errorInBadServerIdHandler(ActivationSystemException.java:257) 在 com.sun.corba.se.impl.activation.ServerManagerImpl.handle(ServerManagerImpl.java:604) 在 com.sun.corba.se.impl.orb.ORBImpl.handleBadServerId(ORBImpl.java:1602) 在 com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.checkServerId(CorbaServerRequestDispatcherImpl.java:407) 在 com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:182) 在 com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1700) 在 com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1558) 在 com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:940) 在 com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:198) 在 com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:712) 在 com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:471) 在 com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1230) 在 com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:490) 在 com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:519) 引起:com.sun.corba.se.spi.activation.ServerNotRegistered: IDL:activation/ServerNotRegistered:1.0 在 com.sun.corba.se.impl.activation.RepositoryImpl.getDBServerDef(RepositoryImpl.java:221) 在 com.sun.corba.se.impl.activation.RepositoryImpl.getServer(RepositoryImpl.java:228) 在 com.sun.corba.se.impl.activation.ServerManagerImpl.getEntry(ServerManagerImpl.java:350) 在 com.sun.corba.se.impl.activation.ServerManagerImpl.handle(ServerManagerImpl.java:566) ... 12 更多

在我看来,对 createEntityManager 的调用在逻辑上与 CORBA 网络功能完全分开,因此我看不出这会对连接到服务器的客户端产生什么影响。

【问题讨论】:

也许如果您提供完整的堆栈跟踪,那么有人可以看到它来自哪里? @BillyFrost 我已经对其进行了编辑以包含完整的堆栈跟踪 我会更感兴趣的是什么是“12 more”......因为它的根源是启动它的用户调用 @BillyFrost 我在 Netbeans,这就是我看到的全部内容。我不知道如何扩展'12 more'。 【参考方案1】:

异常来自我的 EntityManagerFactory。它与网络无关,但是因为在客户端连接之前我从未运行过服务器,所以在那之前没有发生异常。

异常输出并不是特别有用。我发现注释掉所有网络代码并将服务器作为开发中的独立程序运行是很有帮助的(当出现问题时会提供更多有用的错误消息)。

【讨论】:

以上是关于在 CORBA 程序中调用 createEntityManager 会导致异常:org.omg.CORBA.OBJECT_NOT_EXIST的主要内容,如果未能解决你的问题,请参考以下文章

CORBA IIOPNet 和 OmniORBpy,带有值类型参数的远程方法调用问题

Corba(例如 TAO)、Thrift、D-Bus、ICE 等框架的进程调用性能

CORBA:服务器作为客户端

org.omg.CORBA:MARSHAL & org.omg.CORBA.BAD_PARAM 错误

Java 以下两个要求 怎么在Java中以程序的方式实现? (围绕CORBA和IOR)

CORBA 架构体系指南(通用对象请求代理体系架构)