3.5. 事务客户端和事务管理器之间的 OSGi 接口
在 description of the client API 和 Spring Boot 事务客户端 API 的描述后,查看 OSGi 服务器(如 Fuse)中的关系会很有帮助。OSGi 的一个功能是全局服务 registry,可用于:
- 通过过滤或接口查找服务。
- 使用给定接口和属性注册服务。
同样,在>=< 应用程序服务器中部署的应用程序使用 JNDI (服务 locator 方法)获取对 javax.transaction.UserTransaction
的引用,或者使它们被 CDI注入(依赖项注入 方法)注入,您可以使用以下方法获取相同的引用(直接或间接):
-
调用
org.osgi.framework.BundleContext.getServiceReference ()
方法(服务 locator)。 - 将它们注入到 Blueprint 容器中。
- 使用 Service 组件运行时(SCR)注解(依赖项注入)。
下图显示了在 OSGi 运行时中部署的 Fuse 应用程序。应用程序代码和/或 Camel 组件使用其 API 获取事务管理器、数据源和连接工厂的引用。
应用程序(捆绑包)与 OSGi 注册表中注册的服务交互。通过 接口执行访问权限,这与应用程序应相关。
在 Fuse 中,实施(直接或通过小包装器)事务的客户端接口的基本对象是 org.jboss.narayana.osgi.jta.internal.OsgiTransactionManager
。您可以使用以下接口访问事务管理器:
-
javax.transaction.TransactionManager
-
javax.transaction.UserTransaction
-
org.springframework.transaction.PlatformTransactionManager
-
org.ops4j.pax.transx.tm.TransactionManager
您可以直接使用这些接口,或通过选择框架或库(如 Camel)来隐式使用它们。
有关在 Fuse 中配置 org.jboss.narayana.osgi.jta.internal.OsgiTransactionManager
的方法的详情,请参考 第 4 章 配置 Narayana 事务管理器。本指南中的后续章节将构建本章中的信息,并描述了如何配置和使用其他服务,如 JDBC 数据源和 JMS 连接工厂。