3.3. 使用>=< 事务客户端
使用 802-1 时,与事务管理器交互的最资金和标准方法是 Java Transaction 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 命名和目录接口)获取用户 事务
实例是获取事务客户端的一种方式。在 interaction 环境中,您可以访问事务客户端,例如使用 CDI (上下文和依赖项注入)。
下图显示了 typica developer Camel 应用。
图显示 Camel 代码和应用程序代码都可以访问:
-
javax.transaction.UserTransaction
实例,可以使用 SpringTransactionTemplate
类直接从应用程序或内部处理事务处理。 -
数据库通过 JDBC API 直接或使用 Spring 的
JdbcTemplate
,或者使用camel-jdbc
组件。 -
使用 Spring 的
JmsTemplate
类或使用camel-jms
组件直接通过 JMS API 进行消息代理。
使用 javax.transaction.UserTransaction
对象时,您不需要了解正在使用的实际事务管理器,因为您只直接使用事务客户端。(请参阅 第 1.3 节 “关于事务客户端”。)Spring 和 Camel 采用不同的方法,因为它在内部使用 Spring 的事务设施。
iwl Application
在典型的>=< 情景中,应用被部署到 ausearch 应用服务器,通常作为 WAR
或 EAR
存档。通过 JNDI 或 CDI,应用程序可以访问 javax.transaction.UserTransaction
服务的实例。然后,使用这个事务客户端实例来划分事务。在事务中,应用执行 JDBC 和/或 JMS 访问。
Camel 组件和应用程序代码
它们代表了执行 JMS/JDBC 操作的代码。Camel 具有自己的高级方法来访问 JMS/JDBC 资源。应用程序代码可以直接使用给定的 API。
JMS Connection Factory
这是 javax.jms.ConnectionFactory
接口,用于获取 javax.jms.Connection
的实例,然后是 javax.jms.Session
(或 JMS 2.0 中的 javax.jms.JmsContext
)。这可以由应用程序直接使用,或者在 Camel 组件中间接使用,这些组件可以在内部使用 org.springframework.jms.core.JmsTemplate
。应用程序代码和 Camel 组件都不需要此连接工厂的详细信息。连接工厂在应用服务器中配置。您可以在 regex 服务器中看到此配置。Fuse 等 OSGi 服务器类似。系统管理员独立于应用程序配置连接工厂。通常,连接工厂实现池功能。
JDBC 数据源
这是 javax.sql.DataSource
接口,用于获取 java.sql.Connection
的实例。与 JMS 一样,此数据源可以直接或间接使用。例如,camel-sql
组件在内部使用 org.springframework.jdbc.core.JdbcTemplate
类。与 JMS 一样,应用程序代码和 Camel 都不需要此数据源的详细信息。配置是在应用服务器内或 OSGi 服务器内完成的,方法是使用 第 4 章 配置 Narayana 事务管理器 中描述的方法。