Jakarta ee EJB方法处理在执行期间挂起

Jakarta ee EJB方法处理在执行期间挂起,jakarta-ee,ejb-2.x,weblogic8.x,Jakarta Ee,Ejb 2.x,Weblogic8.x,我有一个奇怪的问题,这里是系统的一个快速快照:我有一个调用本地EJB bean的web应用程序,让我们调用本地EJB“LocalEJB”,这个EJB调用远程EJB-“RemoteEJB”方法,该方法对外部系统进行一些处理并返回字符串结果。所有这些都发生在Weblogic 8.1中 下面是一个处理示例: Web应用程序: //create reference to the local bean locHome = (LocalHome)ServiceLocator.getInstance().

我有一个奇怪的问题,这里是系统的一个快速快照:我有一个调用本地EJB bean的web应用程序,让我们调用本地EJB“LocalEJB”,这个EJB调用远程EJB-“RemoteEJB”方法,该方法对外部系统进行一些处理并返回字符串结果。所有这些都发生在Weblogic 8.1中

下面是一个处理示例:

Web应用程序:

//create reference to the local bean  
locHome = (LocalHome)ServiceLocator.getInstance().getLocalHome("ejb/localejb");

beanRef = locHome.create();  //call the bean method  
String result = beanRef.updateSmth(data.getId(),data.getRelatedIds(),Integer.valueOf(data.getState()));

//print the result  
LOG.debug("result is: " + result);
log.debug("state " + state);

res = session.updateSmth(id, relatedIds, state);

log.debug("result inside bean call: " + res);
我在ejb应用程序内部的本地bean上启用了日志记录:

//create reference to the local bean  
locHome = (LocalHome)ServiceLocator.getInstance().getLocalHome("ejb/localejb");

beanRef = locHome.create();  //call the bean method  
String result = beanRef.updateSmth(data.getId(),data.getRelatedIds(),Integer.valueOf(data.getState()));

//print the result  
LOG.debug("result is: " + result);
log.debug("state " + state);

res = session.updateSmth(id, relatedIds, state);

log.debug("result inside bean call: " + res);
其中“session”是对远程bean的引用

现在发生了什么,请求到达应用程序,执行方法'beanRef.updateSmth',这调用本地ejb中的方法,一两秒钟后,我可以在日志文件中看到,例如'result inside bean call:0231423',这意味着远程bean返回了结果,但有时我不得不等待5-6分钟,直到我在web应用程序中看到结果(语句“LOG.debug”(“result is:“+result”);)。 将结果传递给web应用程序需要这么长时间,是事务提交(本地bean具有“必需”)吗


我可以在weblogic配置xml文件中看到,事务超时设置为1800秒,但如果结果准备好立即返回,这真的很重要吗?

正如预期的那样,它实际上是由容器等待提交事务引起的。数据库记录被锁定,阻止容器提交事务,导致最终超时。

很抱歉,无法更好地格式化源代码。我建议获取堆栈跟踪或使用探查器或调试器来缩小问题范围。这里可能没有足够的信息让某人能够解决这个问题。