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

时间:2011-07-21 06:33:25

标签: java-ee ejb-2.x weblogic8.x

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

以下是处理示例:

网络应用程序:

//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);

我在ejb应用程序中的本地bean上启用了日志记录:

log.debug("state " + state);

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

log.debug("result inside bean call: " + res);

其中'session'是对远程bean的引用。

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

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

1 个答案:

答案 0 :(得分:2)

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