]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java
Make CMS startup more asynchronous
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / KernelUtils.java
index 5d49797911125d0c755655f4bb4919a49745ed04..63cb356d33fca383b2c90f782036eb896cc62fe7 100644 (file)
@@ -5,9 +5,11 @@ import java.io.IOException;
 import java.io.PrintStream;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URL;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.security.PrivilegedAction;
+import java.security.URIParameter;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.Properties;
@@ -27,12 +29,24 @@ import org.argeo.node.NodeConstants;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
+import org.osgi.util.tracker.ServiceTracker;
 
 /** Package utilities */
 class KernelUtils implements KernelConstants {
        final static String OSGI_INSTANCE_AREA = "osgi.instance.area";
        final static String OSGI_CONFIGURATION_AREA = "osgi.configuration.area";
 
+       static void setJaasConfiguration(URL jaasConfigurationUrl) {
+               try {
+                       URIParameter uriParameter = new URIParameter(jaasConfigurationUrl.toURI());
+                       javax.security.auth.login.Configuration jaasConfiguration = javax.security.auth.login.Configuration
+                                       .getInstance("JavaLoginConfig", uriParameter);
+                       javax.security.auth.login.Configuration.setConfiguration(jaasConfiguration);
+               } catch (Exception e) {
+                       throw new CmsException("Cannot set configuration " + jaasConfigurationUrl, e);
+               }
+       }
+
        static Dictionary<String, ?> asDictionary(Properties props) {
                Hashtable<String, Object> hashtable = new Hashtable<String, Object>();
                for (Object key : props.keySet()) {
@@ -109,17 +123,17 @@ class KernelUtils implements KernelConstants {
        }
 
        // Security
-//     static Subject anonymousLogin() {
-//             Subject subject = new Subject();
-//             LoginContext lc;
-//             try {
-//                     lc = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject);
-//                     lc.login();
-//                     return subject;
-//             } catch (LoginException e) {
-//                     throw new CmsException("Cannot login as anonymous", e);
-//             }
-//     }
+       // static Subject anonymousLogin() {
+       // Subject subject = new Subject();
+       // LoginContext lc;
+       // try {
+       // lc = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject);
+       // lc.login();
+       // return subject;
+       // } catch (LoginException e) {
+       // throw new CmsException("Cannot login as anonymous", e);
+       // }
+       // }
 
        static void logFrameworkProperties(Log log) {
                BundleContext bc = getBundleContext();
@@ -175,9 +189,20 @@ class KernelUtils implements KernelConstants {
                });
        }
 
+       static void asyncOpen(ServiceTracker<?, ?> st) {
+               Runnable run = new Runnable() {
+
+                       @Override
+                       public void run() {
+                               st.open();
+                       }
+               };
+               new Thread(run, "Open service tracker " + st).start();
+       }
+
        /**
-        * @return the {@link BundleContext} of the {@link Bundle} which provided
-        *         this class, never null.
+        * @return the {@link BundleContext} of the {@link Bundle} which provided this
+        *         class, never null.
         * @throws CmsException
         *             if the related bundle is not active
         */