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