首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常消息在glassfish域之间的IIOP中丢失

异常消息在glassfish域之间的IIOP中丢失
EN

Stack Overflow用户
提问于 2010-05-25 10:56:35
回答 3查看 558关注 0票数 1

我正在运行两个包含无状态会话EJB的glassfish v2域。在少数情况下,一个域中的EJB必须在另一个域中调用其中一个。

我的问题是,当被调用的EJB出现异常时,调用方不会接收到异常的消息,而是报告一个内部错误,这对诊断问题毫无帮助。发生的事情似乎是这样:

在传输层,将创建一个

  • ,它已经丢失了除其类之外的有关异常的所有详细信息。在com.sun.jts.CosTransactions.TopCoordinator.get_txcontext()中,事务单元回滚的状态会导致抛出一个org.omg.CosTransactions.Unavailable,该org.omg.CosTransactions.Unavailable会被包装和传递几次,最终导致这个错误显示给用户:

小代码:0已完成: com.sun.jts.CosTransactions.CurrentTransaction.sendingRequest(CurrentTransaction.java:807) at com.sun.jts.CosTransactions.SenderReceiver.sending_request(SenderReceiver.java:139) at com.sun.jts.pi.InterceptorImpl.send_request(InterceptorImpl.java:344) at com.sun.corba.ee.impl.interceptors.InterceptorInvoker.invokeClientInterceptorStartingPoint(InterceptorInvoker.java:271) at com.sun.corba.ee.impl.interceptors.PIHandlerImpl.invokeClientPIStartingPoint(PIHandlerImpl.java:348) at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:284) at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:184) at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:186) at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152) at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:225)

在这里,我能做些什么来保存关于问题的实际原因的信息吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-24 07:38:19

我终于搞清楚了:实际上,玻璃鱼通过IIOP传递异常是非常正确的,所有的事情都应该正常工作.除非你做了这样的蠢事:

代码语言:javascript
复制
try{
    ejb.getFoo();
}catch (Exception e){
    // try again
    ejb.getFoo();
}

是的,是我们自己的该死的代码吞没了异常,并试图调用事务--在分布式事务中调用EJB方法,而这个事务由于异常而回滚。

票数 0
EN

Stack Overflow用户

发布于 2010-05-27 15:38:01

问题的原因应该可以在承载有问题的EJB的域的服务器日志中找到。

听起来从另一端得到更多的信息可能很难.我不知道在创建/抛出ApplicationException时,哪个问题跟踪器将是正确的信息丢失。

一个总的问题是在项目中创建一组自定义异常类,其中的ejb已经失败。您将使它们非常细粒度,以涵盖问题的可能原因,并以它们的名称提供足够的详细信息,以确定问题的实际位置。真恶心..。但这可能是唯一的选择,直到一个问题被提交并分发补丁。

票数 1
EN

Stack Overflow用户

发布于 2010-05-28 18:18:10

,我能在这里做些什么来保存有关问题的实际原因的信息吗?

很遗憾,我不会。ORB不对系统异常(即org.omg.CORBA.*)使用正常的对象序列化,这意味着会导致丢失。正如@vkraemer所说,您需要依赖服务器日志。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2903938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档