在调用EJB方法之后,我需要异步执行一些内容。这一需求似乎在EJB3.1中得到了满足,但不幸的是,我们还没有实现,必须使用3.0版本。
你认为最简单的方法是什么?有没有警告?我可以想到以下方法:
这需要在单个Weblogic服务器上工作。不会有任何巨大的负载或大规模的并行处理,我只是想要它漂亮和简单。
发布于 2010-06-09 14:56:22
您必须首先决定是否要处理异步事务。也就是说,如果常规EJB方法事务失败,异步事件是否仍然会被触发。
JMS和TimerService是事务性的。Spring TaskExecutor,可能不是(我应该再检查一遍)。
使用Timer,您可以延迟执行该事件(即使为0),以便在EJB方法返回后,异步事件立即在后台运行。如果异步事件失败,则计时器服务尝试重新运行它几次。
使用JMS,您无法严格控制何时处理该事件。一旦消息被发送,您就知道它最终将被处理,但是从理论上讲,代理可以推迟它的处理来管理负载。
我不知道您的特定用例,但是如果负载不是问题,而且使用起来很容易,那么使用TimerService似乎是一个很好的选择。
发布于 2010-06-09 17:07:22
WorkManager正是为此目的而设计的,并且本机由WebSphere和WebLogic支持。其他应用服务器也有其他实现。
它设计为在仍然允许服务器管理线程的同时执行异步工作。
https://stackoverflow.com/questions/3006832
复制相似问题