第 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 JDBCorg.osgi.service.jdbc.DataSourceFactory
相同 -
专有
org.ops4j.pax.jms.service.PooledConnectionFactoryFactory
Factory 与专有 pax-jdbcorg.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.ConnectionFactory
和 javax.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