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

java - 在wildlfy9中,如何在独立模式下使用两个节点进行有状态的ejb会话复制(集群)

我想用耳朵项目做集群。我找到了一种使用standalone-ha.xml 配置在集群中独立运行的解决方案。我跟着下面的文章。它工作正常。 使用 wildfly9 在域模式下进行集群 但我想运行具有耳朵和有状态 ejb 的 ERP 项目。所以我以独立模式运行集群。

我有两台机器的 ip 不同,例如

1.10.10.10.10 节点1

  1. 20.20.20.20 节点2

两台机器都有wildfly9,出于测试目的,我创建了一个带有Web组件的示例有状态ejb项目。

我运行服务器的命令是:

我的项目 Test.war 有有状态的 ejb 和 servlet 和 jsp 。1)Bank.java 是有状态的ejb,它实现了远程和本地接口

2)OpenAccount.java 是servlet

3)index.jsp 是主页包含以下单行重定向到 servlet

4)从servlet转发的operation.jsp是:

4) operationprocess.jsp 是

5)web.xml 包含

启用集群的标签。

6) 类路径也有 jboss-ejb-client.properties

有了所有这些,我在两个服务器上都部署了 Test.war 并尝试使用 apache_mode_cluster 即 10.10.10.10/Test/ 进行访问。它正在调用 ejb 并给我输出但是当

1)我关闭 10.10.10.10 服务器并刷新浏览器(不清除浏览器历史记录以维护会话),那时它给了我错误,例如可分发容器不适用于相同的应用程序。

2) 10.10.10.10 已关闭,我清除历史记录并再次访问 url 10.10.10.10/测试它重定向到 20.20.20.20 服务器即 node2 并成功运行。但是会话没有被复制。

请帮我。Standalone-ha.xml -- 子系统 infinispan 是:

0 投票
1 回答
830 浏览

java - 将有状态bean注入无状态

我已经读过bean@Stateful (SFSB) 永远不应该注入到@Statelessbean (SLSB) 中。但是实现以下目标的正确方法是什么?

有一些状态应该在second.businessMethod1()and之间保持second.businessMethod2(),所以SecondEJB不能是无状态的。也没有简单的方法将方法合并为一个,因为businessMethod1()可以有两个以上的业务方法,并且可以以不同的组合调用它们。businessMethod2()SecondEJB

实际上我已经尝试过SecondEJB有状态并且它似乎可以工作,但它会导致内存泄漏。没有SecondEJB标有@Remove注释的方法,但我尝试@StatefulTimeout过没有运气:创建了很多SecondEJB实例但没有删除。有人可以解释为什么会泄漏吗?

0 投票
1 回答
472 浏览

java - 将 EJB 3 会话 Bean 引用存储到 Map

目前我正在EJB3.0 session beans我的应用程序中使用。通常我使用jndi name并调用相关方法查找bean。但最近有人建议我将这些引用存储在 aMap而不是一次又一次地查找。

这是存储Session Bean引用Map 以避免每次查找的好习惯吗?或者它是危险的?如果在所有应用程序中可能会遇到什么样的问题?

如果这是一个好的做法,那么我还有另一个问题。

包含Map存储引用的类是模块 Asession beans的一部分。 而是模块 B1 ...Bn的一部分。因此,当我将参考存储在 中查找后Map,我可以将其取回。与此同时, 模块 Bn被重新部署,但模块 A 保持原样。所以现在在使用它从 Map (因为它包含条目)查找 bean 之后,ClassCast Exception被抛出。

这是什么原因,我该如何避免?我正在使用 JBOSS 应用程序服务器 - jboss 5.1.0.GA

0 投票
1 回答
3520 浏览

java - WildFly EJB UnknownSessionID

我刚开始学习ejb,现在有问题。我的ejb代码是

它仅用于测试。好的,所以,80 秒后我从 WildFly 得到问题

1)我认为应该在 80 秒后删除 ejb,刷新页面后我会得到新的实例。还是在 80 秒后实例进行钝化(保存在硬盘上)?

2) UnknownSessionID 有什么问题?为什么 WildFly 不想将 ID 分配给 session ?

3) 使用此代码示例 - 为什么如果我同时使用两个不同的浏览器我有相同的实例?我认为有状态 bean 作为 one_bean-to-one_user 工作?因此,例如,在 Google Chrome 和 Firefox 中,我应该从 i=0 开始,并且在浏览器会话之间不应该有任何类似的数据

我将不胜感激您的帮助!

0 投票
1 回答
121 浏览

jakarta-ee - 当 bean=null 时,应用服务器是否会丢弃有状态 bean 实例并创建新实例?

我知道这已经被问过百万次了,但到目前为止它还没有回答我脑海中的问题,我认为最好用代码来理解,有人可以验证我的想法:

客户端中的无状态 bean:

客户端中的有状态 bean:

销毁会话:

来自Oracle文档

顾名思义,会话 bean 类似于交互式会话。会话 bean 不共享;它只能有一个客户端,就像交互式会话只能有一个用户一样。当客户端终止时,它的会话 bean 似乎也终止并且不再与客户端关联。

该状态在客户端/bean 会话期间保留。如果客户端移除 bean,会话结束并且状态消失。然而,这种状态的瞬态性质不是问题,因为当客户端和 bean 之间的对话结束时,不需要保留状态

