问题标签 [ejb-3.1]
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.
java - 码头 8 + EJB 3.1 + JTA + CDI + JPA 2 堆栈?
谁能告诉我目前是否可以通过 Jetty 将部分 Java EE 6 Web 配置文件“粘合在一起”?我发现了很多关于将独立的 EJB 3 容器、JTA 提供程序等与旧 Jetty 版本集成的文章,所以如果我能让它们一起工作,我很想知道。我想在 Jetty 8 上组装一个 Servlet 3.0 + CDI + EJB 3.1 + JTA(如果需要,我真正想要的只是声明性事务管理)+ JPA 2 环境(如果没有可用的 Jetty 替代品,则为 Tomcat 7)。我的问题是:可以做到吗?有没有人设法做到这一点?有关于让 OpenEJB、Atomikos、Weld、EclipseLink 和 Jetty(或任何其他类似堆栈)一起工作的文章吗?那里有任何神奇的“做这一切” pom.xml 文件吗?
PS:是的,我知道我可以只使用 GlassFish(我非常喜欢)。我只是想知道使用 Servlet 容器来实现类似的工作有多难,以及这两种环境在复杂性、性能、大小、部署速度、硬件资源消耗等方面的比较如何。
hibernate - 我应该在哪里调用 Hibernate annotationConfiguration() 才能只调用一次?
我的 Web 应用程序中有一些使用 Hibernate SessionFactory 的 java bean (EJB 3.1),因此我需要集中创建这个对象,因为我只需要一个 sessionFactory 用于整个应用程序。我的意思是,以下调用:
我想创建一个 HibernateHelper 类并将方法放在那里,在 bean 中获取新会话(因为 Hibernate 会话是轻量级对象)但是我不知道如何“强制”这样一个类与应用程序一起初始化(并且只有一次)。
一些见解?
非常感谢!
transactions - 在 EJB3 事务提交后如何“做某事”?
EJB3 中是否有一些东西允许我在事务提交之后执行一些代码(我想发送 XMPP 消息以通知外部设备进行更新)?
我知道我可以使用 JTA API 并使用我自己编写的 XA 资源来做类似的事情,但我觉得它不是正确的工具。
谢谢
jpa-2.0 - @Inject 和 @EJB 有什么区别
我目前正在学习新的 Java EE 6 组件模型,并且对最新的依赖注入机制感到困惑。所以这是我的问题:
1)@Inject 和@EJB 有什么区别
2) 如果我有一个包含另一个 POJO(其中一个是 DAO 代码)的简单 POJO,那么更好的选择是:@Inject 还是 @EJB?
我可以混合使用@Inject 和@EJB 吗?
一个例子是:
ClassA 实现 InterfaceA 并具有 ClassA_Adaptor 的实例
ClassA_Adaptor 实现 InterfaceAB 并具有 ClassB 的实例
ClassB 实现 InterfaceB 并具有 ClassB_Adaptor 的实例和 DAO_ClassB 的实例
ClassB_Adaptor 实现 InterfaceB 并具有 ClassC 的实例
ClassC 实现 InterfaceBC 并具有 WebService_ClassC 的实例
DAO_ClassB 将使用 JPA 2.0 (@PersistenceContext)
我想注入所有这些,包括 DAO 和 WebService。
3) 只对某些操作使用事务性而不是对所有操作,这是一种不好的方法吗?
例如:DAO_ClassB 中的某些方法是您的典型查询,而其他方法是“写入”方法。不使用事务包装“READ”方法是不是很糟糕?
据我了解,DAO_ClassB 可以使用 @EJB 与事务一起包装(注入 DAO_ClassB 并使所有方法都具有事务性)。我该如何控制它?
抱歉,如果有些问题令人困惑,因为我只知道 Java EE 6 新组件模型的零碎部分。
java - 同步 MDB 通信,最大池大小问题
我正在使用带有 Glassfish 的 Java Enterprise (3.1)。我有两个单独的 EAR,它们通过 JMS 同步通信。进一步来说:
EAR1 使用 JMS 消息来告诉 EAR2 做什么。EAR1 开始侦听来自 EAR2 (QueueReceiver.receive) 的回答。EAR2 接收到消息并进行相应的处理,然后将 JMS 消息连同输出一起发送回 EAR1。
这一切都很好。直到我得到这个例外:
所以看起来容器没有重用 MDB。相反,它会创建新的,直到我达到极限。我知道这是因为 EAR2 中的 MDB 使用 JMS 发回结果。我的猜测是,MDB 实例中仍然分配了一些资源,这会导致这种行为。
如果我只是使用 MDB 打印收到的消息,我可以整天继续发送消息,所以它肯定与 JMS 连接有关。
我已经在这两天了,所以如果有人愿意提供一些帮助,将不胜感激。
此代码整天有效:
虽然这个没有:
(我也尝试过使用更新更花哨的 EJB 东西,比如符号等,但也没有用......)
塞巴斯蒂安
ejb-3.1 - EJB 单元测试用例
团队,
我们需要做 EJB 3.1 单元测试用例。为此,我们正在分析工具以进行有效的测试。我们正在考虑 arquillian,仙人掌。谁能告诉我哪个工具在性能方面适合我们的技术堆栈。我们正在使用 JBOSS+Hibernate
glassfish - CDI 事件观察器方法是否与 EJB 兼容?
我有一个单例 EJB(javax.ejb.Singleton 版本。叹息。)它上面有一个 CDI 观察者方法。当我尝试将其部署到 glassfish 3.1 时,服务器无法在没有任何实际解释的情况下部署 EAR 文件 - 只是说部署期间出现异常而没有任何更多细节。
这是 CDI 事件侦听器:
如果我将 Singleton bean 更改为只是一个 @ApplicationScoped bean,则应用程序可以正常部署。同样,如果我删除 CDI 事件观察器方法,则应用程序部署良好。我实际上需要这个类是一个 EJB 单例,因为我想要 EJB 的事务、线程安全等,所以把它作为一个 @ApplicationScoped POJO 对我来说没有多大用处。不过,问题似乎并不局限于 Singleton bean - 我已经通过将注释更改为 @Stateless 和 @Stateful 进行了实验,但我遇到了同样的问题。
在我看来,这可能是 Weld 中的一个错误,也许 Weld 和 EJB 正在争论他们如何代理该方法 - 大概 EJB 需要添加一个拦截器类并包装该方法以确保线程安全,而 Weld 正在尝试做一些事情否则使事件监听器工作?
我是否误解了这里的某些东西,是否应该在 EJB 上根本不使用 CDI 事件处理程序(在这种情况下应该有来自 glassfish 的更好的错误消息)——或者这实际上只是 CDI 或 EJB 实现中的一个错误?
transactions - EJB 事务问题
我有一个 EJB,其目的是将用户从另一个系统复制到我的系统中,方法是在缺少用户时创建用户,或者更新具有相同 ID 的现有用户。使用了三种方法:
我正在寻找的场景是持久化所有用户,如果发生错误,我想记录这个并回滚那个单一的持久化,然后继续使用其他用户。等等REQUIRES_NEW
是createUser()
有道理的。换句话说,总共应该有 x 个事务开始,其中 x 是用户数。
问题
EJB 的文档仅涵盖被调用的方法是否应该启动事务,但我应该如何注释调用(“客户端”)方法;timer()
正确updateUserDB
吗?NOT_SUPPORTS 和 SUPPORTS 导致 ejbTransactionRequiredException
在到达em.persist(user)
inside时抛出 a createUser()
,我认为这是没有意义的,因为createUser()
从 SUPPORTS 方法调用时应该允许启动新事务。如果我用 REQUIRED 注释调用方法,则根本不会保留任何用户,那么回滚似乎会影响更大的事务,而不是小的(每个用户)事务。
这三种方法应该怎么注释才能得到想要的效果呢?
编辑
将两个调用方法都设置为Required使JTA不会抛出异常,但由于某种原因,事务每次都会回滚,即使我删除了context.setRollbackOnly()
.
java - 当 EJB 客户端失去与应用程序服务器的连接时,是否可以捕获异常?
我想为 EJB 客户端应用程序失去与应用程序服务器的连接时发生的特定情况创建一个异常处理程序。我们正在创建的代码能够以用户友好的方式处理客户端应用程序,以尝试重新连接到同一服务器或故障转移环境中的另一台服务器。“失去连接”是指任何需要重新连接的东西。原因可能是网络问题、服务器锁定、服务关闭等。
这是我们正在寻找的内容的想法(客户端代码):
当然EJBConnectionException不存在。有类似的吗?
我们使用的是 OpenEJB 1.4(兼容 EJB 3.x)。但是,如果可能,我们希望使用可以跨不同应用程序服务器使用的异常处理程序。
另一件事是,一些应用服务器提供了某种故障转移机制,但我们的要求有点具体,我们可以直接在客户端代码中实现它。
hibernate - 如何使用 JPA 映射有状态的 ejb 3.1 会话 bean
我对如何使用带有休眠的 JPA 注释来表示我的数据库有疑问。这是一个非常简单的网络应用程序,代表一个在线图书馆。
我有一个允许用户预订书籍的有状态会话 bean。用户最多可以预订 2 本书。它具有以下字段:
- 整数标识;
- 用户豆用户豆;
- 列出书单;
- 日期预订日期;
- 日期预订Exp;
代表这个类的数据库是:
- int id_book_reservation PK
- int id_user FK
- int id_book FK
- 日期预订日期
- date expire_date
这个有状态的 bean 可以用作购物车。因此它允许用户将书籍放在那里,继续浏览,添加另一本书,然后最终要求预订(如电子商务网站上的“购买”操作)。
我不知道如何映射 bookList 字段。预订和书籍之间的关系是一对多的,但我想知道如何才能知道,例如,什么时候已经预订了一本书,因为我有一个列表而不是简单的书籍对象(在 HQL 中) .
提前致谢!干杯。