You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ch...@apache.org on 2008/03/07 10:07:31 UTC

svn commit: r634590 - in /felix/trunk: deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/ deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/ metatype/src/main/java/org/apache/felix/metatype/

Author: christian
Date: Fri Mar  7 01:07:29 2008
New Revision: 634590

URL: http://svn.apache.org/viewvc?rev=634590&view=rev
Log:
MetaType:
- Changed the name attribute of an AD element from required to optional in metatype reader (as specced by compendium 105.8)

DeploymentAdmin:
- Use correct dir for persistence
- Iterating backwards was missing correct initialisation index in several locations
- Resource processors only used for dropping resources are correctly committed now
- Fixed bug where the processed resources could be read from the incoming deploymentpackage stream while processing bundles
- Stale customizer bundles are not uninstalled immediately

Modified:
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/AbstractDeploymentPackage.java
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentPackageManifest.java
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/CommitResourceCommand.java
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DeploymentSessionImpl.java
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropBundleCommand.java
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropResourceCommand.java
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/ProcessResourceCommand.java
    felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/UpdateCommand.java
    felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/AbstractDeploymentPackage.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/AbstractDeploymentPackage.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/AbstractDeploymentPackage.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/AbstractDeploymentPackage.java Fri Mar  7 01:07:29 2008
