You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by activemqnewbie <ac...@yahoo.co.in> on 2008/01/10 15:23:38 UTC
Got minus one from a read call
When I am executing a bulk load of data to Oracle, I intermittently
receive the following. Activemq publlishes 300 messages before
failing. If I run it again it may fail after publishing200 messages . Has
anyone seen this before? It appears that it is failing to create a
connection pool.
Seems prvious connections are not being closed.Is this a bug in activemq or
is it that am missing to specify some parametrs in my activemq.xml.
Below is my activemq.xml snippet.
Appreciate help on my query.
App uses: ActiveMq5,Oracle 10g
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.org/config/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.org/config/1.0
http://activemq.apache.org/schema/activemq-core.xsd
http://activemq.apache.org/camel/schema/spring
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
<!-- Allows us to use system properties as variables in this configuration
file -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
<broker xmlns="http://activemq.org/config/1.0" brokerName="localhost"
dataDirectory="${activemq.base}/data">
<!-- Destination specific policies using destination names or wildcards
-->
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic="SINFO.>" producerFlowControl="false"
memoryLimit="1mb">
<dispatchPolicy>
<strictOrderDispatchPolicy/>
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy/>
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<!-- The transport connectors ActiveMQ will listen to -->
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616"
discoveryUri="multicast://default"/>
<transportConnector name="ssl" uri="ssl://localhost:61617"/>
<transportConnector name="stomp" uri="stomp://localhost:61613"/>
<transportConnector name="xmpp" uri="xmpp://localhost:61222"/>
</transportConnectors>
<!-- The store and forward broker networks ActiveMQ will listen to -->
<networkConnectors>
<!-- by default just auto discover the other brokers -->
<networkConnector name="default-nc" uri="multicast://default"/>
</networkConnectors>
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#oracle-ds"/>
</persistenceAdapter>
</broker>
<!--
** Lets deploy some Enterprise Integration Patterns inside the ActiveMQ
Message Broker
** For more details see
**
** http://activemq.apache.org/enterprise-integration-patterns.html
-->
<camelContext id="camel"
xmlns="http://activemq.apache.org/camel/schema/spring">
<!-- You can use a <package> element for each root package to search for
Java routes -->
<package>org.foo.bar</package>
<!-- You can use Spring XML syntax to define the routes here using the
<route> element -->
<route>
<from uri="activemq:example.A"/>
<to uri="activemq:example.B"/>
</route>
</camelContext>
<!-- lets create a command agent to respond to message based admin
commands on the ActiveMQ.Agent topic -->
<commandAgent xmlns="http://activemq.org/config/1.0"/>
<!-- An embedded servlet engine for serving up the Admin console -->
<jetty xmlns="http://mortbay.com/schemas/jetty/1.0">
<connectors>
<nioConnector port="8161" />
</connectors>
<handlers>
<webAppContext contextPath="/admin"
resourceBase="${activemq.base}/webapps/admin" logUrlOnStart="true" />
<webAppContext contextPath="/demo"
resourceBase="${activemq.base}/webapps/demo" logUrlOnStart="true" />
</handlers>
</jetty>
<!-- Oracle DataSource Sample Setup -->
<bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@xx.xx.xx.xx"/>
<property name="username" value="xxx"/>
<property name="password" value="xxx"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
Thanks
--
View this message in context: http://www.nabble.com/Got-minus-one-from-a-read-call-tp14734900s2354p14734900.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: Got minus one from a read call
Posted by Frederic Conrotte <fr...@gmail.com>.
I also experienced the same problem, and thanks to Jan Wasserbauer a fix is
available here:
https://issues.apache.org/activemq/browse/AMQ-1809
--
View this message in context: http://www.nabble.com/Got-minus-one-from-a-read-call-tp14734900p18233032.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: Got minus one from a read call
Posted by James Strachan <ja...@gmail.com>.
On 10/01/2008, activemqnewbie <ac...@yahoo.co.in> wrote:
>
> When I am executing a bulk load of data to Oracle, I intermittently
> receive the following. Activemq publlishes 300 messages before
> failing. If I run it again it may fail after publishing200 messages .
What is the failure message?
> Has
> anyone seen this before? It appears that it is failing to create a
> connection pool.
The default connection pool doesn't have a connection limit. If you're
oracle does have a limited number of connections, try setting the
maximum number of connections to use.
<property name="maxActive" value="200"/>
FWIW the activemq.xml thats shipped in 5.1 and later has this setting
so its easy to cut n paste etc.
--
James
-------
http://macstrac.blogspot.com/
Open Source Integration
http://open.iona.com
Re: Got minus one from a read call
Posted by spiiff <ma...@siemens.com>.
Hi,
we're facing nearly the same problem I think...
Here is my stack trace:
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'org.apache.activemq.xbean.XBeanBrokerService' defined in class
path resource [activemq.xml]: Invocation of init method failed; nested
exception is java.io.IOException: Cannot create PoolableConnectionFactory
(I/O Exception: Got minus one from a read call)
Caused by: java.io.IOException: Cannot create PoolableConnectionFactory (I/O
Exception: Got minus one from a read call)
at
org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:45)
at
org.apache.activemq.store.jdbc.TransactionContext.getConnection(TransactionContext.java:61)
at
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.createAdapter(JDBCPersistenceAdapter.java:294)
at
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.getAdapter(JDBCPersistenceAdapter.java:249)
at
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.start(JDBCPersistenceAdapter.java:155)
at
org.apache.activemq.store.journal.JournalPersistenceAdapter.start(JournalPersistenceAdapter.java:225)
at
org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:1448)
at
org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:1400)
at
org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:513)
at org.apache.activemq.broker.BrokerService.start(BrokerService.java:422)
at
org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:46)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1201)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1171)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:425)
at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at
org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:64)
at
org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:52)
at
org.apache.activemq.xbean.XBeanBrokerFactory.createApplicationContext(XBeanBrokerFactory.java:91)
at
org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:51)
at
org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:71)
at
org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:54)
at activemqtest.ActivemqJunit.testFoobar(ActivemqJunit.java:90)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create
PoolableConnectionFactory (I/O Exception: Got minus one from a read call)
at
org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:859)
at
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:544)
at
org.apache.activemq.store.jdbc.TransactionContext.getConnection(TransactionContext.java:54)
... 44 more
Caused by: java.sql.SQLException: I/O Exception: Got minus one from a read
call
at
oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:74)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:110)
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:171)
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227)
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:494)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:411)
at
oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:490)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:202)
stop
at
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:474)
at
org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37)
at
org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290)
at
org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:881)
at
org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:855)
... 46 more
java.lang.NullPointerException
at activemqtest.ActivemqJunit.testFoobar(ActivemqJunit.java:102)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
start
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
We faced this problem in our unit tests, so I broke down our action to the
following code snippet:
for(int x=0;x<numberOfRuns;x++){
try {
URI activemqConfigurationUri = new URI("xbean:activemq.xml");
brokerService =
BrokerFactory.createBroker(activemqConfigurationUri);
System.out.println("Starting broker");
brokerService.start();
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("stopping broker");
brokerService.stop();
brokerService.waitUntilStopped();
brokerService=null;
}
catch (JMSException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
So we are simply starting and stopping the broker. In our Oracle DB the
number of INACTIVE connections rises until it explodes. But ONLY when we
call this snippet as part of a unit test. When we run this as a simple java
app, there is no problem, inactive connections are cleaned up properly.
We also wrote a simple app that gets connections from dbcp and closes them
again. There we have NO problem in a utest environment/simple java app.
I looked into the activemq TransactionContext class and I saw nothing wrong.
When debugging, connection.close and connection=null is executed. During a
debug session, we also don't get the exception (due to pauses??). When I
remove the breakpoints, inactive sessions explode again...
activemqnewbie wrote:
>
> When I am executing a bulk load of data to Oracle, I intermittently
> receive the following. Activemq publlishes 300 messages before
> failing. If I run it again it may fail after publishing200 messages . Has
> anyone seen this before? It appears that it is failing to create a
> connection pool.
> Seems prvious connections are not being closed.Is this a bug in activemq
> or is it that am missing to specify some parametrs in my activemq.xml.
> Below is my activemq.xml snippet.
> Appreciate help on my query.
> App uses: ActiveMq5,Oracle 10g
>
> <beans
> xmlns="http://www.springframework.org/schema/beans"
> xmlns:amq="http://activemq.org/config/1.0"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
> http://activemq.org/config/1.0
> http://activemq.apache.org/schema/activemq-core.xsd
> http://activemq.apache.org/camel/schema/spring
> http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
>
> <!-- Allows us to use system properties as variables in this
> configuration file -->
> <bean
> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
>
> <broker xmlns="http://activemq.org/config/1.0" brokerName="localhost"
> dataDirectory="${activemq.base}/data">
>
> <!-- Destination specific policies using destination names or
> wildcards -->
> <destinationPolicy>
> <policyMap>
> <policyEntries>
>
> <policyEntry topic="SINFO.>" producerFlowControl="false"
> memoryLimit="1mb">
> <dispatchPolicy>
> <strictOrderDispatchPolicy/>
> </dispatchPolicy>
> <subscriptionRecoveryPolicy>
> <lastImageSubscriptionRecoveryPolicy/>
> </subscriptionRecoveryPolicy>
> </policyEntry>
>
> </policyEntries>
> </policyMap>
> </destinationPolicy>
>
>
> <!-- The transport connectors ActiveMQ will listen to -->
> <transportConnectors>
> <transportConnector name="openwire" uri="tcp://localhost:61616"
> discoveryUri="multicast://default"/>
> <transportConnector name="ssl" uri="ssl://localhost:61617"/>
> <transportConnector name="stomp" uri="stomp://localhost:61613"/>
> <transportConnector name="xmpp" uri="xmpp://localhost:61222"/>
> </transportConnectors>
>
> <!-- The store and forward broker networks ActiveMQ will listen to -->
> <networkConnectors>
> <!-- by default just auto discover the other brokers -->
> <networkConnector name="default-nc" uri="multicast://default"/>
> </networkConnectors>
> <persistenceAdapter>
> <jdbcPersistenceAdapter dataSource="#oracle-ds"/>
> </persistenceAdapter>
>
>
> </broker>
>
> <!--
> ** Lets deploy some Enterprise Integration Patterns inside the
> ActiveMQ Message Broker
> ** For more details see
> **
> ** http://activemq.apache.org/enterprise-integration-patterns.html
> -->
> <camelContext id="camel"
> xmlns="http://activemq.apache.org/camel/schema/spring">
>
> <!-- You can use a <package> element for each root package to search
> for Java routes -->
> <package>org.foo.bar</package>
>
> <!-- You can use Spring XML syntax to define the routes here using the
> <route> element -->
> <route>
> <from uri="activemq:example.A"/>
> <to uri="activemq:example.B"/>
> </route>
> </camelContext>
>
>
>
> <!-- lets create a command agent to respond to message based admin
> commands on the ActiveMQ.Agent topic -->
> <commandAgent xmlns="http://activemq.org/config/1.0"/>
>
>
> <!-- An embedded servlet engine for serving up the Admin console -->
> <jetty xmlns="http://mortbay.com/schemas/jetty/1.0">
> <connectors>
> <nioConnector port="8161" />
> </connectors>
>
> <handlers>
> <webAppContext contextPath="/admin"
> resourceBase="${activemq.base}/webapps/admin" logUrlOnStart="true" />
> <webAppContext contextPath="/demo"
> resourceBase="${activemq.base}/webapps/demo" logUrlOnStart="true" />
> </handlers>
> </jetty>
>
>
>
>
>
> <!-- Oracle DataSource Sample Setup -->
> <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource"
> destroy-method="close">
> <property name="driverClassName"
> value="oracle.jdbc.driver.OracleDriver"/>
> <property name="url" value="jdbc:oracle:thin:@xx.xx.xx.xx"/>
> <property name="username" value="xxx"/>
> <property name="password" value="xxx"/>
> <property name="poolPreparedStatements" value="true"/>
> </bean>
> Thanks
>
--
View this message in context: http://www.nabble.com/Got-minus-one-from-a-read-call-tp14734900s2354p14948097.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.