[ 
https://issues.apache.org/jira/browse/AMQ-1063?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13481287#comment-13481287
 ] 

Petr Nídl commented on AMQ-1063:
--------------------------------

I've analyzed the problem for 5.6.0 release. It happens when 
org.apache.activemq.store.journal.JournalPersistenceAdapter starts new 
transaction during checkpoint and fails to retrieve the database connection for 
this task. The main cause is in 
org.apache.activemq.store.jdbc.TransactionContext.begin() method (lines 
153-159):

153 public void begin() throws IOException {
154   if (inTx) {
155     throw new IOException("Already started.");
156   }
157   inTx = true;
158   connection = getConnection();
159 }

Lines 157 and 158 should be switched because currently the TransactionContext 
instance is marked as "inTx" even though the getConnection() method throws an 
exception. From that moment the TransactionContext instance is marked as "inTx" 
forever and will never start new transaction again.
                
> Journaled JDBC checkpoint fails with java.io.IOException: Already started.
> --------------------------------------------------------------------------
>
>                 Key: AMQ-1063
>                 URL: https://issues.apache.org/jira/browse/AMQ-1063
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.0.0
>         Environment: Windows XP Professional, JVM 1.5.0_09, MySQL 5.0.27
>            Reporter: [email protected]
>             Fix For: NEEDS_REVIEWED
>
>         Attachments: activemq.log.zip
>
>
> I am running trunk using JDBC against MySQL 5.0.27.  I am seeing the above 
> mentioned IOException.  Do not have specific instructions on how to reproduce 
> at the current time, but I was using durable subscriptions with the store 
> durable cursor if that helps.  (I'll post if I find out more information.)
>       <persistenceAdapter>
>    
>       <journaledJDBC journalLogFiles="5" dataDirectory="../activemq-data" 
> dataSource="#mysql-ds"/>
>     </persistenceAdapter>
>   <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" 
> destroy-method="close">
>     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
>     <property name="url" 
> value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
>     <property name="username" value="*** OMITTED ***"/>
>     <property name="password" value="*** OMITTED *** "/>
>     <property name="poolPreparedStatements" value="true"/>
>   </bean>  
> Log trace:
> 2006-11-19 19:19:48,078 [/127.0.0.1:4898] DEBUG JournalPersistenceAdapter     
>  - Waking for checkpoint to complete.
> 2006-11-19 19:19:48,078 [eckpoint Worker] DEBUG JournalPersistenceAdapter     
>  - Checkpoint started.
> 2006-11-19 19:19:48,078 [eckpoint Worker] ERROR JournalPersistenceAdapter     
>  - Failed to checkpoint a message store: 
> java.util.concurrent.ExecutionException: java.io.IOException: Already started.
> java.util.concurrent.ExecutionException: java.io.IOException: Already started.
>       at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:205)
>       at java.util.concurrent.FutureTask.get(FutureTask.java:80)
>       at 
> org.apache.activemq.store.journal.JournalPersistenceAdapter.doCheckpoint(JournalPersistenceAdapter.java:386)
>       at 
> org.apache.activemq.store.journal.JournalPersistenceAdapter$2.iterate(JournalPersistenceAdapter.java:129)
>       at 
> org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:88)
>       at 
> org.apache.activemq.thread.DedicatedTaskRunner.access$0(DedicatedTaskRunner.java:76)
>       at 
> org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:39)
> Caused by: java.io.IOException: Already started.
>       at 
> org.apache.activemq.store.jdbc.TransactionContext.begin(TransactionContext.java:145)
>       at 
> org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.beginTransaction(JDBCPersistenceAdapter.java:358)
>       at 
> org.apache.activemq.store.journal.JournalPersistenceAdapter.beginTransaction(JournalPersistenceAdapter.java:189)
>       at 
> org.apache.activemq.util.TransactionTemplate.run(TransactionTemplate.java:41)
>       at 
> org.apache.activemq.store.journal.JournalMessageStore.checkpoint(JournalMessageStore.java:247)
>       at 
> org.apache.activemq.store.journal.JournalTopicMessageStore.checkpoint(JournalTopicMessageStore.java:162)
>       at 
> org.apache.activemq.store.journal.JournalPersistenceAdapter$5.call(JournalPersistenceAdapter.java:373)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:123)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>       at java.lang.Thread.run(Thread.java:595)
> 2006-11-19 19:19:48,109 [eckpoint Worker] DEBUG JournalPersistenceAdapter     
>  - Checkpoint done.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to