@SessionScoped / @Stateful - 他们如何管理会话/状态

时间:2015-05-10 17:14:17

标签: java cdi ejb-3.0 java-ee-6

我是Java EE的新手。我正在阅读CDI和EJB材料,并遇到了@SessionScoped和@Stateful注释。

看看定义: @SessionScope:维护用户与多个HTTP请求之间的Web应用程序的交互。

@Statfeful:看起来它与@SessionScope具有相同的功能

所以这是我的怀疑:

1)他们俩都有同样的目的吗? 2)我对Node和Python有一点经验。在那些用于维护客户端状态的语言中,我总是使用一个绑定到HTTPSession对象的cookie,该对象进一步绑定到内存缓存(redis / memcache),以便在所有服务器上进行分发。

所以我也可以在这里使用相同的技术......对吗?那我为什么要用这些符号呢?另外,如果我打算使用它们,那么如何让它们分布在所有服务器上? 我的意思是来自客户端的请求可以来到server1,然后下一个请求可以转到server2 ..在这种情况下,如果这个SesssionScoped对象没有分发,那么事情将如何正常工作?

这些注释的目的是什么?

2 个答案:

答案 0 :(得分:0)

不,它们不一样,但它们可以一起使用。

@SessionScoped将对象绑定到HTTP会话。 @Stateful会话Bean只是意味着可以通过单个调用者的调用来维护其状态。有状态会话Bean来自重型客户端应用程序,其中Java SE程序可以在远程服务器上查找EJB来执行工作。这些类型的客户端/服务器应用程序可能使用有状态EJB来维护服务器上的一些会话状态,同时不需要HTTP(它们在应用程序服务器上使用RMI-IIOP,CORBA等协议)。

现在,您可以继续使用有状态会话Bean和HTTP会话。

答案 1 :(得分:0)

与我的队友说了一句话之后,我想我可以回答我的问题。

在粘性会话的情况下,可以使用sessionScope或有状态。 Sticky and NON-Sticky sessions

在这种情况下,用户会话仅粘贴到一个框,而不是分布在所有框中。但是如果我们不使用粘性会话,那么这些注释几乎没用了