This morning I did a rudimentary load test of our application, just fired 50 messages in rapid sequence via JMS to the first component in a 'chain' of components using JCA flow. Approx 20 messages into the test, I got the following error, for each of the remaining messages.

09:35:32,034 ERROR [JCAFlow:doRouting] Failed to send exchange: MessageExchange[internal JMS Network javax.jms.JMSException: No ManagedConnections available within configured blocking timeout ( 100 [ms] ) at org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection (ActiveMQConnectionFactory.java:96) at org.apache.activemq.ra.ActiveMQConnectionFactory.createConnection (ActiveMQConnectionFactory.java:65) at org.apache.servicemix.jbi.nmr.flow.jca.JCAFlow.sendJmsMessage (JCAFlow.java:700)
        ...


I've been studying the Servicemix and ActiveMQ docs, looking for settings (under the JCAFlow or the ActiveMQ ConnectionFactory) that would help me increase the number of connections and/or the 100ms timeout value, but I don't know exactly what I'm looking for, so I'm stumped.

the applicable bits from my servicemix.xml file are:

<sm:container id="jbi" rootDir="#rootDir" useMBeanServer="true"
        createMBeanServer="false" installationDirPath="#installDir"
deploymentDirPath="#deployDir" flowName="jca?jmsURL=tcp:// localhost:61616"
        autoEnlistInTransaction="true" persistent="true"
        monitorInstallationDirectory="true" dumpStats="true"
        statsInterval="10" transactionManager="#transactionManager"
        depends-on="broker">

...other stuff...

<!-- the JCA container -->
    <bean id="jencks" class="org.jencks.JCAContainer"
        singleton="true">

<!-- lets use the default configuration of work manager and transaction manager-->
        <property name="bootstrapContext">
            <bean
                class="org.jencks.factory.BootstrapContextFactoryBean">
                <property name="threadPoolSize" value="25" />
            </bean>
        </property>

        <!-- the JCA Resource Adapter -->
        <property name="resourceAdapter">
            <bean id="activeMQResourceAdapter"
                class="org.apache.activemq.ra.ActiveMQResourceAdapter"
                singleton="true">
                <property name="serverUrl"
                    value="tcp://localhost:61616" />
            </bean>
        </property>
    </bean>

<bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">
        <property name="config" value="classpath:activemq.xml"/>
    </bean>

<bean id="transactionContextManager" class="org.jencks.factory.TransactionContextManagerFactoryBean"/> <bean id="transactionManager" class="org.jencks.factory.GeronimoTransactionManagerFactoryBean" />

    <bean id="jmsFactory" depends-on="broker"
        class="org.apache.activemq.pool.PooledConnectionFactory">
        <property name="connectionFactory">
            <bean
                class="org.apache.activemq.ActiveMQConnectionFactory">
                <constructor-arg value="tcp://localhost:61616" />
            </bean>
        </property>
    </bean>

My activemq.xml file looks like:

<beans xmlns="http://activemq.org/config/1.0";>
    <broker id="broker" useJmx="false">

        <persistenceAdapter>
<journaledJDBC journalLogFiles="5" dataDirectory="#dataDir" dataSource="#postgres-ds"/>
        </persistenceAdapter>

        <transportConnectors>
            <transportConnector uri="tcp://localhost:61616"/>
        </transportConnectors>


    </broker>

<!-- This xbean configuration file supports all the standard spring xml configuration options -->

    <!-- Postgres DataSource Sample Setup -->
<bean id="postgres-ds" class="org.postgresql.ds.PGPoolingDataSource">
        <property name="serverName" value="localhost"/>
        <property name="databaseName" value="activemq"/>
        <property name="portNumber" value="0"/>
        <property name="dataSourceName" value="postgres"/>
        <property name="initialConnections" value="1"/>
        <property name="maxConnections" value="10"/>
        <property name="user" value="activemq"/>
        <property name="password" value="activemq"/>
        <!--
        <property name="user" value="cmroot"/>
        <property name="password" value="22cmroot"/>
        -->
    </bean>



    <!-- Directories relative to web app -->
<bean id="servletContext" class="org.springframework.web.context.support.ServletContextFactoryBean " /> <bean id="dataDir" class="org.springframework.web.util.WebUtils" factory-method="getRealPath">
        <constructor-arg ref="servletContext" />
        <constructor-arg value="/data" />
    </bean>

</beans>



Reply via email to