Hi, 
Just want to clarify that the ebaFile.getname can return empty string 
according to our implementation of IFile below:

public FileImpl(File f, File rootFile)
{
file = f;
this.rootDirFile = rootFile;
rootDir = rootFile.getAbsolutePath();

if (f == rootFile) name = "";
else name = file.getAbsolutePath().substring(rootDir.length() + 1);
} 
Apparently, if we pass in eba file directory as an IDirectory, we will get 
an empty string when we try to get the file name from the IFile via 
.getName() call because the eba file is same as the root file. The reason 
that we have not seen before is that we don't have generating 
APPLICAITON.MF test until recently.

Anyway, I think what Lin put in is fine by avoiding getting eba name from 
this .getName() call. Just wondering whether we need to improve our IFILE 
implementation or not. Please correct me if I miss something.

Many thanks and kindest regards,
Emily
===========================
Emily Jiang
WebSphere ESB Foundation Technologies

MP 211, DE3A25, Winchester, Hampshire, England, SO21 2JN
Phone:  +44 (0)1962 816278  Internal: 246278

Email: [email protected] 
Lotus Notes: Emily Jiang/UK/i...@ibmgb




From:   Alasdair Nottingham <[email protected]>
To:     "[email protected]" <[email protected]>
Date:   07/07/2010 19:19
Subject:        Re: svn commit: r961444 - in 
/incubator/aries/trunk/application/application-management/src/main: 
java/org/apache/aries/application/management/impl/ 
resources/org/apache/aries/application/messages/
Sent by:        Alasdair Nottingham <[email protected]>



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}.
> 
> 







Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU











Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU





Reply via email to