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.