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 2008/08/26 08:55:17 UTC
svn commit: r688973 - in
/incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app:
BootstrapInstaller.java DeploymentPackageInstaller.java
Author: cziegeler
Date: Mon Aug 25 23:55:16 2008
New Revision: 688973
URL: http://svn.apache.org/viewvc?rev=688973&view=rev
Log:
SLING-570 - Only install bundles on first startup.
Modified:
incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/BootstrapInstaller.java
incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/DeploymentPackageInstaller.java
Modified: incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/BootstrapInstaller.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/BootstrapInstaller.java?rev=688973&r1=688972&r2=688973&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/BootstrapInstaller.java (original)
+++ incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/BootstrapInstaller.java Mon Aug 25 23:55:16 2008
@@ -18,7 +18,13 @@
*/
package org.apache.sling.launcher.app;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
@@ -77,6 +83,9 @@
*/
private final ResourceProvider resourceProvider;
+ /** The data file which works as a marker to detect the first startup. */
+ private static final String DATA_FILE = "bootstrapinstaller.ser";
+
BootstrapInstaller(Logger logger, ResourceProvider resourceProvider) {
this.logger = logger;
this.resourceProvider = resourceProvider;
@@ -86,30 +95,78 @@
* Installs any Bundles missing in the current framework instance. The
* Bundles are verified by the Bundle location string. All missing Bundles
* are first installed and then started in the order of installation.
+ * Also install all deployment packages.
+ *
+ * This installation stuff is only performed during the first startup!
*/
public void start(BundleContext context) throws Exception {
-
- // register deployment package support
- final DeploymentPackageInstaller dpi =
- new DeploymentPackageInstaller(context, logger, resourceProvider);
- context.addFrameworkListener(dpi);
- context.addServiceListener(dpi, "("
- + Constants.OBJECTCLASS + "=" + DeploymentPackageInstaller.DEPLOYMENT_ADMIN + ")");
-
- // list all existing bundles
- Bundle[] bundles = context.getBundles();
- Map<String, Bundle> byLocation = new HashMap<String, Bundle>();
- for (int i = 0; i < bundles.length; i++) {
- byLocation.put(bundles[i].getLocation(), bundles[i]);
+ boolean alreadyInstalled = false;
+ final File dataFile = context.getDataFile(DATA_FILE);
+ if ( dataFile != null && dataFile.exists() ) {
+ try {
+ final FileInputStream fis = new FileInputStream(dataFile);
+ try {
+ final ObjectInputStream ois = new ObjectInputStream(fis);
+ try {
+ alreadyInstalled = ois.readBoolean();
+ } finally {
+ try {
+ ois.close();
+ } catch (IOException ignore) {}
+ }
+ } finally {
+ try {
+ fis.close();
+ } catch (IOException ignore) {}
+ }
+ } catch (IOException ioe) {
+ logger.log(Logger.LOG_ERROR, "IOException during reading of installed flag.", ioe);
+ }
}
- // install bundles
- List<Bundle> installed = new LinkedList<Bundle>();
- installBundles(context, byLocation, PATH_CORE_BUNDLES, installed);
- installBundles(context, byLocation, PATH_BUNDLES, installed);
+ if ( !alreadyInstalled ) {
+ // register deployment package support
+ final DeploymentPackageInstaller dpi =
+ new DeploymentPackageInstaller(context, logger, resourceProvider);
+ context.addFrameworkListener(dpi);
+ context.addServiceListener(dpi, "("
+ + Constants.OBJECTCLASS + "=" + DeploymentPackageInstaller.DEPLOYMENT_ADMIN + ")");
+
+ // list all existing bundles
+ Bundle[] bundles = context.getBundles();
+ Map<String, Bundle> byLocation = new HashMap<String, Bundle>();
+ for (int i = 0; i < bundles.length; i++) {
+ byLocation.put(bundles[i].getLocation(), bundles[i]);
+ }
- // set start levels on the bundles and start them
- startBundles(context, installed);
+ // install bundles
+ List<Bundle> installed = new LinkedList<Bundle>();
+ installBundles(context, byLocation, PATH_CORE_BUNDLES, installed);
+ installBundles(context, byLocation, PATH_BUNDLES, installed);
+
+ try {
+ final FileOutputStream fos = new FileOutputStream(dataFile);
+ try {
+ final ObjectOutputStream oos = new ObjectOutputStream(fos);
+ try {
+ oos.writeBoolean(true);
+ } finally {
+ try {
+ oos.close();
+ } catch (IOException ignore) {}
+ }
+ } finally {
+ try {
+ fos.close();
+ } catch (IOException ignore) {}
+ }
+ } catch (IOException ioe) {
+ logger.log(Logger.LOG_ERROR, "IOException during writing of installed flag.", ioe);
+ }
+
+ // set start levels on the bundles and start them
+ startBundles(context, installed);
+ }
}
/** Nothing to be done on stop */
Modified: incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/DeploymentPackageInstaller.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/DeploymentPackageInstaller.java?rev=688973&r1=688972&r2=688973&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/DeploymentPackageInstaller.java (original)
+++ incubator/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launcher/app/DeploymentPackageInstaller.java Mon Aug 25 23:55:16 2008
@@ -103,6 +103,7 @@
/**
* Deploy the deployment packages.
*/
+ @SuppressWarnings("unchecked")
private void deploy() {
ArrayList<String> installedPcks = null;
final File dataFile = this.bundleContext.getDataFile(DATA_FILE);