第 7 章 使用 JMS 连接工厂

本章论述了如何在 OSGi 中使用 JMS 连接工厂。从根本上,您使用以下方法实现它:

org.osgi.framework.BundleContext.registerService(javax.jms.ConnectionFactory.class,
                                                 connectionFactoryObject,
                                                 properties);
org.osgi.framework.BundleContext.registerService(javax.jms.XAConnectionFactory.class,
                                                 xaConnectionFactoryObject,
                                                 properties);

注册此类服务的方法有两种:

  • 使用 jms:create Karaf console 命令发布连接工厂。这是 配置方法
  • 使用 Blueprint、SOSOS Declarative Services (SCR)或仅 BundleContext.registerService () API 调用等方法发布连接工厂。这个方法需要一个包含代码和/或元数据的专用 OSGi 捆绑包。这是 部署方法

详情包括在以下主题中:

7.1. 关于 OSGi JMS 服务

处理 JDBC 数据源的 OSGi 方法与两个接口相关:

  • standard org.osgi.service.jdbc.DataSourceFactory
  • proprietary org.ops4j.pax.jdbc.pool.common.PooledDataSourceFactory

对于 JMS,请考虑以下几点:

  • 专有 org.ops4j.pax.jms.service.ConnectionFactoryFactory 与标准 OSGi JDBC org.osgi.service.jdbc.DataSourceFactory相同
  • 专有 org.ops4j.pax.jms.service.PooledConnectionFactoryFactory Factory 与专有 pax-jdbc org.ops4j.pax.jdbc.pool.common.PooledDataSourceFactory相同

对于专用的、特定于代理的 org.ops4j.pax.jms.service.ConnectionFactoryFactory 实现,有如下捆绑包:

  • mvn:org.ops4j.pax.jms/pax-jms-artemis/1.0.0
  • mvn:org.ops4j.pax.jms/pax-jms-ibmmq/1.0.0
  • mvn:org.ops4j.pax.jms/pax-jms-activemq/1.0.0

这些捆绑包注册特定于代理的 org.ops4j.pax.jms.service.ConnectionFactoryFactory 服务,它可以返回 javax.jms.ConnectionFactoryjavax.jms.XAConnectionFactory 等 JMS 工厂。例如:

karaf@root()> feature:install pax-jms-artemis

karaf@root()> bundle:services -p org.ops4j.pax.jms.pax-jms-config

OPS4J Pax JMS Config (248) provides:
------------------------------------
objectClass = [org.osgi.service.cm.ManagedServiceFactory]
service.bundleid = 248
service.id = 328
service.pid = org.ops4j.connectionfactory
service.scope = singleton

karaf@root()> bundle:services -p org.ops4j.pax.jms.pax-jms-artemis

OPS4J Pax JMS Artemis Support (247) provides:
---------------------------------------------
objectClass = [org.ops4j.pax.jms.service.ConnectionFactoryFactory]
service.bundleid = 247
service.id = 327
service.scope = singleton
type = artemis