如果以上是正确的,那么我的派生问题是,当 bean 引用设置为 null 时,App 服务器是否会丢弃有状态 bean 实例并创建新实例?我问这是因为:

  1. 我们向 bean 添加了项目,并将为新客户保留 bean,除非我们实现一个flush方法,但我认为这不是正确的方法。
  2. 如果在最佳实践中 bean 不应该改变自己的状态,即this.items在 bean 内部添加项目,我想不出更好的理由来使用 Stateful bean?
  3. “状态”是指 bean 实例本身吗?
0 投票
1 回答
96 浏览

dependency-injection - 对在 EAR 中使用 @Remote 感到困惑

使用 NetBeans,我成功运行了 Oracle 网站上 Java EE 6 教程中介绍的购物车示例。它是一个具有两个模块的 EAR:一个 EJB 模块和一个应用程序客户端模块。我已经缩短了代码的一些细节,以便专注于我面临的困惑。首先,下面是代码。

EJB 模块中的远程接口

EJB 模块中的有状态会话 bean

应用程序客户端模块中的客户端

现在我的困惑开始了!!

Confusion-1:教程说它是一个远程客户端。但事实并非如此!它与 EJB 模块被打包为同一个 EAR 中的一个模块。@Local 不是更合适吗?

困惑2:如果 glassfish 确实认为它是客户端和会话 bean 之间的远程通信,那么客户端的容器是否会提供会话 bean 的假实例(即代理),代表 EJB 容器中会话 bean 的实际实例,只是就像在“真实”的远程案例中一样?我的意思是,远程是否意味着远程,无论如何?

Confusion-3:我正在考虑在非 EE 环境中创建一个客户端,然后让它从 EAR 外部与 bean 进行通信,以体验“真正的”远程。那么,如果我启动 Eclipse 并通过从 EAR 中的客户端复制内容来创建 Java SE 7 客户端程序,这些是我必须进行的更改吗?

替换依赖注入

与 JNDI

并将 Cart 接口的源代码添加到 Java 标准版客户端项目中。

Confusion-4:我找不到那个 EAR 文件的位置。在 NetBeans 上,我可以看到购物车下有两个 jar 文件。但是,EAR 文件在哪里?我通过使用 NetBeans从C:\glassfish-4.1.1\docs\javaee-tutorial\examples\ejb\cart直接打开项目来部署该项目。

0 投票
1 回答
332 浏览

jakarta-ee - EJB 3.X Stateful session bean 如何维护状态?

我对 EJB 有点陌生。我了解如何维护 HTTPSession(所有 cookie 基础)。互联网上的所有资源都说“有状态会话 Bean 维护会话(记住客户端)。但我找不到答案

Stateful Session如何维护状态?

甲骨文文档说

对象的状态由其实例变量的值组成。在有状态会话 bean 中,实例变量表示唯一客户端/bean 会话的状态。因为客户端与其 bean 交互(“交谈”),所以这种状态通常称为会话状态。

谢谢。

0 投票
1 回答
235 浏览

java - EJB 会话 bean 未正确初始化 (NameNotFoundException)

我无法弄清楚为什么 EJB 会话 bean 不工作。实际的错误消息是 EJBException:NameNotFoundException,但这不是一个很有启发性的消息。

我已经将其追溯到导致问题的确切原因,但还没有弄清楚原因。所以,我想创建一个会话 bean 来跟踪表单的输入值。

精简版的代码是:

然后我创建了一个界面 dohicky...

然后我创建了测试bean本身......

在我的测试 servlet 中,我有

如果我在 bean 定义中取消注释 bean 初始化方法中的一行,我会失败。所以我知道这与此有关。//name.currentValue = "TestValue";

如果我把它注释掉,只要我在 servlet 中编码 t1.getName("New Value") 我就会得到同样的错误。

如果我把它注释掉,那么 bean 会按预期工作 - 我可以初始化,并使用 setAction 和 getAction 就好了。

我相当确定 rrpInput 类是正确的,因为我可以在 servlet 中编写代码:

我认为它一定与我的输入字段类有关,但我没有运气弄清楚是什么。

0 投票
0 回答
125 浏览

java - 如何使用另一个有状态会话 bean 获取一个有状态会话 bean

我想做一个功能,即如果用户从一台设备更改密码,他应该从他登录的所有其他设备注销。

为此,我至少需要获取所有其他会话 bean 对象。有没有办法使用其中的一些字段来获取所有其他对象?因为我可以在所有 bean 中使用通用的用户名。

如果没有,还有其他方法可以实现此功能

(我在 jboss 容器中使用 ejb 3.0)

0 投票
2 回答
3122 浏览

jakarta-ee - 有状态会话 EJB 的真实用例

关于会话 EJB 的使用,到目前为止,我在“现实世界的应用程序”(如果我没记错的话)中看到的是无状态会话 EJB,用作事务(通过 CMT)业务逻辑方法的“门面”。不过,我还没有看到任何有状态的会话 EJB。实际上,在 Java EE 书籍中,它们被用作“购物车”,这意味着它们的状态应该以某种方式存储在持久存储中。但这似乎表明,在数据库中建模的应用程序域的其他部分也应该映射到有状态的 EJB-s,这似乎过于复杂。

那么,根据您的经验/专长,您能否给出具体示例,说明在当今(例如,与 2003 年相比)应用程序中如何使用有状态会话 EJB?