问题标签 [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 回答
235 浏览

java - @Stateful 和 @SessionScoped

我对 bean 生命周期有疑问,我不明白。我的战争中有一个@SessionScoped bean:

然后是 ejb 部分中的 @Staseful 会话 bean:

他们玩得很好,但是当在 ejb 部分中生成未经检查的异常时,SFSB “死”。我知道这是预期的行为,但我不明白如何处理这种情况。例如:用户进入一个可以上传 xls 文件的页面,上传一个文件,然后文件处理由于某种奇怪的原因而失败。未捕获“WeirdReasonException”,SFSB 消失,并且每个后续调用都会生成“javax.ejb.NoSuchObjectLocalException:EJB 不存在”。我知道我应该避免留下未捕获的异常,但如果有一些奇怪的事情通过,我认为用户应该能够继续他的工作。有没有办法“强制”重新创建 SFSB?

谢谢

0 投票
1 回答
406 浏览

jakarta-ee - 在上下文中获取@EJB

正如这里所讨论的,在从 servlet 重定向的 jsp 中显示用户名以获取有状态会话 Bean 的相同实例,我必须将其保存在相关的 HttpSession 中。它工作得很好,但是在一个 servlet 中我这样做了:

属性“购物车”是我保存初始化购物车的地方。问题是,如果之前未初始化购物车,则行 cart=new SessionCart(); 初始化一个与Context无关的bean,所以@PercistenceContext得到的entitymanager为null。我尝试使用注释

但是这个无论如何都会创建一个新的会话购物车,而不受我的控制(因此,如果我有一个与用户相关的购物车,我会创建一个新的并将其丢弃......这不太好)。我的问题是:我是否可以在不使用注释 @EJB 并将其与上下文相关的情况下创建一个新的有状态会话 Bean?所以我可以控制何时创建它

0 投票
1 回答
336 浏览

java - 将 WebService-Client-Access 映射到 @Stateful

如果我理解正确,@Stateful bean 会保存状态。如果客户端再次发出请求,它会返回到同一个实例。所以可以保存类属性,这是在@Stateless 中做不到的。在这里的另一个线程中,有人写道“它就像一个经典的 java 实例,每次注入都会得到它自己的这个 bean 的实例”。

但我不明白请求到@Stateful bean 的映射是如何工作的——它是如何工作的?这个问题适用于两种情况:

  1. 我通过客户端软件的网络服务调用@Stateful。它是我必须发送的 ID 吗?但是 ID 是什么,容器如何知道这是标识属性并将其路由到正确的 @Stateful bean?
  2. 我从@Stateless bean 中调用@Stateful。例如,如果客户端首先调用 @Stateless bean 并重定向到他的 @Stateful bean。

这个问题不是针对容器/服务器软件的技术过程,而是针对开发中的具体操作。谢谢您的支持。

问候

0 投票
1 回答
1169 浏览

java - 有状态会话 bean 钝化和序列化 - EJB

以下问题让我想起了

1)我在某处读到:

钝化:有状态 bean 的可扩展性机会

可扩展性在这里意味着什么?

2) 无状态会话 bean 如何比有状态会话 bean 更具可扩展性?

3) 作为

对于钝化,有状态会话 bean 被序列化,对于激活,它将被容器反序列化......

为什么我们确实需要序列化和反序列化,不能在没有序列化和反序列化的情况下完成(钝化和激活)吗?以及序列化如何帮助容器钝化 bean?

0 投票
1 回答
1061 浏览

java - Struts2 中的有状态会话 bean

我一直在尝试使用 Struts2 创建一个简单的有状态会话 bean,但是每次我重新发送请求并尝试检索之前放入有状态 bean 的信息时,它都会返回 NULL。我错过了什么吗?

注册后注入工作正常,但是当我在操作类中的检索方法上发出新请求时,我无法获取我的会话信息,因为它返回 null。

那么我该怎么做才能实现呢?

不注意锁,我放它们只是为了测试其他功能。你可以忽略它们。我重复注入在执行方法上正常工作

我的 struts.xml 文件

AccountserviceImpl:

帐户服务本地:

0 投票
1 回答
1319 浏览

