Java 使用远程EJB和Web服务保持状态
我有一个基于web的应用程序,它将远程EJB用于其业务逻辑。其中一些EJB还作为Web服务公开。我需要为其中一些调用保持一个较小的状态,以便允许后续调用正常运行。你会推荐以下哪一项Java 使用远程EJB和Web服务保持状态,java,web-services,ejb-3.0,state,Java,Web Services,Ejb 3.0,State,我有一个基于web的应用程序,它将远程EJB用于其业务逻辑。其中一些EJB还作为Web服务公开。我需要为其中一些调用保持一个较小的状态,以便允许后续调用正常运行。你会推荐以下哪一项 有状态EJB(这是否适用于Web服务?) 将状态返回给客户端(如果我想阻止客户端更改状态怎么办?) 在每个方法上从DB重新加载状态(我应该担心开销吗?) 所有三种建议的解决方案都可以发挥作用,但最佳解决方案将取决于您的应用程序的细节 我根本不使用有状态会话bean(SFSB)。SFSB的设计目的是保持会话状态,但通
- 有状态EJB(这是否适用于Web服务?)
- 将状态返回给客户端(如果我想阻止客户端更改状态怎么办?)
- 在每个方法上从DB重新加载状态(我应该担心开销吗?)
从数据库重新加载状态可能是最普遍适用的方法。如果您使用实体bean或对象关系映射库,那么服务器应该能够减少数据库查询的数量。唯一的选择是在数据库中存储与特定用户ID相关的适当信息 不能将Statefull bean公开为Webservice
在将bean公开为Web服务的情况下,您可以尝试通过放入SOAP头来来回发送附加信息,以防止在主体中进行修改。但在这种情况下,客户端可以对其进行更改。请详细说明数据库状态保存方法?如何处理会话超时(这需要一些清理)?数据库状态方法最适用于绑定到用户帐户而不是会话的数据。从逻辑上讲,每个请求都会重新加载数据,但实际上,实体bean或数据库或两者都会缓存状态,因此数据通常可以按需使用。缓存通过逐出策略管理自己的内存使用情况,例如最近最少使用的内存。除非使用这种方法来管理会话状态,否则不需要自己管理清理。虽然可以使用计时器进程删除旧会话,但最好在web层中管理会话状态。假设您的基于web的应用程序具有jsp/jsf前端,是否有理由不能使用web容器上的“会话”来存储EJB/WS调用之间的状态?Ryan,是的,我可以将状态返回到web容器并将其存储在HttpSession中而不必担心,但是同样的方法也可以通过web服务从其他客户端访问,在这种情况下,我希望防止它们更改状态。