307.6. 高级使用备注


307.6.1. 可插拔连接资源管理

SJMS2 通过内置连接池提供 JMS 连接资源管理。 http://docs.oracle.com/javaee/5/api/javax/jms/Connection.html这消除了依赖第三方 API 池逻辑的需求。但是,您可能需要使用外部连接资源管理器,如 J2EE 或 OSGi 容器提供的资源管理器。对于此 SJMS2,提供了一个接口,可用于覆盖内部 SJMS2 连接池功能。这通过 ConnectionResource 接口来完成。

Connection Resource 提供了根据需要来浏览和返回连接方法,即用于向 SJMS2 组件提供连接池的合同。如果需要将 SJMS2 与外部连接池管理器集成时,应使用用户。

建议您为标准的 ConnectionFactory 提供程序使用通过 SJMS2 作为原样提供的 ConnectionFactoryResource 实施,或者根据该组件优化的扩展。

以下是将插件的 ConnectionResource 和 ActiveMQ PooledConnectionFactory 搭配使用的示例:

public class AMQConnectionResource implements ConnectionResource {
    private PooledConnectionFactory pcf;

    public AMQConnectionResource(String connectString, int maxConnections) {
        super();
        pcf = new PooledConnectionFactory(connectString);
        pcf.setMaxConnections(maxConnections);
        pcf.start();
    }

    public void stop() {
        pcf.stop();
    }

    @Override
    public Connection borrowConnection() throws Exception {
        Connection answer = pcf.createConnection();
        answer.start();
        return answer;
    }

    @Override
    public Connection borrowConnection(long timeout) throws Exception {
        // SNIPPED...
    }

    @Override
    public void returnConnection(Connection connection) throws Exception {
        // Do nothing since there isn't a way to return a Connection
        // to the instance of PooledConnectionFactory
        log.info("Connection returned");
    }
}
Copy to Clipboard Toggle word wrap

然后,将 ConnectionResource 传递到 Sjms2Component

CamelContext camelContext = new DefaultCamelContext();
AMQConnectionResource pool = new AMQConnectionResource("tcp://localhost:33333", 1);
Sjms2Component component = new Sjms2Component();
component.setConnectionResource(pool);
camelContext.addComponent("sjms2", component);
Copy to Clipboard Toggle word wrap

要查看其使用的完整示例,请参阅 ConnectionResourceIT

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat