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 2011/08/10 10:46:48 UTC
svn commit: r1156070 - in /sling/trunk: contrib/launchpad/testing/
launchpad/base/src/main/java/org/apache/sling/launchpad/app/
launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/
launchpad/base/src/main/java/org/apache/sling/launchpad/b...
Author: cziegeler
Date: Wed Aug 10 08:46:47 2011
New Revision: 1156070
URL: http://svn.apache.org/viewvc?rev=1156070&view=rev
Log:
SLING-2174 : Leverage Framework interface to better control framework startup
Modified:
sling/trunk/contrib/launchpad/testing/pom.xml
sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/app/ControlListener.java
sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java
sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java
sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java
sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/webapp/SlingServlet.java
sling/trunk/launchpad/base/src/test/java/org/apache/sling/launchpad/base/impl/BootstrapInstallerTest.java
sling/trunk/launchpad/builder/pom.xml
sling/trunk/launchpad/integration-tests/pom.xml
sling/trunk/launchpad/testing/pom.xml
Modified: sling/trunk/contrib/launchpad/testing/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/launchpad/testing/pom.xml?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/contrib/launchpad/testing/pom.xml (original)
+++ sling/trunk/contrib/launchpad/testing/pom.xml Wed Aug 10 08:46:47 2011
@@ -421,7 +421,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.launchpad.base</artifactId>
- <version>2.2.1-SNAPSHOT</version>
+ <version>2.3.1-SNAPSHOT</version>
<classifier>webapp</classifier>
<type>war</type>
<scope>runtime</scope>
Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/app/ControlListener.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/app/ControlListener.java?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/app/ControlListener.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/app/ControlListener.java Wed Aug 10 08:46:47 2011
@@ -105,7 +105,7 @@ class ControlListener implements Runnabl
if (socketAddress != null) {
Thread listener = new Thread(this);
listener.setDaemon(true);
- listener.setName("Sling Control Listener@" + socketAddress);
+ listener.setName("Apache Sling Control Listener@" + socketAddress);
listener.start();
} else {
Main.info("No socket address to listen to", null);
@@ -139,7 +139,7 @@ class ControlListener implements Runnabl
try {
server = new ServerSocket();
server.bind(socketAddress);
- Main.info("Sling Control Server started", null);
+ Main.info("Apache Sling Control Server started", null);
} catch (IOException ioe) {
Main.error("Failed to start Sling Control Server", ioe);
return;
@@ -157,7 +157,7 @@ class ControlListener implements Runnabl
slingMain.shutdown();
writeLine(s, RESPONSE_OK);
- Main.info("Sling shut down, exiting Java VM", null);
+ Main.info("Apache Sling shut down, exiting Java VM", null);
System.exit(0);
} else if (COMMAND_STATUS.equals(command)) {
@@ -231,7 +231,7 @@ class ControlListener implements Runnabl
+ result, null);
return 0; // LSB code for everything's fine
} catch (ConnectException ce) {
- Main.info("No Sling running at " + socketAddress, null);
+ Main.info("No Apache Sling running at " + socketAddress, null);
return 3; // LSB code for programm not running
} catch (IOException ioe) {
Main.error("Failed sending '" + command + "' to "
Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java Wed Aug 10 08:46:47 2011
@@ -34,7 +34,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.jar.JarInputStream;
+import java.util.jar.JarFile;
import java.util.jar.Manifest;
import org.apache.felix.framework.Logger;
@@ -42,12 +42,9 @@ import org.apache.sling.launchpad.api.La
import org.apache.sling.launchpad.base.impl.bootstrapcommands.BootstrapCommandFile;
import org.apache.sling.launchpad.base.shared.SharedConstants;
import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.Version;
import org.osgi.service.startlevel.StartLevel;
@@ -61,7 +58,7 @@ import org.osgi.service.startlevel.Start
* to 1 and started. Any bundle already installed is not installed again and
* will also not be started here.
*/
-class BootstrapInstaller implements BundleActivator, FrameworkListener {
+class BootstrapInstaller {
/**
* The Bundle location scheme (protocol) used for bundles installed by this
@@ -146,33 +143,15 @@ class BootstrapInstaller implements Bund
*/
private final LaunchpadContentProvider resourceProvider;
- private BundleContext bundleContext;
+ /** The bundle context. */
+ private final BundleContext bundleContext;
- /**
- * The OSGi start level into which the framework is taken by the
- * {@link #frameworkEvent(FrameworkEvent)} method when the framework has
- * reached the originally specified start level.
- * <p>
- * If this value is smaller than 1 the framework is restarted. This is
- * particularly the case if the {@link #start(BundleContext)} method causes
- * the update of an installed framework extension bundle.
- * <p>
- * This value is preset by the
- * {@link #BootstrapInstaller(Logger, LaunchpadContentProvider, Map)} constructor to
- * the value set in the <code>org.osgi.framework.startlevel.beginning</code>
- * property of the supplied map.
- */
- private int targetStartLevel;
-
- BootstrapInstaller(Logger logger, LaunchpadContentProvider resourceProvider,
- Map<String, String> props) {
+ BootstrapInstaller(final BundleContext bundleContext, Logger logger, LaunchpadContentProvider resourceProvider) {
this.logger = logger;
this.resourceProvider = resourceProvider;
- this.targetStartLevel = getStartLevel(props);
+ this.bundleContext = bundleContext;
}
- //---------- BundleActivator interface
-
/**
* https://issues.apache.org/jira/browse/SLING-922
* Handles the initial detection and installation of bundles into
@@ -190,36 +169,30 @@ class BootstrapInstaller implements Bund
* So you could place your bundles in that structure and get them installed
* at the requested start level (0 being "default bundle start level").
*/
- public void start(final BundleContext context) throws Exception {
+ boolean install() throws IOException {
- // prepare for further startup after initial startup
- // see the frameworkEvent method for details
- this.bundleContext = context;
- this.bundleContext.addFrameworkListener(this);
-
- // get the startup location in sling home
- String slingHome = context.getProperty(SharedConstants.SLING_HOME);
+ String slingHome = bundleContext.getProperty(SharedConstants.SLING_HOME);
File slingStartupDir = getSlingStartupDir(slingHome);
// execute bootstrap commands, if needed
final BootstrapCommandFile cmd = new BootstrapCommandFile(logger, new File(slingHome, BOOTSTRAP_CMD_FILENAME));
- boolean requireRestart = cmd.execute(context);
+ boolean requireRestart = cmd.execute(bundleContext);
boolean shouldInstall = false;
// see if the loading of bundles from the package is forced
- String fpblString = context.getProperty(SharedConstants.FORCE_PACKAGE_BUNDLE_LOADING);
+ String fpblString = bundleContext.getProperty(SharedConstants.FORCE_PACKAGE_BUNDLE_LOADING);
if (Boolean.valueOf(fpblString)) {
shouldInstall = true;
} else {
- shouldInstall = !isAlreadyInstalled(context, slingStartupDir);
+ shouldInstall = !isAlreadyInstalled(bundleContext, slingStartupDir);
}
if (shouldInstall) {
// only run the war/jar copies when this war/jar is new/changed
// see if the loading of bundles from the package is disabled
- String dpblString = context.getProperty(SharedConstants.DISABLE_PACKAGE_BUNDLE_LOADING);
+ String dpblString = bundleContext.getProperty(SharedConstants.DISABLE_PACKAGE_BUNDLE_LOADING);
Boolean disablePackageBundleLoading = Boolean.valueOf(dpblString);
if (disablePackageBundleLoading) {
@@ -253,7 +226,7 @@ class BootstrapInstaller implements Bund
}
// get the set of all existing (installed) bundles by symbolic name
- Bundle[] bundles = context.getBundles();
+ Bundle[] bundles = bundleContext.getBundles();
Map<String, Bundle> bySymbolicName = new HashMap<String, Bundle>();
for (int i = 0; i < bundles.length; i++) {
bySymbolicName.put(bundles[i].getSymbolicName(), bundles[i]);
@@ -263,13 +236,13 @@ class BootstrapInstaller implements Bund
List<Bundle> installed = new LinkedList<Bundle>();
// get all bundles from the startup location and install them
- requireRestart |= installBundles(slingStartupDir, context, bySymbolicName, installed);
+ requireRestart |= installBundles(slingStartupDir, bundleContext, bySymbolicName, installed);
// start all the newly installed bundles (existing bundles are not started if they are stopped)
startBundles(installed);
// mark everything installed
- markInstalled(context, slingStartupDir);
+ markInstalled(bundleContext, slingStartupDir);
}
// due to the upgrade of a framework extension bundle, the framework
@@ -279,73 +252,9 @@ class BootstrapInstaller implements Bund
logger.log(
Logger.LOG_INFO,
"Framework extension(s) have been updated, restarting framework after startup has completed");
-
- targetStartLevel = -1;
}
- }
-
- /** Nothing to be done on stop */
- public void stop(BundleContext context) {
- this.bundleContext = null;
- }
-
- //---------- Framework Listener
-
- /**
- * Called whenever a framework event is taking place. This method only cares
- * for the framework event emitted once the framework startup has completed.
- * Once the framework startup has completed, this method takes further
- * actions (besides unregistering as a framework listener):
- * <ul>
- * <li>If bundle installation in the {@link #start(BundleContext)} method
- * included an update of a framework extension fragment bundle, the
- * framework has to be restarted. This is effectuated by calling the
- * <code>Bundle.update()</code> method on the system bundle.</li>
- * <li>If a restart is not required, the StartLevel service is instructed to
- * raise the framework start level to the value requested by the framework
- * launcher.</li>
- * </ul>
- */
- public void frameworkEvent(FrameworkEvent event) {
- if (event.getType() == FrameworkEvent.STARTED) {
-
- // don't care for further events
- this.bundleContext.removeFrameworkListener(this);
-
- if (targetStartLevel < 1) {
-
- // restart
- logger.log(Logger.LOG_INFO,
- "Restarting framework to resolve new framework extension(s)");
- try {
- bundleContext.getBundle(0).update();
- } catch (BundleException be) {
- logger.log(
- Logger.LOG_ERROR,
- "Failed restarting to resolve new framework extension(s)",
- be);
- }
-
- } else {
- // raise start level to the desired target
- ServiceReference sr = bundleContext.getServiceReference(StartLevel.class.getName());
- if (sr != null) {
- StartLevel sl = (StartLevel) bundleContext.getService(sr);
- try {
- logger.log(Logger.LOG_INFO, "Setting start level to "
- + targetStartLevel);
- sl.setStartLevel(targetStartLevel);
- } finally {
- bundleContext.ungetService(sr);
- }
- } else {
- logger.log(Logger.LOG_WARNING,
- "StartLevel service not available, will not set the start level");
- }
-
- }
- }
+ return requireRestart;
}
//---------- Startup folder maintenance
@@ -706,34 +615,19 @@ class BootstrapInstaller implements Bund
* of this instance.
*/
private Manifest getManifest(File jar) {
+ JarFile jarFile = null;
try {
- InputStream ins = new FileInputStream(jar);
- return getManifest(ins);
- } catch (FileNotFoundException e) {
- logger.log(Logger.LOG_WARNING, "Could not get inputstream from file ("+jar+"):"+e);
- //throw new IllegalArgumentException("Could not get inputstream from file ("+jar+"):"+e, e);
- }
- return null;
- }
-
- /**
- * Return the manifest from a jar if it is possible to get it,
- * this will also handle closing out the stream
- *
- * @param ins the inputstream for the jar
- * @return the manifest OR null if it cannot be obtained
- */
- Manifest getManifest(InputStream ins) {
- try {
- JarInputStream jis = new JarInputStream(ins);
- return jis.getManifest();
- } catch (IOException ioe) {
- logger.log(Logger.LOG_ERROR, "Failed to read manifest from stream: "
- + ins, ioe);
+ jarFile = new JarFile(jar, false);
+ return jarFile.getManifest();
+ } catch (IOException e) {
+ logger.log(Logger.LOG_WARNING,
+ "Could not get inputstream from file (" + jar + "):" + e);
} finally {
- try {
- ins.close();
- } catch (IOException ignore) {
+ if (jarFile != null) {
+ try {
+ jarFile.close();
+ } catch (IOException ignore) {
+ }
}
}
return null;
@@ -749,7 +643,7 @@ class BootstrapInstaller implements Bund
*
* @param manifest The Manifest from which to extract the header.
*/
- String getBundleSymbolicName(Manifest manifest) {
+ static String getBundleSymbolicName(Manifest manifest) {
return manifest.getMainAttributes().getValue(
Constants.BUNDLE_SYMBOLICNAME);
}
Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java Wed Aug 10 08:46:47 2011
@@ -24,11 +24,9 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.lang.management.ManagementFactory;
import java.net.MalformedURLException;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
@@ -43,17 +41,17 @@ import javax.management.AttributeList;
import javax.management.MBeanServer;
import javax.management.ObjectName;
-import org.apache.felix.framework.Felix;
import org.apache.felix.framework.Logger;
import org.apache.felix.framework.util.FelixConstants;
import org.apache.sling.launchpad.api.LaunchpadContentProvider;
import org.apache.sling.launchpad.base.shared.Notifiable;
import org.apache.sling.launchpad.base.shared.SharedConstants;
-import org.osgi.framework.BundleActivator;
+import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
import org.osgi.framework.Version;
+import org.osgi.framework.launch.Framework;
import org.osgi.service.url.URLConstants;
import org.osgi.service.url.URLStreamHandlerService;
@@ -89,10 +87,7 @@ import org.osgi.service.url.URLStreamHan
* <code>${inner}</code>.
* <p>
*/
-public class Sling implements BundleActivator {
-
- /** Pseduo class version ID to keep the IDE quite. */
- private static final long serialVersionUID = 1L;
+public class Sling {
/**
* The name of the configuration property defining the Sling home directory
@@ -161,6 +156,14 @@ public class Sling implements BundleActi
public static final String PROP_SYSTEM_PACKAGES = "org.apache.sling.launcher.system.packages";
/**
+ * Timeout to wait for the initialized framework to actually stop for it to
+ * be reinitialized. This is set to a second, which should be ample time to
+ * do this. If this time passes without the framework being stopped, an
+ * error is issued.
+ */
+ private static final long REINIT_TIMEOUT = 1000L;
+
+ /**
* List of multiple Execution Environment names supported by various
* Java Runtime versions.
* @see #setExecutionEnvironment(Map)
@@ -181,14 +184,7 @@ public class Sling implements BundleActi
* The <code>Felix</code> instance loaded on {@link #init()} and stopped
* on {@link #destroy()}.
*/
- private Felix felix;
-
- /**
- * The <code>BundleContext</code> of the OSGi framework system bundle.
- * This is used for service registration and service access to get at the
- * delegatee servlet.
- */
- private BundleContext bundleContext;
+ private Framework framework;
/**
* Initializes this servlet by loading the framework configuration
@@ -205,7 +201,7 @@ public class Sling implements BundleActi
this.logger = logger;
this.resourceProvider = resourceProvider;
- this.logger.log(Logger.LOG_INFO, "Starting Sling");
+ this.logger.log(Logger.LOG_INFO, "Starting Apache Sling");
// read the default parameters
Map<String, String> props = this.loadConfigProperties(propOverwrite);
@@ -216,28 +212,24 @@ public class Sling implements BundleActi
// ensure execution environment
this.setExecutionEnvironment(props);
- // prepare bootstrap installer and ensure the framework only goes into
- // level 1 in the first place
- final BootstrapInstaller bi = new BootstrapInstaller(logger,
- resourceProvider, props);
- props.put(Constants.FRAMEWORK_BEGINNING_STARTLEVEL, "1");
-
- // the custom activator list just contains this servlet
- List<BundleActivator> activators = new ArrayList<BundleActivator>();
- activators.add(this);
- activators.add(bi);
-
// create the framework and start it
- Map<String, Object> felixProps = new HashMap<String, Object>(props);
- felixProps.put(FelixConstants.LOG_LOGGER_PROP, logger);
- felixProps.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, activators);
try {
- Felix tmpFelix = new SlingFelix(notifiable, felixProps);
- tmpFelix.init(); // call needed due to FELIX-910
- tmpFelix.start();
+ Framework tmpFramework = createFramework(notifiable, logger, props);
+
+ init(tmpFramework);
+
+ if (new BootstrapInstaller(tmpFramework.getBundleContext(), logger,
+ resourceProvider).install()) {
+ stop(tmpFramework);
+ tmpFramework = createFramework(notifiable, logger, props);
+ init(tmpFramework);
+ }
+
+ // finally start
+ tmpFramework.start();
// only assign field if start succeeds
- this.felix = tmpFelix;
+ this.framework = tmpFramework;
} catch (BundleException be) {
throw be;
} catch (Exception e) {
@@ -246,7 +238,7 @@ public class Sling implements BundleActi
}
// log sucess message
- this.logger.log(Logger.LOG_INFO, "Sling started");
+ this.logger.log(Logger.LOG_INFO, "Apache Sling started");
}
/**
@@ -254,21 +246,21 @@ public class Sling implements BundleActi
* delegatee servlet if one is set at all.
*/
public final void destroy() {
- if (felix != null) {
+ if (framework != null) {
// get a private copy of the reference and remove the class ref
- Felix myFelix;
+ Framework myFramework;
synchronized (this) {
- myFelix = felix;
- felix = null;
+ myFramework = framework;
+ framework = null;
}
// shutdown the Felix container
- if (myFelix != null) {
- logger.log(Logger.LOG_INFO, "Shutting down Sling");
+ if (myFramework != null) {
+ logger.log(Logger.LOG_INFO, "Shutting down Apache Sling");
try {
- myFelix.stop();
- myFelix.waitForStop(0);
+ myFramework.stop();
+ myFramework.waitForStop(0);
} catch (BundleException be) {
@@ -286,7 +278,7 @@ public class Sling implements BundleActi
}
- logger.log(Logger.LOG_INFO, "Sling stopped");
+ logger.log(Logger.LOG_INFO, "Apache Sling stopped");
}
}
}
@@ -303,10 +295,9 @@ public class Sling implements BundleActi
*
* @param bundleContext The <code>BundleContext</code> of the system
* bundle of the OSGi framework.
- * @throws Exception May be thrown if the {@link #doStartBundle()} throws.
+ * @throws BundleException May be thrown if the {@link #doStartBundle()} throws.
*/
- public final void start(BundleContext bundleContext) throws Exception {
- this.bundleContext = bundleContext;
+ private final void startup(BundleContext bundleContext) throws BundleException {
// register the context URL handler
Hashtable<String, Object> props = new Hashtable<String, Object>();
@@ -343,7 +334,11 @@ public class Sling implements BundleActi
bundleContext.registerService(LaunchpadContentProvider.class.getName(), resourceProvider, null);
// execute optional bundle startup tasks of an extension
- this.doStartBundle();
+ try {
+ this.doStartBundle();
+ } catch (Exception e) {
+ throw new BundleException(e.getMessage(), e);
+ }
}
/**
@@ -355,19 +350,47 @@ public class Sling implements BundleActi
* @param bundleContext The <code>BundleContext</code> of the system
* bundle of the OSGi framework.
*/
- public final void stop(BundleContext bundleContext) {
+ private final void shutdown() {
// execute optional bundle stop tasks of an extension
try {
this.doStopBundle();
} catch (Exception e) {
this.logger.log(Logger.LOG_ERROR, "Unexpected exception caught", e);
}
+ }
+
+ // ---------- Creating the framework instance
+
+ @SuppressWarnings("unchecked")
+ private Framework createFramework(final Notifiable notifiable,
+ final Logger logger, @SuppressWarnings("rawtypes") Map props)
+ throws Exception {
+ props.put(FelixConstants.LOG_LOGGER_PROP, logger);
+ return new SlingFelix(notifiable, props);
+ }
+
+ private void init(final Framework framework) throws BundleException {
+ // initialize the framework
+ framework.init();
- // drop bundle context reference
- this.bundleContext = null;
+ // do first startup setup
+ this.startup(framework.getBundleContext());
+ }
+
+ private void stop(final Framework framework) throws BundleException {
+ if ((framework.getState() & (Bundle.STARTING|Bundle.ACTIVE|Bundle.STOPPING)) != 0) {
+ framework.stop();
+
+ try {
+ framework.waitForStop(REINIT_TIMEOUT);
+ } catch (InterruptedException ie) {
+ throw new BundleException(
+ "Interrupted while waiting for the framework stop before reinitialization");
+ }
+ }
}
- // ---------- Configuration Loading ----------------------------------------
+ // ---------- Configuration Loading
/**
* Loads the configuration properties in the configuration property file
@@ -377,9 +400,9 @@ public class Sling implements BundleActi
* located in the <tt>conf/</tt> directory of the Felix installation
* directory and is called "<tt>config.properties</tt>". The
* installation directory of Felix is assumed to be the parent directory of
- * the <tt>felix.jar</tt> file as found on the system class path property.
+ * the <tt>framework.jar</tt> file as found on the system class path property.
* The precise file from which to load configuration properties can be set
- * by initializing the "<tt>felix.config.properties</tt>" system
+ * by initializing the "<tt>framework.config.properties</tt>" system
* property to an arbitrary URL.
*
* @return A <tt>Properties</tt> instance or <tt>null</tt> if there was
@@ -415,23 +438,23 @@ public class Sling implements BundleActi
slingHome = slingHomeFile.getAbsolutePath();
// overlay with ${sling.home}/sling.properties
- this.logger.log(Logger.LOG_INFO, "Starting sling in " + slingHome);
+ this.logger.log(Logger.LOG_INFO, "Starting Apache Sling in " + slingHome);
File propFile = new File(slingHome, CONFIG_PROPERTIES);
this.load(staticProps, propFile);
// migrate old properties to new properties
- migrateProp(staticProps, "felix.cache.profiledir", Constants.FRAMEWORK_STORAGE);
+ migrateProp(staticProps, "framework.cache.profiledir", Constants.FRAMEWORK_STORAGE);
migrateProp(staticProps, "sling.osgi-core-packages", "osgi-core-packages");
migrateProp(staticProps, "sling.osgi-compendium-services", "osgi-compendium-services");
// migrate initial start level property: Felix used to have
- // felix.startlevel.framework, later moved to org.osgi.framework.startlevel
+ // framework.startlevel.framework, later moved to org.osgi.framework.startlevel
// and finally now uses org.osgi.framework.startlevel.beginning as
// speced in the latest R 4.2 draft (2009/03/10). We first check the
// intermediate Felix property, then the initial property, thus allowing
// the older (and more probable value) to win
migrateProp(staticProps, "org.osgi.framework.startlevel", Constants.FRAMEWORK_BEGINNING_STARTLEVEL);
- migrateProp(staticProps, "felix.startlevel.framework", Constants.FRAMEWORK_BEGINNING_STARTLEVEL);
+ migrateProp(staticProps, "framework.startlevel.framework", Constants.FRAMEWORK_BEGINNING_STARTLEVEL);
// create a copy of the properties to perform variable substitution
final Map<String, String> runtimeProps = new HashMap<String, String>();
@@ -758,7 +781,7 @@ public class Sling implements BundleActi
* before it is being stopped.
*/
protected final BundleContext getBundleContext() {
- return this.bundleContext;
+ return this.framework.getBundleContext();
}
/**
Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java Wed Aug 10 08:46:47 2011
@@ -16,7 +16,7 @@
*/
package org.apache.sling.launchpad.base.webapp;
-import static org.apache.felix.framework.util.FelixConstants.*;
+import static org.apache.felix.framework.util.FelixConstants.LOG_LEVEL_PROP;
import java.io.IOException;
import java.net.MalformedURLException;
@@ -192,7 +192,7 @@ public class SlingServletDelegate extend
try {
- log("Starting Sling in " + slingHome);
+ log("Starting Apache Sling in " + slingHome);
// read the default parameters
Map<String, String> props = loadConfigProperties(slingHome);
@@ -212,7 +212,7 @@ public class SlingServletDelegate extend
// them destroyed in the finally clause.
if (servletDestroyed) {
- log("SlingServletDelegate destroyed while starting Sling, shutting Sling down");
+ log("SlingServletDelegate destroyed while starting Apache Sling, shutting Apache Sling down");
} else {
@@ -224,20 +224,20 @@ public class SlingServletDelegate extend
tmpSling = null;
tmpDelegatee = null;
- log("Sling successfully started in " + slingHome);
+ log("Apache Sling successfully started in " + slingHome);
}
} catch (BundleException be) {
- throw new ServletException("Failed to start Sling in " + slingHome, be);
+ throw new ServletException("Failed to start Apache Sling in " + slingHome, be);
} catch (ServletException se) {
- throw new ServletException("Failed to start bridge servlet for Sling", se);
+ throw new ServletException("Failed to start bridge servlet for Apache Sling", se);
} catch (Throwable t) {
- throw new ServletException("Uncaught Failure starting Sling", t);
+ throw new ServletException("Uncaught Failure starting Apache Sling", t);
} finally {
Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/webapp/SlingServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/webapp/SlingServlet.java?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/webapp/SlingServlet.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/webapp/SlingServlet.java Wed Aug 10 08:46:47 2011
@@ -112,7 +112,7 @@ public class SlingServlet extends Generi
if (slingHome != null) {
startSling();
} else {
- log("Sling cannot be started yet, because sling.home is not defined yet");
+ log("Apache Sling cannot be started yet, because sling.home is not defined yet");
}
log("Servlet " + getServletName() + " initialized");
@@ -160,7 +160,7 @@ public class SlingServlet extends Generi
((HttpServletResponse) res).sendError(
HttpServletResponse.SC_SERVICE_UNAVAILABLE,
- "Sling is currently starting up, please try again");
+ "Apache Sling is currently starting up, please try again");
}
}
@@ -200,7 +200,7 @@ public class SlingServlet extends Generi
* removed and remove the shutdown hook (but don't care if that fails).
*/
- log("Sling has been stopped");
+ log("Apache Sling has been stopped");
// clear the reference to the framework
sling = null;
@@ -234,7 +234,7 @@ public class SlingServlet extends Generi
if (updateFile == null) {
- log("Restarting Framework and Sling");
+ log("Restarting Framework and Apache Sling");
startSling((URL) null);
} else {
@@ -301,7 +301,7 @@ public class SlingServlet extends Generi
startSling(launcherJar);
} catch (MalformedURLException mue) {
- log("Cannot load Sling Launcher JAR "
+ log("Cannot load Apache Sling Launcher JAR "
+ SharedConstants.DEFAULT_SLING_LAUNCHER_JAR, mue);
}
}
@@ -313,10 +313,10 @@ public class SlingServlet extends Generi
private void startSling(URL launcherJar) {
synchronized (this) {
if (sling != null) {
- log("Sling already started, nothing to do");
+ log("Apache Sling already started, nothing to do");
return;
} else if (startingSling != null) {
- log("Sling being started by Thread " + startingSling);
+ log("Apache Sling being started by Thread " + startingSling);
return;
}
@@ -439,7 +439,7 @@ public class SlingServlet extends Generi
}
}
-
+
slingHome = substVars(slingHome, null, null, null);
log("Setting sling.home=" + slingHome + " (" + source + ")");
@@ -477,7 +477,7 @@ public class SlingServlet extends Generi
// ensure message
if (message == null) {
- message = "Failed to start Sling in " + slingHome;
+ message = "Failed to start Apache Sling in " + slingHome;
}
// unwrap to get the real cause
@@ -494,7 +494,7 @@ public class SlingServlet extends Generi
startingSling = null;
}
}
-
+
// ---------- Property file variable substition support --------------------
/**
Modified: sling/trunk/launchpad/base/src/test/java/org/apache/sling/launchpad/base/impl/BootstrapInstallerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/test/java/org/apache/sling/launchpad/base/impl/BootstrapInstallerTest.java?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/test/java/org/apache/sling/launchpad/base/impl/BootstrapInstallerTest.java (original)
+++ sling/trunk/launchpad/base/src/test/java/org/apache/sling/launchpad/base/impl/BootstrapInstallerTest.java Wed Aug 10 08:46:47 2011
@@ -25,9 +25,6 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
-import java.util.HashMap;
-import java.util.jar.Manifest;
-
import org.junit.Test;
/**
@@ -186,46 +183,6 @@ public class BootstrapInstallerTest {
assertFalse(BootstrapInstaller.isBlank(" asdf "));
}
- /**
- * Test method for
- * {@link org.apache.sling.launchpad.base.impl.BootstrapInstaller#getManifest(java.io.InputStream)}
- * .
- */
- @Test
- public void testGetManifestInputStream() {
- BootstrapInstaller bsi = new BootstrapInstaller(null, null, new HashMap<String, String>());
- InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(
- "holaworld.jar");
- Manifest m = bsi.getManifest(is);
- assertNotNull(m);
-
- is = Thread.currentThread().getContextClassLoader().getResourceAsStream(
- "holaworld-nomanifest.jar");
- m = bsi.getManifest(is);
- assertNull(m);
- }
-
- /**
- * Test method for
- * {@link org.apache.sling.launchpad.base.impl.BootstrapInstaller#getBundleSymbolicName(java.util.jar.Manifest)}
- * .
- */
- @Test
- public void testGetBundleSymbolicName() {
- BootstrapInstaller bsi = new BootstrapInstaller(null, null, new HashMap<String, String>());
- InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(
- "holaworld.jar");
- Manifest m = bsi.getManifest(is);
- String sname = bsi.getBundleSymbolicName(m);
- assertNotNull(sname);
-
- is = Thread.currentThread().getContextClassLoader().getResourceAsStream(
- "holaworld-invalid.jar");
- m = bsi.getManifest(is);
- sname = bsi.getBundleSymbolicName(m);
- assertNull(sname);
- }
-
// TODO eventually add in tests that create a context so we can test more
// things in detail
Modified: sling/trunk/launchpad/builder/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/builder/pom.xml?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/launchpad/builder/pom.xml (original)
+++ sling/trunk/launchpad/builder/pom.xml Wed Aug 10 08:46:47 2011
@@ -294,7 +294,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.launchpad.base</artifactId>
- <version>2.3.0</version>
+ <version>2.3.1-SNAPSHOT</version>
<classifier>webapp</classifier>
<type>war</type>
<scope>runtime</scope>
@@ -302,7 +302,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.launchpad.base</artifactId>
- <version>2.3.0</version>
+ <version>2.3.1-SNAPSHOT</version>
<classifier>app</classifier>
<scope>provided</scope>
</dependency>
Modified: sling/trunk/launchpad/integration-tests/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/pom.xml?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/launchpad/integration-tests/pom.xml (original)
+++ sling/trunk/launchpad/integration-tests/pom.xml Wed Aug 10 08:46:47 2011
@@ -125,7 +125,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.testing</artifactId>
- <version>2.0.8</version>
+ <version>2.0.9-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
Modified: sling/trunk/launchpad/testing/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/testing/pom.xml?rev=1156070&r1=1156069&r2=1156070&view=diff
==============================================================================
--- sling/trunk/launchpad/testing/pom.xml (original)
+++ sling/trunk/launchpad/testing/pom.xml Wed Aug 10 08:46:47 2011
@@ -164,12 +164,12 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.launchpad.base</artifactId>
- <version>2.3.0</version>
+ <version>2.3.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.launchpad.base</artifactId>
- <version>2.3.0</version>
+ <version>2.3.1-SNAPSHOT</version>
<classifier>app</classifier>
</dependency>
</dependencies>
@@ -468,7 +468,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.launchpad.base</artifactId>
- <version>2.3.0</version>
+ <version>2.3.1-SNAPSHOT</version>
<classifier>app</classifier>
</dependency>
@@ -504,7 +504,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.testing</artifactId>
- <version>2.0.9-SNAPSHOT</version>
+ <version>2.0.8</version>
<scope>test</scope>
<exclusions>
<exclusion>