You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2012/12/16 10:38:50 UTC

svn commit: r1422491 - /sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/StartupManager.java

Author: cziegeler
Date: Sun Dec 16 09:38:49 2012
New Revision: 1422491

URL: http://svn.apache.org/viewvc?rev=1422491&view=rev
Log:
SLING-2700 :  Minor startup handling improvements 

Modified:
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/StartupManager.java

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/StartupManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/StartupManager.java?rev=1422491&r1=1422490&r2=1422491&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/StartupManager.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/StartupManager.java Sun Dec 16 09:38:49 2012
@@ -47,7 +47,7 @@ public class StartupManager {
     private static final String OLD_DATA_FILE = "bundle0" + File.separatorChar + "bootstrapinstaller.ser";
 
     /** Name of the mode override property. */
-    private static final String OVERRIDE_RPOP = "org.apache.sling.launchpad.startupmode";
+    private static final String OVERRIDE_PROP = "org.apache.sling.launchpad.startupmode";
 
     /**
      * The {@link Logger} use for logging messages during installation and
@@ -71,15 +71,15 @@ public class StartupManager {
         this.startupDir = DirectoryUtil.getStartupDir(properties);
         this.confDir = DirectoryUtil.getConfigDir(properties);
         // check for override property
-        final String overrideMode = System.getProperty(OVERRIDE_RPOP);
+        final String overrideMode = System.getProperty(OVERRIDE_PROP, properties.get(OVERRIDE_PROP));
         if ( overrideMode != null ) {
             this.mode = StartupMode.valueOf(overrideMode.toUpperCase());
+            this.logger.log(Logger.LOG_INFO, "Override property set. Starting in mode " + this.mode);
         } else {
             this.mode = detectMode(properties.get(Constants.FRAMEWORK_STORAGE));
+            this.logger.log(Logger.LOG_INFO, "Detected startup mode. Starting in mode " + this.mode);
         }
 
-        this.logger.log(Logger.LOG_INFO, "Starting in mode " + this.mode);
-
         this.targetStartLevel = Long.valueOf(properties.get(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
 
         this.incrementalStartupEnabled = Boolean.valueOf(properties.get(SharedConstants.SLING_INSTALL_INCREMENTAL_START));
@@ -133,7 +133,7 @@ public class StartupManager {
 
                     final long storedStamp = Long.parseLong(value);
 
-                    logger.log(Logger.LOG_INFO, String.format("Stored timestamp: %s", storedStamp));
+                    logger.log(Logger.LOG_INFO, String.format("Stored startup timestamp: %s", storedStamp));
 
                     return (storedStamp >= selfStamp ? StartupMode.RESTART : StartupMode.UPDATE);
                 }
@@ -170,23 +170,26 @@ public class StartupManager {
     }
 
     /**
-     * Get the timestamp of a class through its url classloader (if possible)
+     * Get the time stamp of a class through its url classloader (if possible)
      */
-    private long getTimeStampOfClass(final Class<?> clazz) {
-        long selfStamp = -1;
+    private long getTimeStampOfClass(final Class<?> clazz, final long selfStamp) {
+        long timeStamp = selfStamp;
         final ClassLoader loader = clazz.getClassLoader();
         if (loader instanceof URLClassLoader) {
             final URLClassLoader urlLoader = (URLClassLoader) loader;
             final URL[] urls = urlLoader.getURLs();
             if (urls.length > 0) {
                 final URL url = urls[0];
-                logger.log(Logger.LOG_INFO, String.format("Using timestamp from %s.", url));
                 try {
-                    selfStamp = urls[0].openConnection().getLastModified();
+                    final long stamp = urls[0].openConnection().getLastModified();
+                    if ( stamp > selfStamp ) {
+                        logger.log(Logger.LOG_INFO, String.format("Newer timestamp for %s from %s : %s", clazz.getName(), url, selfStamp));
+                        timeStamp = selfStamp;
+                    }
                 } catch (final IOException ignore) {}
             }
         }
-        return selfStamp;
+        return timeStamp;
     }
 
     /**
@@ -202,17 +205,14 @@ public class StartupManager {
      *         if the class loader of this class is not an URLClassLoader or the
      *         class loader has no URL entries. Both situations are not really
      *         expected.
-     * @throws IOException If an error occurrs reading accessing the last
-     *             modification time stampe.
+     * @throws IOException If an error occurs reading accessing the last
+     *             modification time stamp.
      */
     private long getSelfTimestamp() {
 
-        // the timestamp of the launcher jar and the bootstrap jar
-        long selfStamp = this.getTimeStampOfClass(this.getClass());
-        long bootStamp = this.getTimeStampOfClass(LaunchpadContentProvider.class);
-        if ( bootStamp > selfStamp ) {
-            selfStamp = bootStamp;
-        }
+        // the time stamp of the launcher jar and the bootstrap jar
+        long selfStamp = this.getTimeStampOfClass(this.getClass(), -1);
+        selfStamp = this.getTimeStampOfClass(LaunchpadContentProvider.class, selfStamp);
 
         // check whether any bundle is younger than the launcher jar
         final File[] directories = this.startupDir.listFiles(DirectoryUtil.DIRECTORY_FILTER);
@@ -224,8 +224,8 @@ public class StartupManager {
                 if ( jarFiles != null ) {
                     for (final File bundleJar : jarFiles) {
                         if (bundleJar.lastModified() > selfStamp) {
-                            logger.log(Logger.LOG_INFO, String.format("Using timestamp from %s.", bundleJar));
                             selfStamp = bundleJar.lastModified();
+                            logger.log(Logger.LOG_INFO, String.format("Newer timestamp from %s : %s", bundleJar, selfStamp));
                         }
                     }
                 }
@@ -248,7 +248,7 @@ public class StartupManager {
             this.confDir.mkdirs();
             final FileWriter fos = new FileWriter(dataFile);
             try {
-                fos.write(String.valueOf(this.getSelfTimestamp()));
+                fos.write(String.valueOf(System.currentTimeMillis()));
             } finally {
                 try { fos.close(); } catch (final IOException ignore) {}
             }