配置ActiveMQ以通过JNDI使用连接池

时间:2013-07-24 20:03:23

标签: jboss activemq jndi out-of-memory connection-pooling

我遇到了OutOfMemoryError异常,我想我已经追溯到应用程序正在创建新的TopicConnections并重复关闭它们这一事实。

我要么需要一些有效的代码来缓存这些连接(最好不要重新发明轮子)或者更好,但我希望能够配置org.apache.activemq.jndi.ActiveMQInitialContextFactory来提供org.apache.activemq.pool.AmqJNDIPooledConnectionFactory而不是默认org.apache.activemq.ActiveMQConnectionFactory。 (或以其他方式得到类似的结果)

目前,通过以下方式检索连接工厂:

    Properties props = connProps;
    if (connProps == null)
    {
        try
        {
            props = new Properties();
            props = PropertiesUtility.loadResource("jms.properties");
        }
        catch (IOException e)
        {
            props = null;
        }
    }
    // set up the connection and session
    Context ctx = new InitialContext(props);
    TopicConnectionFactory cf = (TopicConnectionFactory) ctx.lookup("ConnectionFactory");

和连接和会话创建如下:

myConnection = cf.createTopicConnection();
myConnection.start();

mySession = myConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);

我找到了https://community.jboss.org/wiki/ShouldICacheJMSConnectionsAndJMSSessions,但我推测是因为我们使用自定义属性文件来定义我们的主题,当我尝试提取javax.naming.NameNotFoundException: JmsXA not bound jndi资源时,我得到java:/JmsXA。 / p>

jms.properties:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616
topic.topic1 = topic1
topic.topic2 = topic2
topic.topic3 = topic3
topic.topic4 = topic4

总而言之,我需要实现池化,但是因为我还没弄明白如何获得池连接工厂的实例而陷入困境。我可以自己做,但更愿意避免重新发明轮子(并在此过程中解决错误)。

另外 - 如果可能的话,最好将我的java类从底层的ActiveMQ类中抽象出来。

其他环境信息: 我们正在使用在JDK6下运行的JBoss AS 6.0.0,并按照以下说明替换(并完全删除)HornetQ的内置副本和ActiveMQ:http://activemq.apache.org/jboss-integration.html

0 个答案:

没有答案