在EJB 2会话Bean中使用单点登录功能

时间:2017-09-14 05:58:48

标签: java ejb websphere-8 ejb-2.x

我正在处理处理采购订单的申请 此应用程序构建在EJB1上并在IBM Websphere上运行 我有一个需要解决的方案/问题。

Stateless Session Bean处理一堆订单(通常订单数约为5K)。我想让这个功能同步 即,如果其中一个用户激活订单处理,则在第一个处理完成之前,其他任何用户都不能启动该过程。

由于某些限制,我无法将其升级到EJB3 有没有有效的方法来解决这个问题? 我希望任何提供的解决方案都需要更少的代码更改..

1 个答案:

答案 0 :(得分:1)

答案实际上取决于订单的存在位置/存储方式,以及有多少并发运行的服务器实例可以启动订单处理。

如果订单仅存在于内存中(似乎不太可能)或者只有一个应用程序服务器进程正在运行来执行此功能,那么您只需向无状态会话bean类添加一个静态字段并对其进行同步。这将提供类似于EJB 3.x单例bean的功能。

但是,如果同一个应用程序在多个应用程序服务器实例上并发运行,那么即使单个bean也不适合您,因为每个服务器仍然有一个实例,因此不会跨进程同步。在这种情况下,您确实需要让无状态bean获取存储订单的锁定。例如,如果您的订单存储在DB2数据库的行中,那么您可以将另一个表添加到同一个数据库中只有一行,并且无状态bean需要获取该行的行锁才能处理订单。这提供了跨进程的同步(假设所有应用程序服务器实例都访问相同的共享数据库)。