在Liferay模型监听器中生成代码异步(使用并发)

时间:2013-06-12 07:33:29

标签: liferay listener liferay-6 liferay-hook

问题

我们的liferay系统是与其他网络应用程序同步数据的基础 我们为此目的使用Model Listeners 通过侦听器进行了大量的Web服务调用和数据库更新,因此liferay中的特定操作太慢了。

例如: 在liferay中添加User时,我们需要激活许多Web服务调用以添加用户详细信息并使用userdata更新其他系统,还需要一些liferay自定义表。因此添加用户需要花费大量时间,在极少数情况下,请求可能会超时! 由于UserListener中的代码仅取决于用户详细信息,即使UserListener中存在任何异常,用户也会在Liferay中添加,我们已经考虑过以下解决方案。

我们在liferay中也有一个调度程序,如果在监听器中执行代码时出现异常,则会修复事情。

建议的解决方案

我们考虑过使用Concurrency API使UserListener中的代码异步。

所以这是我的问题:

  1. 是否建议在模型侦听器中使用并发代码?
  2. 如果是,那么如果我们还通过此代码更新Liferay自定义表格会产生任何不利影响,例如交易或其他内容吗?
  3. 这种方法的其他一般优点和缺点是什么?
  4. 还有其他更好的方式我们可以在不妨碍用户体验的情况下对其他系统进行实时更新吗?
  5. 感谢您对此事的任何帮助

1 个答案:

答案 0 :(得分:2)

有意义的是,您希望使用并发来解决此问题。

除了对用户体验产生的影响之外,在修改模型的线程中进行密集的工作(如调用Web服务等)并不是一个好主意。

在模型的侦听器中触发线程可能有些复杂且难以维护。

您可以使用Liferay的消息总线范例进行探索,您可以在其中向已断开连接的消息接收器发送消息,然后该消息接收器将执行模型侦听器调用线程之外的所有密集工作。

在此处阅读有关消息总线的更多信息:

  1. Message Bus Developer Guide
  2. Message Bus Wiki