使用超时进行EJB调用

lil*_*ili 5 timeout java-ee ejb-3.1 glassfish-3

我有一个A调用EJB的EJB B.用户界面不应等待超过30秒的响应.如果缺少某些数据,则应返回部分响应.

如何在EJB上定义超时(30秒的时间限制)B

我可以将EJB定义BAsynchronous返回Future,然后执行Future.get(30, TimeUnit.SECONDS).但这是最好的解决方案吗?

谢谢

PS我使用glassfish 3.1

小智 5

我建议使用事务超时.

我认为没有一种标准的配置方式,因此它取决于应用服务器.我假设你想根据类或方法专门设置它.

对于WebLogic,您可以在"transaction-descriptor"中的"weblogic-ejb-jar.xml"中指定它,或使用注释"@TransactionTimeoutSeconds".

http://docs.oracle.com/cd/E12839_01/web.1111/e13719/ejb_jar_ref.htm#i1506703

http://docs.oracle.com/cd/E21764_01/web.1111/e13720/annotations.htm#i1438354

对于JBoss AS,您可以使用注释"@TransactionTimeout"或"jboss.xml"设置事务超时.

https://community.jboss.org/wiki/TransactionTimeout

我确信每个应用程序服务器中都有类似的配置选项.


Nay*_*kar 0

要为 bean 配置适用于其所有方法的超时,您必须cmt-timeout-in-seconds在 glassfish-ejb-jar.xml 中配置该属性。

该超时值由启动新事务的 bean 的所有方法使用,当它们加入其他正在进行的事务时不适用。

也可以参考此链接以获取有关超时的更多详细信息。