问题标签 [stateful-session-bean]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1874 浏览

jakarta-ee - 如何处理丢弃的 Stateful Session bean

有时,我的有状态 EJB (3.0) 中的操作会引发 SQLException(超时已过期)。它发生的方法:

此 SFSB 已注入另一个类:

然后它的引用在调用类中作为参数传递:

如果抛出运行时异常(如 SQLException)现在会发生什么,因为我正在使用 CMT 并根据 EJB 规范,容器首先回滚事务,然后丢弃 EJB。然后,如果我想在丢弃这个 EJB 后再次使用它,我会得到一个javax.ejb.NoSuchEJBException: Bean has been deleted.

这是有道理的,因为 bean 已被丢弃,但我怎样才能获得对新的有状态 bean 的引用?

我是否应该在我的 SFSB 中捕获异常并避免这种丢弃?如果我捕捉到异常,事务的状态会怎样?我必须做一些手动回滚吗?

谢谢。

0 投票
2 回答
3753 浏览

java - 有状态会话 bean 何时被销毁?

我是 ejbs 的新手,我想知道有状态会话 bean 是否会被销毁。我在我的 servlet 中注入了一个有状态会话 bean。即使在 30 分钟后,我也看到 bean 处于活动状态。我正在使用 jboss eap 6.0。我相信 HttpSession 与有状态会话 bean 无关。我使 HttpSession 无效以确保 HttpSession 与静态会话 bean 无关。那么,如果我的应用程序有很多用户,如果我为每个用户创建一个新 bean,我的服务器的性能就会下降。容器如何管理有状态会话 bean。bean 何时被移除或销毁?

我读了这篇文章和其他一些文章。但我没有弄清楚。

0 投票
1 回答
589 浏览

java - 有状态会话 bean 打包在 war 中并打包在 ear->jar 中时的意外行为

我是 ejbs 的新手。我写了一个作用域为@SessionScoped 的有状态会话bean。然后我将 ejb 注入到我的 servlet 中。

在我的小服务程序中

然后我打开了两个浏览器(IE、FF)并点击了 servlet。在 IE 中,我看到从 0 到 n 的输出。在 Firefox 中,我也看到从 0 到 n 的输出。

然后我创建了一个耳朵,它有一个罐子和一个战争。jar 包含所有 ejb。war 包含 servlet。

这就是我将 ejb 注入 servlet 的方式

然后我尝试从 IE 和 FF 请求相同的 servlet,我得到了意外的输出。

输出如下

在 IE 中我第一次请求,我得到 0 作为输出。然后我刷新了页面,我得到 1 作为输出。然后我转到 FF,第一次发送请求,我得到 2 作为输出而不是 0。然后我转到 IE 并刷新页面,我得到 3 作为输出而不是 2。

我的理解是应用服务器只创建有状态 ejb 的一个实例。我怎样才能解决这个问题?

将war中的ejb打包和单独打包在jar模块中有什么区别?

0 投票
1 回答
684 浏览

java - EJB Bean 与不同的未完成事务相关联

请看这个片段:

我的目的是处理 C 类型对象的集合。doSthInB 方法修改实体,结果应该在方法调用结束时持久化(这就是我使用 REQUIRES_NEW 的原因)。在处理输入集合中的某些元素期间发生一些错误时,不应仅保留此操作,应将其记录下来,并且不应停止其他元素的处理。

我在处理过程中得到的是:javax.ejb.EJBException: java.lang.IllegalStateException: Bean is associated with a different unfinished transaction

也许我的想法是错误的。有小费吗?

0 投票
2 回答
2352 浏览

java - 有状态会话 bean 是否应该实现 Serializable

我有一个简单的问题,但我找不到 Java EE 6 的答案!

有状态会话 bean 是否应该实现 Serializable?

我在有无实现 java.io.Serializable 的情况下进行了测试,没有不同,也没有错误。

我的感觉告诉我,有状态会话 bean 必须实现 Serializable 因为它可以在长期会话中持续存在......

0 投票
2 回答
2065 浏览

jsf - 对购物车 EJB 使用 @Stateful 和 @SessionScoped

我知道有很多关于在 Web 应用程序中使用有状态和无状态 EJB 的争论。

