3.3. 使用 JavaEE 事务客户端


在使用 JavaEE 时,与事务管理器交互的最资金和标准方法是 Java 事务 API(JTA)接口,javax.transaction.UserTransaction。规范用法是:

InitialContext context = new InitialContext();
UserTransaction ut = (UserTransaction) context.lookup("java:comp/UserTransaction");
ut.begin();

// Access transactional, JTA-aware resources such as database and/or message broker

ut.commit(); // or ut.rollback()

从 JNDI(Java 命名与目录接口)获取 UserTransaction 实例是获取事务客户端的一种方式。在 JavaEE 环境中,您可以使用 CDI(上下文和依赖项注入)访问事务客户端。

下图显示了 typica JavaEE Camel 应用。

JavaEE 事务 api

图显示 Camel 代码和应用程序代码都可以访问:

  • javax.transaction.UserTransaction 实例,使用 Spring TransactionTemplate 类直接从应用程序或内部通过事务感知型 Camel 组件分离交易。
  • 直接通过 JDBC API 的数据库,如使用 Spring 的 JdbcTemplate 或使用 camel-jdbc 组件。
  • 通过 JMS API 的消息代理通过使用 Spring 的 JmsTemplate 类或使用 camel-jms 组件来直接通过 JMS API 进行消息代理。

在使用 javax.transaction.UserTransaction 对象时,您不需要清楚使用的实际事务管理器,因为您只与事务客户端直接合作。(请参阅 第 1.3 节 “关于事务客户端”。) Spring 和 Camel 采用不同的方法,因为它在内部使用 Spring 的事务工具。

JavaEE 应用

在典型的 JavaEE 场景中,应用部署到 JavaEE 应用程序服务器,通常是 WAREAR 存档。通过 JNDI 或 CDI,应用程序可以访问 javax.transaction.UserTransaction 服务的实例。然后,复制使用此事务客户端实例来分离事务。在事务中,应用执行 JDBC 和/或 JMS 访问权限。

Camel 组件和应用程序代码

这些代表执行 JMS/ JDBC 操作的代码。Camel 具有自己的高级方法,可访问 JMS/ JDBC 资源。应用代码可以直接使用给定的 API。

JMS ConnectionFactoryy

这是 javax.jms.ConnectionFactory 接口,用于获取 javax.jms.Connection 的实例,然后在 JMS 2.0 中获取 javax.jms.Session (或 javax.jms.JmsContext )。这可以直接由应用程序使用,或在 Camel 组件中间接使用,可在内部使用 org.springframework.jms.core.JmsTemplate。应用程序代码或 Camel 组件都不需要此连接工厂的详细信息。连接工厂是在应用服务器上配置的。您可以在 JavaEE 服务器中看到此配置。OSGi 服务器(如 Fuse)类似。系统管理员会独立于应用程序配置连接工厂。通常,连接工厂实施池功能。

JDBC 数据源

这是 javax.sql.DataSource 接口,用于获取 java.sql.Connection 的实例。与 JMS 一样,该数据源可以直接或间接使用。例如,camel-sql 组件在内部使用 org.springframework.jdbc.core.JdbcTemplate 类。与 JMS 一样,应用程序代码和 Camel 都不需要此数据源的详细信息。该配置通过使用 第 4 章 配置 Narayana 事务管理器 中描述的方法在应用服务器或 OSGi 服务器内完成。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.