1

我有一个奇怪的问题,这是系统的快速快照:我有一个调用本地 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);

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

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: " +结果);')。将结果传递给 Web 应用程序需要这么长时间,是事务提交(本地 bean 具有“必需”)吗?

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

4

1 回答 1

2

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

于 2011-08-16T19:11:11.843 回答