EJB 3.1 事务、EntityManager

2024-04-10

我有一个通过 smack (基于事件的 java 库)处理 IQ 节的应用程序。我们现在从 vanilla Tomcat 切换到 glassfish 3.1,我想切换到 ejb 3.1。

@Stateless
public class DispatchIQService {
    private static Logger log = Logger.getLogger(DispatchIQService.class);

    @PersistenceContext(unitName="hq")
    private EntityManager em;

    ....

    public void process(XMPPConnection connection, IQ rawRequest) {
    log.debug("Raw Provider IQ: " + rawRequest.toXML());

    RawResponse answer = null;

    try{
        StateWrapper state = new StateWrapper(em, connection, rawRequest);

        // parsing raw xml from request
        rawRequest.parse();
        // processing action
        answer = rawRequest.dispatchAction(state);

由于基于事件的库,我为每个请求获取了正确的对象。 StateWrapper 是一个旧的构造,用于通过消息处理传递 em、请求和连接。我想通过 ejbs 和依赖注入尽快删除它。

使用 rawRequest.dispatchAction(state),我将控制权传递给请求对象以查找外观服务并从业务逻辑开始。

@Override
public RawResponse dispatchAction(StateWrapper state) {
    ModelFacade modelFacade = Core.lookup(ModelFacade.class);
    return modelFacade.listModels(state, childElement.getIds());
}

Core.lookup 只是进行 jndi 查找来获取所需的 Bean。在这个豆子中我可以注入它们。

@Stateless
public class ModelFacade {

    @PersistenceContext(unitName="hq")
    private EntityManager em;

    ... 
public RsModelListIQ listModels(StateWrapper state, List<Long> list) { ...

我的问题是:这个 em 是否在与 DispatchIQService 中的 em 相同的事务下运行? 我怎样才能检查它?他们的地址?

此致 米


只要您处于同一个事务中,那么两个实例中注入的 EntityManager 将引用相同的“JPA 事务上下文”。容器通常通过注入 EntityManager 代理来实现此目的,该代理通过查看事务线程上下文然后重新分派到每个事务的 EntityManager 来实现每个方法。您可以通过对 DispatchIQService 中的实体进行更新,然后重新查询 ModelFacade 中的实体以确保更新仍然存在来测试我的断言。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EJB 3.1 事务、EntityManager 的相关文章

  • 不支持的类版本错误

    当尝试从使用 Eclipse IDE 使用 jdk1 6 制作的客户端调用使用 NETbeans 使用 jdk1 7 制作的 EJB 时 我收到以下错误 Exception in thread main java lang Unsuppor
  • 如何处理 JSF 中的动态角色或用户名更改?

    我有一个在 glassfish 2 1 上运行的 JSF 应用程序 具有 EJB 3 后端 对于身份验证 我使用自定义领域 用户使用他在注册时指定的电子邮件地址和密码进行身份验证 一切都运转良好 现在我有两个相关的问题 1 用户可以编辑他的
  • EJB 应该是实例变量并在 JSF Managed Beans 中标记为瞬态吗?

    我们有几个具有请求 视图和会话范围的 JSF 托管 bean 并且正在运行 WebLogic 11g 10 3 2 Weblogic 不支持 JSF Managed Bean 中的 EJB 注释 因此我们使用了这些过程http techno
  • 无状态和有状态 Enterprise Java Bean

    我正在阅读 Java EE 6 教程 并试图了解无状态会话 bean 和有状态会话 bean 之间的区别 如果无状态会话 Bean 在方法调用之间不保留其状态 为什么我的程序会这样运行 package mybeans import java
  • JPA 日期文字

    如何在不使用 类型化 参数的情况下表示 JPA 查询中的日期 如果日期确实是固定的 例如 1980 年 3 月 1 日 则代码 TypedQuery
  • 声明的元模型属性工作正常,但继承的元模型属性为 NULL。为什么?

    我无法运行以下测试 Test public void test EntityManager em entityManagerFactory createEntityManager em getTransaction begin Criter
  • 如何在 JPA 中捕获 OptimisticLockException

    我在这里读了几个关于OptimisticLockException与 JPA 一起使用 用于无状态会话 bean 它被抛出 但显然不是我期望的地方 这是我期望得到异常的代码 try productFacade edit product ca
  • 所选 bean 不在同一模块或企业应用程序中

    只是瞎猜 但我是否需要本地接口来调用远程无状态 EJB 当我尝试通过 Netbeans 远程调用 bean 时 Netbeans 不允许对此 Bean 进行远程调用或任何调用 为什么不 尝试手动完成 如下 jndi是什么global部署在
  • 尝试编写 JPA 2.1 左外连接时出现“with 子句只能引用驱动表中的列”

    我正在使用 JPA 2 1 和 Hibernate 4 3 6 Final 我正在尝试使用 CriteriaBuilder 编写带条件的左外连接 所以我有 final CriteriaBuilder cb m entityManager g
  • SpringBoot不处理org.hibernate.exception.ConstraintViolationException

    我在实体类中定义了一个用于验证电子邮件的模式 在我的验证异常处理程序类中 我添加了 ConstraintViolationException 的处理程序 我的应用程序使用 SpringBoot 1 4 5 配置文件 java Entity
  • CDI 将 EJB 注入 Glassfish v3 上的 POJO

    是否可以在 Glassfish v3 上使用 CDI 将 EJB 3 1 bean 注入 POJO 中 我的类 在 EJB 模块中 Singleton LocalBean Startup Named public class NewSing
  • 删除子项时,JPA 关系不会更新

    假设有以下场景 Entity public class A OneToMany mappedBy a cascade CascadeType ALL private List b bList Entity public class B Ma
  • EJB 3.1 事务、EntityManager

    我有一个通过 smack 基于事件的 java 库 处理 IQ 节的应用程序 我们现在从 vanilla Tomcat 切换到 glassfish 3 1 我想切换到 ejb 3 1 Stateless public class Dispa
  • 我在哪里可以找到 jpa orm.xml 使用示例[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试查看 JPA orm xml 的一些使用示例 如果有人引导我访问链接 架构在这里 http java sun com xml n
  • DDD和应用层

    我在DDD中添加 Stateful Stateless WebService等是应用层 应用服务 吗 从下面的链接来看 这似乎是正确的 第二个问题 我创建了一个存储库类 所有涉及存储库的方法调用都应该包装在应用程序服务中吗 或者我可以直接在
  • WebLogic Server 10.3.6 中的 JPA 2.0

    我需要使用 JPA 2 0 带有 EclipseLink 实现 问题是我还需要在实现 Java EE 5 规范的 WebLogic 10 3 6 服务器中部署此应用程序 因此不需要支持 JPA 2 我知道有可用于在此版本中添加对 JPA 2
  • 无法在我的 Maven 项目中使用依赖项 jboss-javaee-6.0

    我已经使用 JBoss 7 1 1 设置了一个 Maven 项目 我想使用 JavaEE 库 在根 pom xml 中我设置了
  • 具有更多注入 EJB 实例的无状态 EJB

    我知道无状态 EJB 存储在池中并根据需要进行实例化 我的问题是 当存在更多 EJB 依赖项时会发生什么 例如如下所示 Remote Stateless public class Master EJB EJB private EJB A e
  • IntelliJ 无法识别 JPA 静态元模型

    我使用 JHipster 生成应用程序 并使用 Gradle 作为构建工具 当我创建实体时 我添加了过滤支持 这会生成 JPA 静态元模型 但 IntelliJ 无法识别元模型 我已经在 IntelliJ 上启用了注释处理器设置 但它似乎不
  • MyISAM 方言生成错误的 DDL

    我们使用 MyISAM 方言org hibernate dialect MySQLMyISAMDialect使用JPA2自动生成DDL文件3 6 9 FinalMySQL 5 5 数据库上的 hibernate 提供程序 The creat

随机推荐