X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FCmsState.java;h=789312625c54219f66d24af46281dfeb1740e36d;hb=cff23f8dd98a91cf74a098e11f6b941e74df2917;hp=0b5bd0d483440a13bed946e06d944a850af1e098;hpb=5b5c2b97eee9edd037e198acadf8b416a973863f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsState.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsState.java index 0b5bd0d48..789312625 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsState.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsState.java @@ -5,7 +5,6 @@ import static bitronix.tm.TransactionManagerServices.getTransactionSynchronizati import static java.util.Locale.ENGLISH; import java.io.File; -import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.file.spi.FileSystemProvider; @@ -21,9 +20,11 @@ import javax.transaction.UserTransaction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.cms.CmsException; import org.argeo.cms.i18n.LocaleUtils; import org.argeo.node.NodeConstants; import org.argeo.node.NodeState; +import org.argeo.transaction.simple.SimpleTransactionManager; import org.argeo.util.LangUtils; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; @@ -37,7 +38,7 @@ import bitronix.tm.BitronixTransactionSynchronizationRegistry; import bitronix.tm.TransactionManagerServices; public class CmsState implements NodeState { - private final Log log = LogFactory.getLog(CmsState.class); + private final static Log log = LogFactory.getLog(CmsState.class); private final BundleContext bc = FrameworkUtil.getBundle(CmsState.class).getBundleContext(); // REFERENCES @@ -87,7 +88,29 @@ public class CmsState implements NodeState { private void initServices() { // JTA - initTransactionManager(); + String tmType = KernelUtils.getFrameworkProp(NodeConstants.TRANSACTION_MANAGER, + NodeConstants.TRANSACTION_MANAGER_SIMPLE); + if (NodeConstants.TRANSACTION_MANAGER_SIMPLE.equals(tmType)) { + initSimpleTransactionManager(); + } else if (NodeConstants.TRANSACTION_MANAGER_BITRONIX.equals(tmType)) { + initBitronixTransactionManager(); + } else { + throw new CmsException("Usupported transaction manager type " + tmType); + } + + // POI +// POIXMLTypeLoader.setClassLoader(CTConnection.class.getClassLoader()); + + // Tika +// OpenDocumentParser odfParser = new OpenDocumentParser(); +// bc.registerService(Parser.class, odfParser, new Hashtable()); +// PDFParser pdfParser = new PDFParser(); +// bc.registerService(Parser.class, pdfParser, new Hashtable()); +// OOXMLParser ooxmlParser = new OOXMLParser(); +// bc.registerService(Parser.class, ooxmlParser, new Hashtable()); +// TesseractOCRParser ocrParser = new TesseractOCRParser(); +// ocrParser.setLanguage("ara"); +// bc.registerService(Parser.class, ocrParser, new Hashtable()); // JCR RepositoryServiceFactory repositoryServiceFactory = new RepositoryServiceFactory(); @@ -106,11 +129,28 @@ public class CmsState implements NodeState { // File System CmsFsProvider cmsFsProvider = new CmsFsProvider(); +// ServiceLoader fspSl = ServiceLoader.load(FileSystemProvider.class); +// for (FileSystemProvider fsp : fspSl) { +// log.debug("FileSystemProvider " + fsp); +// if (fsp instanceof CmsFsProvider) { +// cmsFsProvider = (CmsFsProvider) fsp; +// } +// } +// for (FileSystemProvider fsp : FileSystemProvider.installedProviders()) { +// log.debug("Installed FileSystemProvider " + fsp); +// } bc.registerService(FileSystemProvider.class, cmsFsProvider, LangUtils.dico(Constants.SERVICE_PID, NodeConstants.NODE_FS_PROVIDER_PID)); } - private void initTransactionManager() { + private void initSimpleTransactionManager() { + SimpleTransactionManager transactionManager = new SimpleTransactionManager(); + bc.registerService(TransactionManager.class, transactionManager, null); + bc.registerService(UserTransaction.class, transactionManager, null); + // TODO TransactionSynchronizationRegistry + } + + private void initBitronixTransactionManager() { // TODO manage it in a managed service, as startup could be long ServiceReference existingTm = bc.getServiceReference(TransactionManager.class); if (existingTm != null) { @@ -149,7 +189,9 @@ public class CmsState implements NodeState { if (kernelThread != null) kernelThread.destroyAndJoin(); - applyStopHooks(); + // In a different state in order to avois interruptions + new Thread(() -> applyStopHooks(), "Apply Argeo Stop Hooks").start(); + // applyStopHooks(); long duration = ((System.currentTimeMillis() - availableSince) / 1000) / 60; log.info("## ARGEO CMS STOPPED after " + (duration / 60) + "h " + (duration % 60) + "min uptime ##");