【问题标题】:Configure pool connection jndi for Activemq in jboss 7在 jboss 7 中为 Activemq 配置池连接 jndi
【发布时间】:2012-08-07 06:34:15
【问题描述】:

我正在使用 ActiveMq 5.4.3 并且正在使用队列。我有我的生产者作为 web 服务(不是 Ejb),我已经在 jboss 服务器中部署了 webserice 战争。我的服务很好。但是每次调用服务时,都会创建和关闭连接和会话。我想克服这个瓶颈,以便在我启动服务器时只创建一次连接和会话。我怎样才能做到这一点。我不希望 jboss 充当 mdb 容器。我已经在 jboss 的部署文件夹中部署了 activemq-rar,并将以下子系统添加到我的standalone.xml

<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
        <resource-adapters>
            <resource-adapter>
                <archive>
                    activemq-ra.rar
                </archive>
                <transaction-support>XATransaction</transaction-support>
                <connection-definitions>
                    <connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:jboss/activemq/QueueConnectionFactory" enabled="true" use-java-context="true" pool-name="QueueConnectionFactory" use-ccm="true">
                        <config-property name="prefill">
                            false
                        </config-property>
                        <config-property name="max-pool-size">
                            20
                        </config-property>
                        <config-property name="ServerUrl">
                            tcp://localhost
                        </config-property>
                        <config-property name="use-strict-min">
                            false
                        </config-property>
                        <config-property name="min-pool-size">
                            5
                        </config-property>
                    </connection-definition>
                </connection-definitions>
                <admin-objects>
                    <admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="activemq/queue/outbound" enabled="true" use-java-context="true" pool-name="outbound">
                        <config-property name="Type">
                            javax.jms.Queue
                        </config-property>
                        <config-property name="Properties">
                            PhysicalName=queue.outbound
                        </config-property>
                    </admin-object>
                    <admin-object class-name="org.apache.activemq.command.ActiveMQTopic" jndi-name="activemq/topic/inbound" enabled="true" use-java-context="true" pool-name="inbound">
                        <config-property name="Type">
                            javax.jms.Topic
                        </config-property>
                        <config-property name="Properties">
                            PhysicalName=topic.inbound
                        </config-property>
                    </admin-object>
                </admin-objects>
            </resource-adapter>
        </resource-adapters>
    </subsystem>

现在,当我尝试使用 JNDI 获取连接(下面的代码)时 PooledConnectionFactory connectionFactory = (PooledConnectionFactory) context.lookupLink("java:jboss/activemq/QueueConnectionFactory");

我得到的错误是

javax.naming.NameNotFoundException: org.apache.activemq.ra.ActiveMQManagedConnectionFactory -- service jboss.naming.context.java."org.apache.activemq.ra.ActiveMQManagedConnectionFactory 

【问题讨论】:

    标签: java axis2 activemq connection-pooling jboss7.x


    【解决方案1】:

    很简单,使用 PooledConnectionFactory。

    您可以通过代码实现,也可以通过手头的任何 XML 配置来实现:

    ConnectionFactory cf = new PooledConnectionFactory(new ActiveMQConnectionFactory("tcp://localhost:61616"));
    

    Here 是一个 XML 示例用法(用于 spring,但您可能会从中得到想法)

    然后它就像任何其他连接工厂一样。

    Connection conn = cf.createConnection();
    Session sess = conn.createSession..
    

    ActiveMQ aspects on chaching (mostly spring related)

    【讨论】:

    • 谢谢你的建议。我已经尝试过 PooledConnectionFactory,但即便如此,每个生产者都在建立连接。我已经使用 JNDI 做了一些工作来实现这一点,但遇到了一个错误。所以我编辑了问题并发布了错误。
    猜你喜欢
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2015-08-12
    • 2012-12-22
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多