使用 Stateful Session Bean 来跟踪用户的会话

2024-01-23

这是我的第一个问题,我希望我做得对。

我需要从事 Java EE 项目,因此,在开始之前,我尝试做一些简单的事情,看看是否能做到。

我被困住了有状态会话 Bean.

这是问题: 我怎样才能使用SFSB跟踪用户的会话? 我看到的所有例子最终都“放入”SFSB into a Http会话属性。 但我不明白为什么! 我的意思是,如果 bean 是有状态的,为什么我必须使用Http会话保留它?

EJB容器的任务不是返回正确的吗SFSB给客户?

我尝试过使用简单的反豆。 在不使用会话的情况下,两个不同的浏览器具有相同的计数器 bean(单击“增量”更改了它们的值)。 使用会话,我有两个不同的值,每个值适用于每个浏览器(在 Firefox 上单击“增量”,仅向 Firefox 的 bean 添加一个值)。

但我的老师告诉我SFSB保持“与客户的对话状态”,那么为什么它不能在不使用Http会话 ?

如果我理解正确的话,没有使用Http会话 with a SFSB与使用 a 做的一样SLSB反而?

我希望我的问题很清楚并且我的英语没那么差!

编辑 : 我正在开发登录系统。 一切顺利,完成登录后,我将进入显示用户数据的个人资料页面。 但是重新加载页面会使我的数据消失! 我尝试过添加Http会话虽然正在记录,但这样做可以使数据即使在注销后仍然保留!


有状态会话 Bean (SFSB) 必须与 Web 环境中的 HTTP 会话结合起来,因为它是一个纯业务 Bean,本身对 Web 层一无所知。

传统上,EJB 甚至强制存在于它们自己的模块(EJB 模块)内,如果它们愿意,甚至无法访问 Web 工件。这是分层系统的一个方面。看使用 JavaEE 6 WAR 与 EAR 封装 EJB https://stackoverflow.com/questions/4441237/packaging-ejb-in-javaee-6-war-vs-ear/4539419#4539419了解更多相关信息。

有状态会话 Bean 的原始客户端包括 Swing 桌面应用程序,它们通过二进制协议与远程 EJB 服务器进行通信。 Swing 应用程序将通过代理/存根对象获得与远程有状态会话 Bean 的连接。该代理中嵌入了某种 ID,服务器可以将其与特定 SFSB 关联。通过保留此代理对象,Swing 客户端可以重复调用它,并且这些调用将转到同一个 bean 实例。这将在客户端和服务器之间创建一个会话。

对于 Web 应用程序,当浏览器向 Java EE Web 应用程序发出初始请求时,它会得到一个JSESSIONID服务器可以与特定的HTTPSession实例。通过坚持这一点JSESSIONID,浏览器可以向它提供每个后续请求,这将激活相同的 http 会话服务器端。

因此,这些概念非常相似,但它们不会自动相互映射。

浏览器只获取JSESSIONID并且不了解任何 SFSB ID。与 Swing 应用程序不同,浏览器与网页通信,而不是直接与 Java bean 通信。

为了将客户端的请求映射到特定的有状态会话 bean,EJB 容器只关心通过 SFSB 代理提供的 ID。它无法查看调用是否恰好源自 Web 模块中的代码,并且不能/不应该真正访问任何 HTTP 上下文。

作为访问 SFSB 的客户端代码的 Web 层必须“保留”特定的代理引用。保留 Web 层中的某些内容通常意味着将其存储在 HTTP 会话中。

然而,有一种桥接技术称为CDI可以进行这种自动连接。如果您使用 CDI 注释您的 SFSB@SessionScoped并通过 CDI 获取对 SFSB 的引用(例如使用@Inject),您不必手动将 SFSB 放入 http 会话中。然而,无论如何,CDI 在幕后都会这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Stateful Session Bean 来跟踪用户的会话 的相关文章

随机推荐

  • 链接影响不同元素的 jQuery 动画

    document ready function div1 fadeIn slow div2 delay 500 fadeIn slow div3 delay 2000 fadeIn slow div4 delay 8000 fadeIn s
  • Mediatr:减少 DI 对象的数量

    我有很多命令和查询 其中大多数需要相同的接口来完成不同的事情 是否有可能如何减少我的每个处理程序都需要的这种混乱 并且一遍又一遍地重复 public class GetCoinByIdQueryHandler IRequestHandler
  • 使用 SOAP,还是不使用 SOAP?就是那个问题

    我有 3g 手机协议栈的背景 现在我需要从 Android 平板电脑与服务器进行通信 我将对接口的两侧进行编码 更新 我应该说 从 Android 多个 slate 到本地服务器 多个 然后通过卫星到单个中央主服务器 现在我想我可能不会实施
  • 生成日期范围的数据,包括数据中不存在的日期

    这是我的表结构和数据 CREATE TABLE event EventID INT 11 NOT NULL AUTO INCREMENT EventDate DATETIME DEFAULT NULL Description VARCHAR
  • 使用projectile在.dir-locals中设置flycheck-clang-include-path

    尝试设置 Flycheck clang include path 而无需包含项目的完整路径 包括使用弹丸的目录 但我收到错误 所以这有效 nil company clang arguments home user Downloads pro
  • 使用 dlopen 动态加载共享库

    我正在尝试使用 dlopen 加载 TestCode so getNumber 是我想从 TestCode so 使用的函数 但是当我加载 so 时 我无法使用该功能 它给出了分段错误 示例程序 测试头 hpp ifndef HEADER
  • 使用 dlib 面部标志裁剪面部

    我正在尝试使用 dlib 识别的面部标志来裁剪面部 右眉毛造成了问题 眉毛是平的而不是沿着眉毛的弧线 我在这里做错了什么 from imutils import face utils import imutils import numpy
  • 在 Pig 中解析复杂的 JSON 字符串

    我想在 Pig 中解析一串复杂的 JSON 具体来说 我希望 Pig 将我的 JSON 数组理解为一个包 而不是单个字符数组 使用 JsonLoader 时 我可以通过指定架构轻松完成此操作 如下所示这个问题 https stackover
  • C#中复制大量数据的方法

    我正在使用以下方法将目录的内容复制到不同的目录 public void DirCopy string SourcePath string DestinationPath if Directory Exists DestinationPath
  • onpreviewframe byte[] 到 int[]

    在预览帧中 我得到 ImageFormat RGB 565 中的字节 现在我想将此 byte 转换为 int 以便我可以进行一些像素操作 我怎么能这么做呢 附 到目前为止 我是这样做的 但似乎还没有优化 public void onPrev
  • 获取日期格式/文化

    如何指定输入字符串的哪一部分是日期和月份 如果输入是01 10 2017 这可以读作2017 年 10 月 1 日 and 2017 年 1 月 10 日 两者都是正确的 我想明确表示01是日期并且10是月份 这样无论区域设置和时间格式如何
  • ngForIn 可以在 Angular 4 中使用吗?

    我正在尝试使用迭代对象的属性 ngFor但使用in 当我尝试这样做时 Controller selector sample controller template ul li b i b obj i li ul class SampleCo
  • HTML/CSS:如何为 tr 创建滚动条

    有人可以告诉我如何为内表创建滚动条吗 内表不显示在容器内 我将容器的背景涂成黄色 桌子本身是蓝色的 我想在表格内看到一个滚动条 Source http nopaste info e51385254e html http nopaste in
  • java中如何实现国际化

    我有一堂课叫Info 我有一堆static String其中描述的变量 public class Info public static stringOne Hello public static stringTwo world 我希望访问这
  • 你明白这个僵局吗?

    我的 GUI 使用 wxPython 在里面AppLogic类我有一个工作线程 它在这个类的方法中运行 这是GUI class class GUI wx app None main window None app logic None de
  • SharpDX、DirectWrite 和 Windows 窗体

    可以使用 DirectWrite 将文本渲染到 WinForm 应用程序中的 PictureBox 中吗 我正在使用 SharpDX 并浏览了 DirectWrite 示例 试图构建最简单的工作案例 我创建了一个表单并只向其中添加了一个图片
  • 根据列值分割大型 csv 文本文件

    我的 CSV 文件有多列已排序 例如 我可能有这样的行 19980102 PLXS 10032 Q A 15 12500 15 00000 15 12500 2 19980105 PLXS 10032 Q A 14 93750 14 750
  • C++ 中单例的线程安全惰性构造

    有没有一种方法可以在 C 中实现单例对象 以线程安全的方式延迟构造 两个线程可能同时是单例的第一个用户 它仍然应该只构造一次 不依赖于预先构造的静态变量 因此在构造静态变量期间单例对象本身可以安全使用 我不太了解我的C 但是在执行任何代码之
  • 使用 maven-compiler-plugin 排除包适用于一个包,但不适用于另一个包

    我的项目具有以下包结构 src com my app school course Course java com my app school course free CourseFree java 我使用Maven来构建项目 在我的pom
  • 使用 Stateful Session Bean 来跟踪用户的会话

    这是我的第一个问题 我希望我做得对 我需要从事 Java EE 项目 因此 在开始之前 我尝试做一些简单的事情 看看是否能做到 我被困住了有状态会话 Bean 这是问题 我怎样才能使用SFSB跟踪用户的会话 我看到的所有例子最终都 放入 S