You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2011/11/10 13:40:19 UTC

svn commit: r1200300 [2/2] - in /karaf/trunk/main/src: main/java/org/apache/karaf/main/ main/java/org/apache/karaf/main/util/ test/java/org/apache/karaf/main/ test/java/org/apache/karaf/main/lock/ test/resources/test-karaf-home/etc/

Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/Stop.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/Stop.java?rev=1200300&r1=1200299&r2=1200300&view=diff
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/Stop.java (original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/Stop.java Thu Nov 10 12:40:18 2011
@@ -18,6 +18,16 @@
  */
 package org.apache.karaf.main;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.net.Socket;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import org.apache.karaf.main.util.Utils;
 
 /**
  * Main class used to stop the root Karaf instance
@@ -25,7 +35,46 @@ package org.apache.karaf.main;
 public class Stop {
 
     public static void main(String[] args) throws Exception {
-        Main.shutdown();
-    }
+        File karafHome = Utils.getKarafHome(Stop.class, Main.PROP_KARAF_HOME, Main.ENV_KARAF_HOME);
+        File karafBase = Utils.getKarafDirectory(Main.PROP_KARAF_BASE, Main.ENV_KARAF_BASE, karafHome, false, true);
+        File karafData = Utils.getKarafDirectory(Main.PROP_KARAF_DATA, Main.ENV_KARAF_DATA, new File(karafBase.getPath(), "data"), true, true);
+
+        System.setProperty(Main.PROP_KARAF_HOME, karafHome.getPath());
+        System.setProperty(Main.PROP_KARAF_BASE, karafBase.getPath());
+        System.setProperty(Main.PROP_KARAF_DATA, karafData.getPath());
+
+        // Load system properties.
+        Main.loadSystemProperties(karafBase);
 
+        File file = new File(new File(karafBase, "etc"), Main.CONFIG_PROPERTIES_FILE_NAME);
+        URL configPropURL = file.toURI().toURL();
+        Properties props = Main.loadPropertiesFile(configPropURL, false);
+        Main.copySystemProperties(props);
+
+        // Perform variable substitution for system properties.
+        for (Enumeration e = props.propertyNames(); e.hasMoreElements();) {
+            String name = (String) e.nextElement();
+            props.setProperty(name,
+                    Main.substVars(props.getProperty(name), name, null, props));
+        }
+
+        int port = Integer.parseInt(props.getProperty(Main.KARAF_SHUTDOWN_PORT, "0"));
+        String host = props.getProperty(Main.KARAF_SHUTDOWN_HOST, "localhost");
+        String portFile = props.getProperty(Main.KARAF_SHUTDOWN_PORT_FILE);
+        String shutdown = props.getProperty(Main.KARAF_SHUTDOWN_COMMAND, Main.DEFAULT_SHUTDOWN_COMMAND);
+        if (port == 0 && portFile != null) {
+            BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(portFile)));
+            String portStr = r.readLine();
+            port = Integer.parseInt(portStr);
+            r.close();
+        }
+        if (port > 0) {
+            Socket s = new Socket(host, port);
+            s.getOutputStream().write(shutdown.getBytes());
+            s.close();
+        } else {
+            System.err.println("Unable to find port...");
+        }
+
+    }
 }

Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/util/BootstrapLogManager.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/util/BootstrapLogManager.java?rev=1200300&r1=1200299&r2=1200300&view=diff
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/util/BootstrapLogManager.java (original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/util/BootstrapLogManager.java Thu Nov 10 12:40:18 2011
@@ -28,6 +28,7 @@ import java.util.logging.Handler;
 import java.util.logging.LogRecord;
 import java.util.logging.StreamHandler;
 
+import org.apache.karaf.main.Main;
 
 /**
  * Convenience class for configuring java.util.logging to append to
@@ -36,24 +37,41 @@ import java.util.logging.StreamHandler;
  * 
  */
 public class BootstrapLogManager {
-    private static final String DEFAULT_LOG_FILE = "${karaf.data}/log/karaf.log";
-	private static final String PROP_LOG4J_APPENDER_OUT_FILE = "log4j.appender.out.file";
-	private static Handler handler;
+    private static Handler handler;
     private static final String KARAF_BOOTSTRAP_LOG = "karaf.bootstrap.log";
 
     private static Properties configProps;
 
     public static Handler getDefaultHandler () {
+        String filename;
         File log;
-        String filename = configProps.getProperty(KARAF_BOOTSTRAP_LOG);
-        if (filename == null) {
-            Properties props = readLoggingConfig();
-            if (props.getProperty(PROP_LOG4J_APPENDER_OUT_FILE) == null) {
-                props.setProperty(PROP_LOG4J_APPENDER_OUT_FILE, DEFAULT_LOG_FILE);
+        Properties props = new Properties();
+        filename = configProps.getProperty(KARAF_BOOTSTRAP_LOG);
+
+        if (filename != null) {
+            log = new File(filename);
+        } else {
+            // Make a best effort to log to the default file appender configured for log4j
+            FileInputStream fis = null;
+            try {
+                fis = new FileInputStream(System.getProperty("karaf.base") + "/etc/org.ops4j.pax.logging.cfg");
+                props.load(fis);
+            } catch (IOException e) {
+                props.setProperty("log4j.appender.out.file", "${karaf.data}/log/karaf.log");
+            } finally {
+                if (fis != null) { 
+                    try {
+                        fis.close(); 
+                    } catch (IOException ioe) {
+                        ioe.printStackTrace();
+                    }
+                }
             }
-            filename = PropertiesHelper.substVars(props.getProperty(PROP_LOG4J_APPENDER_OUT_FILE),PROP_LOG4J_APPENDER_OUT_FILE, null, null);
+            filename = Main.substVars(props.getProperty("log4j.appender.out.file"), "log4j.appender.out.file", null, null);
+            log = new File(filename);
         }
-        log = new File(filename);
+
+
         try {
             handler = new BootstrapLogManager.SimpleFileHandler(log);
         } catch (IOException e) {
@@ -63,27 +81,6 @@ public class BootstrapLogManager {
         return handler;
     }
 
-	private static Properties readLoggingConfig() {
-		// Make a best effort to log to the default file appender configured for log4j
-		Properties props = new Properties();
-		FileInputStream fis = null;
-		try {
-		    fis = new FileInputStream(System.getProperty("karaf.base") + "/etc/org.ops4j.pax.logging.cfg");
-		    props.load(fis);
-		} catch (IOException e) {
-			e.printStackTrace();
-		} finally {
-		    if (fis != null) { 
-		        try {
-		            fis.close(); 
-		        } catch (IOException ioe) {
-		            ioe.printStackTrace();
-		        }
-		    }
-		}
-		return props;
-	}
-
     public static void setProperties(Properties configProps) {
         BootstrapLogManager.configProps = configProps;
     }
@@ -123,4 +120,4 @@ public class BootstrapLogManager {
     }
 
 
-}
+}
\ No newline at end of file

Modified: karaf/trunk/main/src/test/java/org/apache/karaf/main/MainStartTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/test/java/org/apache/karaf/main/MainStartTest.java?rev=1200300&r1=1200299&r2=1200300&view=diff
==============================================================================
--- karaf/trunk/main/src/test/java/org/apache/karaf/main/MainStartTest.java (original)
+++ karaf/trunk/main/src/test/java/org/apache/karaf/main/MainStartTest.java Thu Nov 10 12:40:18 2011
@@ -53,8 +53,7 @@ public class MainStartTest {
 		System.setProperty("karaf.maven.convert", "false");
 
 		Main main = new Main(args);
-		LifecycleManager lifecacleManager = main.launch();
-		Thread.sleep(1000);
+		main.launch();
 		Framework framework = main.getFramework();
 		Bundle[] bundles = framework.getBundleContext().getBundles();
 		Assert.assertEquals(3, bundles.length);
@@ -62,7 +61,8 @@ public class MainStartTest {
 		Assert.assertEquals(mvnUrl, bundles[2].getLocation());
 		Assert.assertEquals(Bundle.ACTIVE, bundles[1].getState());
 		Assert.assertEquals(Bundle.ACTIVE, bundles[2].getState());
-		lifecacleManager.destroyKaraf();
+
+        main.destroy();
 	}
 
     @Test
@@ -80,8 +80,7 @@ public class MainStartTest {
 
 
         Main main = new Main(args);
-        LifecycleManager lifecycleManager = main.launch();
-        Thread.sleep(1000);
+        main.launch();
         Framework framework = main.getFramework();
         String activatorName = TimeoutShutdownActivator.class.getName().replace('.', '/') + ".class";
         Bundle bundle = framework.getBundleContext().installBundle("foo",
@@ -92,8 +91,11 @@ public class MainStartTest {
         );
         bundle.start();
 
+        Thread.sleep(1000);
+
         long t0 = System.currentTimeMillis();
-        lifecycleManager.destroyKaraf();
+        Stop.main(null);
+        main.awaitShutdown();
         long t1 = System.currentTimeMillis();
 //        System.err.println("Shutdown duration: " + (t1 - t0) + " ms");
         Assert.assertTrue((t1 - t0) > TimeoutShutdownActivator.TIMEOUT / 2);

Modified: karaf/trunk/main/src/test/java/org/apache/karaf/main/TimeoutShutdownActivator.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/test/java/org/apache/karaf/main/TimeoutShutdownActivator.java?rev=1200300&r1=1200299&r2=1200300&view=diff
==============================================================================
--- karaf/trunk/main/src/test/java/org/apache/karaf/main/TimeoutShutdownActivator.java (original)
+++ karaf/trunk/main/src/test/java/org/apache/karaf/main/TimeoutShutdownActivator.java Thu Nov 10 12:40:18 2011
@@ -26,9 +26,12 @@ public class TimeoutShutdownActivator im
     public static int TIMEOUT = 10000;
 
     public void start(BundleContext context) throws Exception {
+        System.err.println("Starting timeout activator");
     }
 
     public void stop(BundleContext context) throws Exception {
+        System.err.println("Timeout activator asked to stopped");
         Thread.sleep(TIMEOUT);
+        System.err.println("Stopping timeout activator");
     }
 }

Modified: karaf/trunk/main/src/test/java/org/apache/karaf/main/lock/BaseJDBCLockIntegrationTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/test/java/org/apache/karaf/main/lock/BaseJDBCLockIntegrationTest.java?rev=1200300&r1=1200299&r2=1200300&view=diff
==============================================================================
--- karaf/trunk/main/src/test/java/org/apache/karaf/main/lock/BaseJDBCLockIntegrationTest.java (original)
+++ karaf/trunk/main/src/test/java/org/apache/karaf/main/lock/BaseJDBCLockIntegrationTest.java Thu Nov 10 12:40:18 2011
@@ -18,12 +18,6 @@
  */
 package org.apache.karaf.main.lock;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
@@ -32,8 +26,6 @@ import java.sql.Statement;
 import java.util.Properties;
 import java.util.logging.Logger;
 
-import org.apache.karaf.main.lock.DefaultJDBCLock;
-import org.apache.karaf.main.lock.Lock;
 import org.apache.karaf.main.util.BootstrapLogManager;
 import org.junit.After;
 import org.junit.Before;
@@ -41,6 +33,8 @@ import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
 
+import static org.junit.Assert.*;
+
 public abstract class BaseJDBCLockIntegrationTest {
     
     private final Logger LOG = Logger.getLogger(this.getClass().getName());
@@ -63,7 +57,7 @@ public abstract class BaseJDBCLockIntegr
     public static void setUpTestSuite() {
         Properties properties = new Properties();
         properties.put("karaf.bootstrap.log", "target/karaf.log");
-        BootstrapLogManager.setProperties(properties);        
+        BootstrapLogManager.setProperties(properties);
     }
     
     @Before

Modified: karaf/trunk/main/src/test/java/org/apache/karaf/main/lock/BaseJDBCLockTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/test/java/org/apache/karaf/main/lock/BaseJDBCLockTest.java?rev=1200300&r1=1200299&r2=1200300&view=diff
==============================================================================
--- karaf/trunk/main/src/test/java/org/apache/karaf/main/lock/BaseJDBCLockTest.java (original)
+++ karaf/trunk/main/src/test/java/org/apache/karaf/main/lock/BaseJDBCLockTest.java Thu Nov 10 12:40:18 2011
@@ -30,7 +30,6 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Properties;
 
-import org.apache.karaf.main.lock.DefaultJDBCLock;
 import org.apache.karaf.main.util.BootstrapLogManager;
 import org.easymock.EasyMock;
 import org.junit.Before;
@@ -64,7 +63,7 @@ public abstract class BaseJDBCLockTest {
     public static void setUpTestSuite() {
         Properties properties = new Properties();
         properties.put("karaf.bootstrap.log", "target/karaf.log");
-        BootstrapLogManager.setProperties(properties);        
+        BootstrapLogManager.setProperties(properties);
     }
     
     @Before

Modified: karaf/trunk/main/src/test/resources/test-karaf-home/etc/config.properties
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/test/resources/test-karaf-home/etc/config.properties?rev=1200300&r1=1200299&r2=1200300&view=diff
==============================================================================
--- karaf/trunk/main/src/test/resources/test-karaf-home/etc/config.properties (original)
+++ karaf/trunk/main/src/test/resources/test-karaf-home/etc/config.properties Thu Nov 10 12:40:18 2011
@@ -36,6 +36,8 @@ karaf.framework.felix=${karaf.default.re
 # To enable the use of the startup.properties file to control the start level:
 karaf.auto.start=
 
+karaf.shutdown.port.file=${karaf.base}/data/port
+
 org.osgi.framework.startlevel.beginning=100
 karaf.startlevel.bundle=60
 karaf.name=root