购物车是最常见的用例:Oracle 的 Java EE 示例也在官方文档中大量使用它。

在 stackoverflow 上,我发现了很多有趣的答案,比如JavaEE 中的购物车困境,通常会这样说:

好的... SFSB 适用于企业、复杂的场景,例如,如果您想与其他应用程序共享它们并使它们不仅可用于 JSF/Web 客户端

但是...如果您只是在开发您爷爷的电子商务网站,请坚持使用HttpSession / SessionScoped cdi-managed bean,并在SLSB中编写您的业务方法,因为它们更高效,等等...

但是,因为我还处于学习和发现阶段,所以我只是想尝试一下 SFSB,一个人尝试构建一个简单的购物车。

我看到一个有趣的教程建议在 HttpSession 中存储一个 JNDI 检索到的 @Stateful 购物车 ejb 接口实例,当 Web 客户端第一次需要它时,然后在 Web 会话期间照常使用它。在我的 JSF 表示层中,我想我会有一个 @SessionScoped @Named bean(我们称之为ShopController),并且在它的初始化中,将有状态 ejb 的一个实例存储在一个实例变量中。

我想知道是否可以通过使用@SessionScoped CDI 注释将@Stateful bean 直接绑定到http 会话。

它会像上面描述的那样工作吗?CDI 是否会为每个网络会话创建一个 SFSB?

0 投票
1 回答
549 浏览

migration - Migrating stateful session bean from EJB 2.1 to EJB 3 - how to migrate create method having args

Im trying to migrate a stateful session bean from EJB 2.1 to EJB 3.0, the home interface of the bean which extends EJBHome has a create method with two args and the corresponding bean has a matching args ejbcreate method and one more no arg ejbcreate method. My question is- 1. do I need to create two constructors one no arg and one arg to migrate this stateful session bean? 2. The ejbcreate method code is throwing "CreateException" and a run time exception, as of now ejbcreate defines throws "CreateException", do i need to define thorws CreateException" on the constructor or can I skip the create exception throwing part in the code of the constructor.

Other alternative I see posted in one blog is creating a method and annotating with @init, though not sure if this is the way as they were talking about EJB2 client view for a EJB3 bean.

0 投票
1 回答
351 浏览

jsp - 在 JSP 上显示有状态会话 bean 值

我已经使用 DI 在 3 个 servlet 中注入了一个有状态会话 Bean(它从 3 个 JSP 页面的表单中获取数据),因此所有 3 个 servlet 接收到的数据都可以存储在其中。当我在最后一个 servlet 中打印 Bean 的所有数据时,它会成功打印。

但是,当我尝试使用<jsp:useBean>标记在 JSP 上打印 bean 的相同数据时,scope=session所有数据都显示为空。我尝试使用 InitialContext 来使用 JNDI 获取 bean,但它找不到所需的 bean(可能是因为我使用 DI 注入了 bean!)。我什至尝试将 EJB bean 放入一个,HttpSession但它抛出了一个ClassCastException.

如何在 JSP 上打印有状态会话 Bean 的值?

0 投票
2 回答
2844 浏览

java - 有状态会话 bean 多线程访问

EJB 3.2 规范说明如下:

默认情况下,允许客户端对有状态会话对象进行并发调用,并且容器需要序列化此类并发请求。请注意,容器从不允许多线程访问实际的有状态会话 bean 实例。

对我来说,并发访问和多线程访问似乎是等价的。那么如何在禁止多线程的情况下对有状态 EJB 进行并发调用呢?

0 投票
1 回答
218 浏览

jakarta-ee - 有状态会话 Beans CMT

在我的时区下午好。

我正在准备 EJB 3.0 认证考试,并且正在阅读“EJB3 In Action”一书。在使用 BMT 事务类型的优点和缺点部分中,它说“如果您使用有状态会话 bean 并且需要跨方法调用维护事务,BMT 将是我们唯一的选择”。我无法理解这句话。想象一下,我们有以下 psedo 类

因为它在类级别定义了所有方法都将具有 REQUIRED transactionAttribute 值,所以当 method3 调用 method1 和 method2 时,这些方法将加入调用 method3 时创建的事务,对吗?可以澄清我的疑问吗?提前致谢最好的问候