我有一个奇怪的问题,这里是系统的快速快照:我有一个调用本地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中的方法,一两秒钟后,我可以在日志文件中看到,例如。'结果内部bean调用:0231423',这意味着远程bean返回的结果,但我不得不等待有时5-6分钟,直到我看到我的web应用程序中的结果(语句'LOG.debug("结果是:" +结果);')。将结果传递给web应用程序需要这么长时间,是事务提交(本地bean有"Required")吗?
我可以在weblogic配置xml文件中看到,事务超时设置为1800秒,但如果结果准备好直接返回真的很重要吗?
正如预期的那样,它实际上是由容器等待提交事务引起的。