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

Java @SessionScoped/@Stateful-他们如何管理会话/状态,java,cdi,ejb-3.0,java-ee-6,Java,Cdi,Ejb 3.0,Java Ee 6,我对JavaEE相当陌生。我在浏览CDI和EJB材料时遇到了@SessionScoped和@Stateful注释 看看定义: @SessionScope:维护用户在多个HTTP请求之间与web应用程序的交互 @Statfure:看起来它与@SessionScope具有相同的功能 因此,我的疑问如下: 1) 两者的作用相同吗? 2) 我对Node和Python有一些经验。在那些维护客户端状态的语言中,我总是使用一个绑定到HTTPSession对象的cookie,该对象进一步绑定到内存缓存(redi

我对JavaEE相当陌生。我在浏览CDI和EJB材料时遇到了@SessionScoped和@Stateful注释

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

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

因此,我的疑问如下:

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

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


这些注释的目的是什么?

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

@SessionScoped
将对象绑定到HTTP会话
@Stateful
会话bean仅仅意味着它们的状态可以通过单个调用方的调用来维护。有状态会话bean来自大型客户端应用程序,在这些应用程序中,JavaSE程序可以在远程服务器上查找EJB来完成工作。这些类型的客户机/服务器应用程序可能使用有状态EJB在服务器上维护一定数量的会话状态,而不需要HTTP(它们在应用程序服务器上使用诸如RMI-IIOP、CORBA之类的协议)


现在,您可以通过HTTP会话继续使用有状态会话bean

在和我的队友谈过之后,我想我对我的问题有了一个可能的答案

在粘性会话的情况下,可以利用sessionScope或stateful。


在这种情况下,用户会话只停留在一个框中,而不是分布在所有框中。但如果我们不使用粘性会话,这些注释几乎毫无用处。

@sessionScope将对象绑定到HTTP会话…您能解释一下吗?如果我的sessionScoped对象没有分发,那么这将如何工作?这个绑定是如何完成的?以前,我使用cookies将我的http请求绑定到http会话对象(在node.js中)。我的意思是,任何想要保持客户端状态的对象都必须分布在所有应用程序服务中,不是吗?什么是不分布?我认为您混淆了集群和http会话。我的意思是,假设我将用户的数据保存在会话范围的bean中。我的应用程序部署在两台服务器上,中间有一个负载平衡器。现在客户机发出请求并点击server1,这里我们实例化一个SessionScoped bean来保存他的会话数据。现在,他提出另一个请求,并将其发送到服务器2。在这种情况下,服务器2中没有状态,现在怎么办?在这种情况下,我们通常使用http会话对象,这些会话对象保存在内存中的键值存储中,如cohorence/redis等……您肯定会混淆集群和会话。集群是一种允许您在两个节点之间共享数据的选项。