jakarta-ee - 有状态 EJB 中 @Remove 方法的用途

我确实理解,调用带@Remove注释的方法会告诉 EJB 容器,客户端不再需要有状态 EJB 的实例,并且可以在调用后将其删除。

但在 Oracle JEE 教程中,此方法用于“清理”实例。例如,请参见此处:

(来自https://docs.oracle.com/javaee/6/tutorial/doc/bnbod.html

该成员List<String> contents;设置为,null但我认为没有任何理由这样做。当实例被删除时,它不会杀死所有这些引用吗?

我可以想象,当实例被释放时,需要执行一些业务任务,但是在调用方法之后,@Remove它或多或少会直接调用一些@PreDestroy方法,然后我可以执行这些任务。那么为什么我们有这种特殊的@Remove方法和方法而不是像EJBContainer.remove(myBean)

您能否澄清@Remove注释的目的和/或提供一些易于理解的用例示例,这些示例可以明显看出我们为什么需要这种机制?

0 投票
0 回答
485 浏览

java - Spring Stateful Bean 等价物——同步回调方法

我想将有状态会话 Bean (EJB 2.1) 迁移到 Spring bean。Stateful Bean 和 Spring Bean 都应使用 Websphere Transaction Manager(WebsphereUowTransactionManager接口允许 Spring 访问它)在 Websphere Application Server 中运行。

旧的有状态会话 Bean 实现SessionSynchronization接口以使用回调方法(特别是afterCompletion回调)。

我尝试为我的 bean 使用原型范围,因为据我所知,它模拟了一个有状态的 bean,并实现了Spring 提供的TransansactionSynchronization接口。

正如我后来理解的那样,这些回调不能被调用,因为“与其他范围相比,Spring 不管理原型 bean 的完整生命周期:容器实例化、配置和以其他方式组装原型对象,并将其交给客户端,没有该原型实例的进一步记录” http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-prototype

会话范围可能是一个解决方案,但会话 bean 是从使用来自 JMS 队列的消息的消息驱动 Pojo 调用的。

编辑:旧的会话 bean 只是一个纯 Java 类的“包装器”,它实现了对队列的各种写入等。所以它采用现有的类并从中制作一个 bean,实现 SessionSynchronization。

我的想法是采用相同的 Java 类并创建一个 Spring Bean(接口和实现类):

0 投票
2 回答
3025 浏览

spring-mvc - MockMVC 将测试控制器与会话范围 bean 集成

我正在尝试集成测试一个 Spring Controller 方法,该方法使用注入到控制器中的 Spring 会话范围 bean。为了让我的测试通过,在我对这个控制器方法进行模拟调用之前,我必须能够访问我的会话 bean 以在其上设置一些值。问题是在我进行调用时创建了一个新的会话 bean,而不是使用我从模拟应用程序上下文中提取的那个。如何让我的控制器使用相同的 UserSession bean?

这是我的测试用例

这是我需要测试的控制器方法

它没有通过这条线,因为 UserSession 对象不一样 if(userSession.isEmployee() && userSession.getAuthorizationLevel() >= 3){

这是我的用户会话 bean 的声明。

控件和 bean 都是使用我的 applicationContext.xml 中的组件扫描创建的

0 投票
1 回答
144 浏览

ejb - 关闭浏览器后能否访问 Stateful Bean?

我需要关于无状态和有状态会话 Bean 的帮助。我有几个问题。

  1. 请清楚地告诉我 Stateless 和 Stateful Session Bean 有什么区别?
  2. 一些人说有状态的 bean 保存有关客户端的信息。Stateful bean 保存什么样的信息?
  3. 假设我有一个包含 EJB(无状态和有状态会话 Bean)的 Web 项目。如果我完全关闭浏览器,我可以再次访问相同的 Stateful Session Bean 实例吗?

感谢您的回答。:)

0 投票
2 回答
2146 浏览

java - 将单例会话 Bean 注入无状态会话 Bean

通过在无状态会话 Bean 中使用单例会话 Bean,是否允许(并且是良好做法)在我们的应用程序中保存一些共享信息?

SSB 将被注入到 SLSB。

-