Make CMS kernel more robust.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / CmsState.java
index a5cc0b74630bafdf8d76bb937a1d3c86e0790934..eebf71ccbb4c3df4f0abbf2cf724b6681eb62874 100644 (file)
@@ -115,19 +115,22 @@ public class CmsState implements NodeState {
                if (existingTm != null) {
                        if (log.isDebugEnabled())
                                log.debug("Using provided transaction manager " + existingTm);
+                       return;
                }
-               bitronix.tm.Configuration tmConf = TransactionManagerServices.getConfiguration();
-               tmConf.setServerId(UUID.randomUUID().toString());
-
-               Bundle bitronixBundle = FrameworkUtil.getBundle(bitronix.tm.Configuration.class);
-               File tmBaseDir = bitronixBundle.getDataFile(KernelConstants.DIR_TRANSACTIONS);
-               File tmDir1 = new File(tmBaseDir, "btm1");
-               tmDir1.mkdirs();
-               tmConf.setLogPart1Filename(new File(tmDir1, tmDir1.getName() + ".tlog").getAbsolutePath());
-               File tmDir2 = new File(tmBaseDir, "btm2");
-               tmDir2.mkdirs();
-               tmConf.setLogPart2Filename(new File(tmDir2, tmDir2.getName() + ".tlog").getAbsolutePath());
 
+               if (!TransactionManagerServices.isTransactionManagerRunning()) {
+                       bitronix.tm.Configuration tmConf = TransactionManagerServices.getConfiguration();
+                       tmConf.setServerId(UUID.randomUUID().toString());
+
+                       Bundle bitronixBundle = FrameworkUtil.getBundle(bitronix.tm.Configuration.class);
+                       File tmBaseDir = bitronixBundle.getDataFile(KernelConstants.DIR_TRANSACTIONS);
+                       File tmDir1 = new File(tmBaseDir, "btm1");
+                       tmDir1.mkdirs();
+                       tmConf.setLogPart1Filename(new File(tmDir1, tmDir1.getName() + ".tlog").getAbsolutePath());
+                       File tmDir2 = new File(tmBaseDir, "btm2");
+                       tmDir2.mkdirs();
+                       tmConf.setLogPart2Filename(new File(tmDir2, tmDir2.getName() + ".tlog").getAbsolutePath());
+               }
                BitronixTransactionManager transactionManager = getTransactionManager();
                shutdownHooks.add(() -> transactionManager.shutdown());
                BitronixTransactionSynchronizationRegistry transactionSynchronizationRegistry = getTransactionSynchronizationRegistry();
@@ -140,11 +143,11 @@ public class CmsState implements NodeState {
        }
 
        void shutdown() {
-               applyShutdownHooks();
-
                if (kernelThread != null)
                        kernelThread.destroyAndJoin();
 
+               applyShutdownHooks();
+
                if (log.isDebugEnabled())
                        log.debug("## CMS STOPPED");
        }