Hi,

The first set of additions seems wrong to me. I don't think the ebaFile.getName 
can return null or an empty string so the following if clause won't do 
anything. I think the code should be defaulting the app name if it isn't in the 
application manifest, but it doesn't do that where it is. I just have is diff 
to go by, so I might be wrong, but could you take a look?

Alasdair Nottingham

On 7 Jul 2010, at 18:53, [email protected] wrote:

> Author: linsun
> Date: Wed Jul  7 17:53:58 2010
> New Revision: 961444
> 
> URL: http://svn.apache.org/viewvc?rev=961444&view=rev
> Log:
> ARIES-351 - If an EBA contains a deployment.mf, we should not convert any 
> invalid bunldes but we don't want to throw an exception either - patch from 
> Emily Jiang
> 
> Modified:
>    
> incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
>    
> incubator/aries/trunk/application/application-management/src/main/resources/org/apache/aries/application/messages/AppManagementMessages.properties
> 
> Modified: 
> incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
> URL: 
> http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java?rev=961444&r1=961443&r2=961444&view=diff
> ==============================================================================
> --- 
> incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
>  (original)
> +++ 
> incubator/aries/trunk/application/application-management/src/main/java/org/apache/aries/application/management/impl/AriesApplicationManagerImpl.java
>  Wed Jul  7 17:53:58 2010
> @@ -112,69 +112,63 @@ public class AriesApplicationManagerImpl
>     DeploymentMetadata deploymentMetadata = null;
>     Map<String, BundleConversion> modifiedBundles = new HashMap<String, 
> BundleConversion>();
>     AriesApplicationImpl application = null;
> -    
> +    String appName = ebaFile.getName();
> +    //If the application name is null, we will try to get the file name.
> +    if ((appName == null) || (appName.isEmpty())) {
> +        String fullPath = ebaFile.toString();
> +        if (fullPath.endsWith("/"))
> +            fullPath = fullPath.substring(0, fullPath.length() -1);
> +        int last_slash = fullPath.lastIndexOf("/");
> +        appName = fullPath.substring(last_slash + 1, fullPath.length()); 
> +    }
>     try { 
> -     
> -        /* We require that all other .jar and .war files included by-value 
> be valid bundles
> -         * because a DEPLOYMENT.MF has been provided. If no DEPLOYMENT.MF, 
> migrate 
> -         * wars to wabs, plain jars to bundles
> -         */
> -          
> -        Set<BundleInfo> extraBundlesInfo = new HashSet<BundleInfo>();
> -        for (IFile f : ebaFile) { 
> -          if (f.isDirectory()) { 
> -            continue;
> -          }
> -          
> -          BundleManifest bm = getBundleManifest (f);
> -          if (bm != null) {
> -            if (bm.isValid()) {
> -              extraBundlesInfo.add(new 
> SimpleBundleInfo(_applicationMetadataFactory, bm, 
> f.toURL().toExternalForm()));
> -            } else if (deploymentMetadata != null) {
> -              throw new ManagementException 
> (MessageUtil.getMessage("APPMANAGEMENT0003E", f.getName(), 
> ebaFile.getName()));
> -            } else { 
> -              // We have a jar that needs converting to a bundle, or a war 
> to migrate to a WAB             
> -               BundleConversion convertedBinary = null;
> -              Iterator<BundleConverter> converters = 
> _bundleConverters.iterator();
> -              List<ConversionException> conversionExceptions = 
> Collections.emptyList();
> -              while (converters.hasNext() && convertedBinary == null) { 
> -                try {                        
> -                  convertedBinary = converters.next().convert(ebaFile, f);
> -                } catch (ServiceException sx) {
> -                  // We'll get this if our optional BundleConverter has not 
> been injected. 
> -                } catch (ConversionException cx) { 
> -                  conversionExceptions.add(cx);
> -                }
> -              }
> -              if (conversionExceptions.size() > 0) {
> -                for (ConversionException cx : conversionExceptions) { 
> -                  _logger.error("APPMANAGEMENT0004E", new 
> Object[]{f.getName(), ebaFile.getName(), cx});
> -                }
> -                throw new ManagementException 
> (MessageUtil.getMessage("APPMANAGEMENT0005E", ebaFile.getName()));
> +      IFile deploymentManifest = ebaFile.getFile(AppConstants.DEPLOYMENT_MF);
> +      /* We require that all other .jar and .war files included by-value be 
> valid bundles
> +       * because a DEPLOYMENT.MF has been provided. If no DEPLOYMENT.MF, 
> migrate 
> +       * wars to wabs, plain jars to bundles
> +       */
> +      Set<BundleInfo> extraBundlesInfo = new HashSet<BundleInfo>();
> +      for (IFile f : ebaFile) { 
> +        if (f.isDirectory()) { 
> +          continue;
> +        }
> +        BundleManifest bm = getBundleManifest (f);
> +        if (bm != null) {
> +          if (bm.isValid()) {
> +            extraBundlesInfo.add(new 
> SimpleBundleInfo(_applicationMetadataFactory, bm, 
> f.toURL().toExternalForm()));
> +          } else if (deploymentManifest == null){ 
> +            // We have a jar that needs converting to a bundle, or a war to 
> migrate to a WAB 
> +            // We only do this if a DEPLOYMENT.MF does not exist.
> +            BundleConversion convertedBinary = null;
> +            Iterator<BundleConverter> converters = 
> _bundleConverters.iterator();
> +            List<ConversionException> conversionExceptions = 
> Collections.emptyList();
> +            while (converters.hasNext() && convertedBinary == null) { 
> +              try {
> +                convertedBinary = converters.next().convert(ebaFile, f);
> +              } catch (ServiceException sx) {
> +                // We'll get this if our optional BundleConverter has not 
> been injected. 
> +              } catch (ConversionException cx) { 
> +                conversionExceptions.add(cx);
>               }
> -              if (convertedBinary != null) { 
> -                modifiedBundles.put (f.getName(), convertedBinary);
> -                bm = BundleManifest.fromBundle(f);
> -                extraBundlesInfo.add(new 
> SimpleBundleInfo(_applicationMetadataFactory, bm, f.getName()));
> +            }
> +            if (conversionExceptions.size() > 0) {
> +              for (ConversionException cx : conversionExceptions) { 
> +                _logger.error("APPMANAGEMENT0004E", new 
> Object[]{f.getName(), appName, cx});
>               }
> +              throw new ManagementException 
> (MessageUtil.getMessage("APPMANAGEMENT0005E", appName));
>             }
> -          } 
> -        }
> -      Manifest applicationManifest = parseApplicationManifest (ebaFile); 
> -      String appName = ebaFile.getName();
> -      //If the application name is null, we will try to get the file name.
> -      if ((appName == null) || (appName.isEmpty())) {
> -       String fullPath = ebaFile.toString();
> -       if (fullPath.endsWith("/"))
> -               fullPath = fullPath.substring(0, fullPath.length() -1);
> -          int last_slash = fullPath.lastIndexOf("/");
> -          appName = fullPath.substring(last_slash + 1, fullPath.length()); 
> +            if (convertedBinary != null) { 
> +              modifiedBundles.put (f.getName(), convertedBinary);
> +              bm = BundleManifest.fromBundle(f);
> +              extraBundlesInfo.add(new 
> SimpleBundleInfo(_applicationMetadataFactory, bm, f.getName()));
> +            } 
> +          }
> +        } 
>       }
> -      
> -     
> +      Manifest applicationManifest = parseApplicationManifest (ebaFile); 
>       ManifestDefaultsInjector.updateManifest(applicationManifest, appName, 
> ebaFile); 
>       applicationMetadata = 
> _applicationMetadataFactory.createApplicationMetadata(applicationManifest);
> -      IFile deploymentManifest = ebaFile.getFile(AppConstants.DEPLOYMENT_MF);
> +      
>       if (deploymentManifest != null) { 
>         deploymentMetadata = 
> _deploymentMetadataFactory.createDeploymentMetadata(deploymentManifest);
> 
> @@ -182,18 +176,16 @@ public class AriesApplicationManagerImpl
>         String appSymbolicName = 
> applicationMetadata.getApplicationSymbolicName();
>         String depSymbolicName = 
> deploymentMetadata.getApplicationSymbolicName();
>         if (!appSymbolicName.equals(depSymbolicName)) {
> -          throw new ManagementException 
> (MessageUtil.getMessage("APPMANAGEMENT0002E", ebaFile.getName(), 
> appSymbolicName, depSymbolicName));
> +          throw new ManagementException 
> (MessageUtil.getMessage("APPMANAGEMENT0002E", appName, appSymbolicName, 
> depSymbolicName));
>         }
>       }
> -      
> -
> 
>       application = new AriesApplicationImpl (applicationMetadata, 
> extraBundlesInfo, _localPlatform);
>       application.setDeploymentMetadata(deploymentMetadata);
>       // Store a reference to any modified bundles
>       application.setModifiedBundles (modifiedBundles);
>     } catch (IOException iox) {
> -      _logger.error ("APPMANAGEMENT0006E", new Object []{ebaFile.getName(), 
> iox});
> +      _logger.error ("APPMANAGEMENT0006E", new Object []{appName, iox});
>       throw new ManagementException(iox);
>     }
>     return application;
> 
> Modified: 
> incubator/aries/trunk/application/application-management/src/main/resources/org/apache/aries/application/messages/AppManagementMessages.properties
> URL: 
> http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-management/src/main/resources/org/apache/aries/application/messages/AppManagementMessages.properties?rev=961444&r1=961443&r2=961444&view=diff
> ==============================================================================
> --- 
> incubator/aries/trunk/application/application-management/src/main/resources/org/apache/aries/application/messages/AppManagementMessages.properties
>  (original)
> +++ 
> incubator/aries/trunk/application/application-management/src/main/resources/org/apache/aries/application/messages/AppManagementMessages.properties
>  Wed Jul  7 17:53:58 2010
> @@ -18,7 +18,6 @@
> #
> APPMANAGEMENT0001E=APPMANAGEMENT0001E: Unable to fully delete directory {0}. 
> APPMANAGEMENT0002E=APPMANAGEMENT0002E: Unable to create Aries application 
> from {0} since APPLICATION.MF symbolic name {1} does not equals DEPLOYMENT.MF 
> symbolic name {2}.
> -APPMANAGEMENT0003E=APPMANAGEMENT0003E: Invalid bundle {0} found when 
> DEPLOYMENT.MF present in {1}.
> APPMANAGEMENT0004E=APPMANAGEMENT0004E: Exception caught when converting 
> artifact {0} in {1}: {2}.
> APPMANAGEMENT0005E=APPMANAGEMENT0005E: Failed to create application from {0} 
> due to conversion errors: see log for details.
> APPMANAGEMENT0006E=APPMANAGEMENT0006E: IOException encountered while 
> constructing Aries application from {0}: {1}.
> 
> 

Reply via email to