问题标签 [ejb-3.2]
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.
singleton - WebSphere Liberty 启动多个单例 EJB 实例
我正在开发一个打包在耳朵中的企业应用程序。耳朵由一个 Enterprise Bean 应用程序(在一个 jar 中)、一个 JAX-RS 应用程序(在一个战争中)和一个 Web 应用程序(也在一个战争中)组成。
耳朵描述符 (application.xml) 如下所示:
EJB 应用程序包含一个单例 EJB,用 @Singleton、@LocalBean 和 @Startup 注释,其中包含一个 @Schedule 方法。
我在日志中注意到服务器同时启动了计划方法的三个实例,对日志的进一步调查显示 bean 被绑定了 3 次——每个应用程序都绑定了 1 次。
这与文档http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html一致
但是:我在完整配置文件 WebSphere 服务器上运行了一个类似的应用程序,但没有显示此行为。相反,整个企业应用程序只存在一个实例。
WLP 服务器正在运行 17.0.0.1,Java 版本为 1.8.0_101
问题是,如果这是一个错误 - 还是我错过了 WLP 中的一些重要设置?
ejb-3.1 - 客户不得对内部实施做出任何假设
完整的句子取自 EJB3.2 规范:
在与无接口视图的引用交互时,客户端不得对引用的内部实现做出任何假设,例如引用中可能存在的任何特定于实例的状态
我实际上是在试图理解这实际上意味着什么,我想知道是否有人可以提供一些例子。
编辑:
上面的句子取自第 3.4.4 节 Session Bean 的无接口视图,也许这个信息有帮助
ejb-3.1 - 使用 @EJB 和 @Inject 的无状态会话 Bean 标识
我最近一直在研究 EJB3.2 规范的第 3.4.7.2 节并做了一些测试。
规格:
@EJB 购物车购物车1;
@EJB 购物车购物车2;
... if (cart1.equals(cart1)) { // 这个测试必须返回 true ...}
... if (cart 1 .equals(cart 2 )) { // 这个测试也必须返回true ...}当用于比较对相同无状态会话 bean 的相同业务接口类型的引用时,equals 方法总是返回 true。
规范明确引用了@EJB
注释,所以我做了一些测试,我可以确认 -if (cart1.equals(cart2))
总是返回true
- 身份假设。
因为我经常看到@Inject
与 的工作方式相同@EJB
,所以我尝试了上面相同的示例,但使用@Inject
. 在那种情况下if (cart1.equals(cart2))
总是返回false
。
我想知道是否对此有一些评论。
用于测试目的的代码:
}
wildfly - Arquillian 与 WildFly 10 的集成
谁能指导我如何将 Arquillian 与 WildFly 10 一起使用。我最近将我的应用程序从 JBoss 7 迁移到 WildFly 10。Arquillian 曾经与 JBoss 7 一起使用,但相同的配置不适用于 WildFly 10。
我现在可以集成,但是我的 JNDI 名称为“java:global/xyz/xyzEMFactor”的 EJB 失败并出现以下错误:
引起:java.lang.Exception:{“WFLYCTL0180:缺少/不可用依赖项的服务”=> [“jboss.naming.context.java.module.test.test.env.\”com.xyz.abc.poc. Knowledge_base.ontology.DBContextBean\".emFactory is missing [jboss.naming.context.java.global.xyz_dal.xyzpEMFactory]"]} at org.jboss.as.controller.client.helpers.standalone.impl .ServerDeploymentPlanResultFuture.getActionResult(ServerDeploymentPlanResultFuture.java:134)
以下是我的课:
java - Wildfly 中的“意外调用状态 0”错误
我创建了一个演示错误的小示例。
有状态 bean 持有一个列表作为其状态并注入一个无状态 bean:
无状态 bean 通过注入来操作有状态 bean 的状态:
调用System.out.println(sfsb.sfAdd());
是在 JAXRS GET 方法中进行的。我期望的调用步骤是:
sfAdd
叫做slAdd
被调用并添加"S"
,返回。- 打印
[S]
。 - 添加
"Z"
,返回。 - 打印
[S, Z]
。
通常会发生什么,但输出也会给出错误消息:
我不明白什么是WFLYEJB0487: Unexpected invocation state 0
,为什么会发生以及我应该怎么做。该消息在第 3 步和第 5 步之间打印。Google 仅找到https://developer.jboss.org/thread/272767但这没有帮助。
我还发现删除@Stateful
fromStatefulBean
会导致错误消失。Wildfly 10.1,JavaEE 7。
jakarta-ee - 我可以 CDI-1.0 或 -2.0-inject 由一个无状态 EJB 实现的多个接口吗?
就像下面的例子:
我对您是否应该赞成注入普通的无状态 EJB(无接口)而不是可通过其实现接口注入的无状态 EJB 不感兴趣。
我尝试使用 JEE7 (CDI1) 没有成功。我的印象是 EJB+CDI 不支持。
我想知道JEE8是否可能?
我在 CDI 2.0 规范中找不到任何部分,这似乎暗示了方向。如果有人能指出正确的地方,我将不胜感激。
这个问题也没有回答注入部分,可能已经过时并且有趣的链接已经死了: EJB bean 可以实现多个接口吗?
有任何想法吗?
java - 避免在 Wildfly 内部运行的 EJB 调度中的计时器重叠
我在 Wildfly 10.10 中运行的单例 EJB 中有一个 EJB 计时器计划:
update() 模型中的任务运行平稳,大部分时间不到 1 秒。但是每2分钟,由于业务需要,方法超时时间超过1秒。
问题:
Wildfly 每 2 分钟输出一条日志消息,例如:
(EJB 默认值 - 1) WFLYEJB0043:计时器 [] 的先前执行仍在进行中,跳过此重叠的计划执行在:。
我很清楚该消息的含义:上一个计时器在下一次执行开始之前没有完成并且发生重叠。
此外,重叠在更新的底层数据结构中引发了并发问题。
我的问题:
1 - 在计时器很慢的情况下如何丢弃下一个计划以避免重叠/并发更新?
2 - 如果不可能丢弃重叠的时间表,如何避免日志消息?
顺便说一句,我考虑将更新方法分成两个不同的时间表(1 秒和 120 秒)。但是打破更新方法意味着过度打破更新下的整个数据结构,至少在目前看来有点复杂和不可行。
任何帮助表示赞赏!
ejb - EJB3.1 远程客户端代码不适用于 Jboss-eap-6.1.0
我正在使用以下软件列表:
- JDK1.7
- Jboss-eap-6.1.0
- EJB3.1
我正在尝试调用 EJB3 会话 bean 方法但遇到异常:
20:36:38,249 错误 [org.jboss.remoting.remote.connection](远程处理“d-441003044”读取 1)JBREM000200:远程连接失败:java.io.IOException:现有连接被远程主机强行关闭
服务器控制台和类如下
部署单元部署“EJBTest2.jar”中名为 Test2 的会话 bean 的 JNDI 绑定:
Test2.java
Test2Remote.java
Test2Client.java
如何编写远程客户端代码?
jakarta-ee - 为什么 Java EE 计时器没有集群?
我正在使用 Java EE EJB 计时器和带有 oracle 数据库的 Wildfly 8.2.1 服务器。当在集群环境中的应用程序中运行调度程序时无法正常工作,即使在 Wildfly 中选择了事务隔离:TRANSACTION_SERIALIZABLE。我正在部署它访问的两个节点从两个节点,但我只需要一个节点。
在 EJB 中:
在 DaoImpl 中:
在 Wildfly 服务器中:选择为