Author: chirino
Date: Thu Jun  8 10:02:30 2006
New Revision: 412802

URL: http://svn.apache.org/viewvc?rev=412802&view=rev
Log:
Implemented:
http://issues.apache.org/activemq/browse/AMQ-742


Modified:
    
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/DefaultPersistenceAdapterFactory.java

Modified: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/DefaultPersistenceAdapterFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/DefaultPersistenceAdapterFactory.java?rev=412802&r1=412801&r2=412802&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/DefaultPersistenceAdapterFactory.java
 (original)
+++ 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/DefaultPersistenceAdapterFactory.java
 Thu Jun  8 10:02:30 2006
@@ -22,6 +22,7 @@
 
 import org.apache.activeio.journal.Journal;
 import org.apache.activeio.journal.active.JournalImpl;
+import org.apache.activeio.journal.active.JournalLockedException;
 import org.apache.activemq.store.jdbc.DataSourceSupport;
 import org.apache.activemq.store.jdbc.JDBCAdapter;
 import org.apache.activemq.store.jdbc.JDBCPersistenceAdapter;
@@ -29,6 +30,8 @@
 import org.apache.activemq.store.journal.JournalPersistenceAdapter;
 import org.apache.activemq.store.journal.QuickJournalPersistenceAdapter;
 import org.apache.activemq.thread.TaskRunnerFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * Factory class that can create PersistenceAdapter objects.
@@ -37,6 +40,10 @@
  */
 public class DefaultPersistenceAdapterFactory extends DataSourceSupport 
implements PersistenceAdapterFactory {
     
+    private static final int JOURNAL_LOCKED_WAIT_DELAY = 10*1000;
+
+    private static final Log log = 
LogFactory.getLog(DefaultPersistenceAdapterFactory.class);
+    
     private int journalLogFileSize = 1024*1024*20;
     private int journalLogFiles = 2;
     private TaskRunnerFactory taskRunnerFactory;
@@ -44,6 +51,7 @@
     private boolean useJournal=true;
     private boolean useQuickJournal=false;
     private File journalArchiveDirectory;
+    private boolean failIfJournalIsLocked=false;
     private JDBCPersistenceAdapter jdbcPersistenceAdapter = new 
JDBCPersistenceAdapter();
     
     public PersistenceAdapter createPersistenceAdapter() throws IOException {
@@ -155,7 +163,22 @@
      */
     protected void createJournal() throws IOException {
         File journalDir = new File(getDataDirectory(), 
"journal").getCanonicalFile();
-        journal = new JournalImpl(journalDir, journalLogFiles, 
journalLogFileSize, getJournalArchiveDirectory());
+        if( failIfJournalIsLocked ) {
+            journal = new JournalImpl(journalDir, journalLogFiles, 
journalLogFileSize, getJournalArchiveDirectory());
+        } else {
+            while( true ) {
+                try {
+                    journal = new JournalImpl(journalDir, journalLogFiles, 
journalLogFileSize, getJournalArchiveDirectory());
+                    break;
+                } catch (JournalLockedException e) {
+                    log.info("Journal is locked... waiting 
"+(JOURNAL_LOCKED_WAIT_DELAY/1000)+" seconds for the journal to be unlocked.");
+                    try {
+                        Thread.sleep(JOURNAL_LOCKED_WAIT_DELAY);
+                    } catch (InterruptedException e1) {
+                    }
+                }
+            }
+        }
     }
 
 }


Reply via email to