@@ -177,9 +177,13 @@
             if (processor != null) {
                 try {
                     ServiceReference[] services = m_bundleContext.getServiceReferences(ResourceProcessor.class.getName(), "(" + org.osgi.framework.Constants.SERVICE_PID + "=" + processor + ")");
-                    if (services.length > 0) {
+                    if (services != null && services.length > 0) {
                         return services[0];
                     }
+                    else {
+                    	return null;
+                    }
+                    
                 }
                 catch (InvalidSyntaxException e) {
                 	// TODO: log this

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java Fri Mar  7 01:07:29 2008
@@ -102,7 +102,7 @@
                 if (packages[i].isDirectory()) {
                     try {
                         File index = new File(packages[i], PACKAGEINDEX_FILE);
-                        File contents = new File(packages[i], PACKAGE_DIR);
+                        File contents = new File(packages[i], PACKAGECONTENTS_DIR);
                         FileDeploymentPackage dp = new FileDeploymentPackage(index, contents, m_context);
                         m_packages.put(dp.getName(), dp);
                     }

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentPackageManifest.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentPackageManifest.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentPackageManifest.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/DeploymentPackageManifest.java Fri Mar  7 01:07:29 2008
@@ -56,7 +56,7 @@
 
         Attributes mainAttributes = m_manifest.getMainAttributes();
 
-        // TODO: verify symbolic name for valid format/chars
+        // TODO: verify symbolic name and entry-names for valid format/chars
         m_symbolicName = getNonNullHeader(mainAttributes.getValue(Constants.DEPLOYMENTPACKAGE_SYMBOLICMAME));
 
         String version = getNonNullHeader(mainAttributes.getValue(Constants.DEPLOYMENTPACKAGE_VERSION));

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java Fri Mar  7 01:07:29 2008
@@ -50,7 +50,7 @@
      * command was never executed, a best effort should be made though.
      */
     public void rollback() {
-        for (ListIterator i = m_rollback.listIterator(); i.hasPrevious();) {
+        for (ListIterator i = m_rollback.listIterator(m_commit.size()); i.hasPrevious();) {
             Runnable runnable = (Runnable) i.previous();
             runnable.run();
         }
@@ -61,7 +61,7 @@
      * Commits all changes the command may have defined when it was executed by calling the <code>execute()</code> method.
      */
     protected void commit() {
-        for (ListIterator i = m_commit.listIterator(); i.hasPrevious();) {
+        for (ListIterator i = m_commit.listIterator(m_commit.size()); i.hasPrevious();) {
             Runnable runnable = (Runnable) i.previous();
             runnable.run();
         }

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/CommitResourceCommand.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/CommitResourceCommand.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/CommitResourceCommand.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/CommitResourceCommand.java Fri Mar  7 01:07:29 2008
@@ -36,8 +36,8 @@
     private final List m_processors = new ArrayList();
 
     public void execute(DeploymentSessionImpl session) throws DeploymentException {
-        for (ListIterator i = m_processors.listIterator(); i.hasPrevious();) {
-            ResourceProcessor processor = (ResourceProcessor) i.previous();
+        for (ListIterator i = m_processors.listIterator(m_processors.size()); i.hasPrevious();) {
+    		ResourceProcessor processor = (ResourceProcessor) i.previous();
             try {
                 processor.prepare();
             }
@@ -46,7 +46,7 @@
                 throw new DeploymentException(DeploymentException.CODE_OTHER_ERROR, "Preparing commit for resource processor failed", e);
             }
         }
-        for (ListIterator i = m_processors.listIterator(); i.hasPrevious();) {
+        for (ListIterator i = m_processors.listIterator(m_processors.size()); i.hasPrevious();) {
             ResourceProcessor processor = (ResourceProcessor) i.previous();
             try {
                 processor.commit();
@@ -56,10 +56,11 @@
                 // TODO Throw exception?
             }
         }
+        m_processors.clear();
     }
 
     public void rollback() {
-        for (ListIterator i = m_processors.listIterator(); i.hasPrevious();) {
+        for (ListIterator i = m_processors.listIterator(m_processors.size()); i.hasPrevious();) {
             ResourceProcessor processor = (ResourceProcessor) i.previous();
             try {
                 processor.rollback();
@@ -75,15 +76,17 @@
      * Add a resource processor, all resource processors that are added will be committed when the command is executed.
      *
      * @param processor The resource processor to add.
+     * @return true if the resource processor was added, false if it was already added.
      */
-    public void addResourceProcessor(ResourceProcessor processor) {
+    public boolean addResourceProcessor(ResourceProcessor processor) {
         for (Iterator i = m_processors.iterator(); i.hasNext();) {
             ResourceProcessor proc = (ResourceProcessor) i.next();
             if (proc == processor) {
-                return;
+                return false;
             }
         }
         m_processors.add(processor);
+        return true;
     }
 
     public void run() {

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DeploymentSessionImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DeploymentSessionImpl.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DeploymentSessionImpl.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DeploymentSessionImpl.java Fri Mar  7 01:07:29 2008
@@ -82,7 +82,7 @@
     }
 
     private void rollback(List executedCommands) {
-        for (ListIterator i = executedCommands.listIterator(); i.hasPrevious();) {
+        for (ListIterator i = executedCommands.listIterator(executedCommands.size()); i.hasPrevious();) {
             Command command = (Command) i.previous();
             command.rollback();
         }

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropBundleCommand.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropBundleCommand.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropBundleCommand.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropBundleCommand.java Fri Mar  7 01:07:29 2008
@@ -41,7 +41,7 @@
         BundleInfoImpl[] orderedTargetBundles = target.getOrderedBundleInfos();
         for (int i = orderedTargetBundles.length - 1; i >= 0; i--) {
             BundleInfoImpl bundleInfo = orderedTargetBundles[i];
-            if (source.getBundleInfoByPath(bundleInfo.getPath()) == null) {
+            if (!bundleInfo.isCustomizer() && source.getBundleInfoByPath(bundleInfo.getPath()) == null) {
                 // stale bundle, save a copy for rolling back and uninstall it
                 String symbolicName = bundleInfo.getSymbolicName();
                 try {

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropResourceCommand.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropResourceCommand.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropResourceCommand.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/DropResourceCommand.java Fri Mar  7 01:07:29 2008
@@ -60,7 +60,9 @@
                     ResourceProcessor resourceProcessor = (ResourceProcessor) context.getService(ref);
                     if (resourceProcessor != null) {
                         try {
-                            m_commitCommand.addResourceProcessor(resourceProcessor);
+                            if (m_commitCommand.addResourceProcessor(resourceProcessor)) {
+                            	resourceProcessor.begin(session);
+                            }
                             resourceProcessor.dropped(path);
                         }
                         catch (ResourceProcessorException e) {

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/ProcessResourceCommand.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/ProcessResourceCommand.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/ProcessResourceCommand.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/ProcessResourceCommand.java Fri Mar  7 01:07:29 2008
@@ -66,30 +66,29 @@
         }
 
         try {
-            for (AbstractInfo jarEntry = source.getNextEntry(); (jarEntry != null) && (!expectedResources.isEmpty()); jarEntry = source.getNextEntry()) {
-                String name = jarEntry.getPath();
-
-                if (!expectedResources.containsKey(name)) {
-                    throw new DeploymentException(DeploymentException.CODE_OTHER_ERROR, "Resource '" + name + "' is not described in the manifest.");
-                }
+        	while (!expectedResources.isEmpty()) {
+            	AbstractInfo jarEntry = source.getNextEntry();
+            	if (jarEntry == null) {
+                	throw new DeploymentException(DeploymentException.CODE_OTHER_ERROR, "Expected more resources in the stream: " + expectedResources.keySet());
+            	}
+            	
+            	String name = jarEntry.getPath();
 
                 ResourceInfoImpl resourceInfo = (ResourceInfoImpl) expectedResources.remove(name);
-
-                String resourceProcessorPID = resourceInfo.getResourceProcessor();
-                if (resourceProcessorPID == null) {
-                    // no resource processor specified, resource can be ignored
-                    continue;
+                if (resourceInfo == null) {
+                	throw new DeploymentException(DeploymentException.CODE_OTHER_ERROR, "Resource '" + name + "' is not described in the manifest.");
                 }
 
-                ServiceReference ref = source.getResourceProcessor(resourceProcessorPID);
+                ServiceReference ref = source.getResourceProcessor(name);
                 if (ref != null) {
                     String serviceOwnerSymName = ref.getBundle().getSymbolicName();
                     if (source.getBundleInfoByName(serviceOwnerSymName) != null) {
                         ResourceProcessor resourceProcessor = (ResourceProcessor) context.getService(ref);
                         if (resourceProcessor != null) {
-                            resourceProcessor.begin(session);
                             try {
-                                m_commitCommand.addResourceProcessor(resourceProcessor);
+                                if (m_commitCommand.addResourceProcessor(resourceProcessor)) {
+                                	resourceProcessor.begin(session);
+                                }
                                 resourceProcessor.process(name, source.getCurrentEntryStream());
                             }
                             catch (ResourceProcessorException rpe) {

Modified: felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/UpdateCommand.java
URL: http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/UpdateCommand.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/UpdateCommand.java (original)
+++ felix/trunk/deploymentadmin/src/main/java/org/apache/felix/deploymentadmin/spi/UpdateCommand.java Fri Mar  7 01:07:29 2008
@@ -55,13 +55,18 @@
         }
 
         try {
-            for (AbstractInfo entry = source.getNextEntry(); (entry != null) && (!expectedBundles.isEmpty()); entry = source.getNextEntry()) {
-                String name = entry.getPath();
-                if (!expectedBundles.containsKey(name)) {
+            while (!expectedBundles.isEmpty()) {
+            	AbstractInfo entry = source.getNextEntry();
+            	if (entry == null) {
+                	throw new DeploymentException(DeploymentException.CODE_OTHER_ERROR, "Expected more bundles in the stream: " + expectedBundles.keySet());
+            	}
+            	
+            	String name = entry.getPath();
+                BundleInfoImpl bundleInfo = (BundleInfoImpl) expectedBundles.remove(name);
+                if (bundleInfo == null) {
                     throw new DeploymentException(DeploymentException.CODE_OTHER_ERROR, "Resource '" + name + "' is not described in the manifest.");
                 }
 
-                BundleInfoImpl bundleInfo = (BundleInfoImpl) expectedBundles.remove(name);
                 Bundle bundle = source.getBundle(bundleInfo.getSymbolicName());
                 try {
                     if (bundle == null) {

Modified: felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
URL: http://svn.apache.org/viewvc/felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java?rev=634590&r1=634589&r2=634590&view=diff
==============================================================================
--- felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java (original)
+++ felix/trunk/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java Fri Mar  7 01:07:29 2008
@@ -281,7 +281,7 @@
     {
         AD ad = this.createAD();
         ad.setID( this.getRequiredAttribute( "id" ) );
-        ad.setName( this.getRequiredAttribute( "name" ) );
+        ad.setName( this.getOptionalAttribute( "name" ) );
         ad.setDescription( this.getOptionalAttribute( "description" ) );
         ad.setType( this.getRequiredAttribute( "type" ) );
         ad.setCardinality( this.getOptionalAttribute( "cardinality", 0 ) );