[jboss-cvs] JBossAS SVN: r100245 - in projects/ejb3/trunk/package-manager/src: main/java/org/jboss/ejb3/packagemanager and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Feb 2 05:16:08 EST 2010


Author: jaikiran
Date: 2010-02-02 05:16:07 -0500 (Tue, 02 Feb 2010)
New Revision: 100245

Added:
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/TransactionalPackageManager.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultInstallOptions.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultUnInstallOptions.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultUpgradeOptions.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/InstallOptions.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/PackageManagerOptions.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/UnInstallOptions.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/UpgradeOptions.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/TransactionalPackageManagerInvocationHandler.java
Removed:
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/PackageManagerInvocationHandler.java
Modified:
   projects/ejb3/trunk/package-manager/src/main/assemble/assemble.xml
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManager.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerFactory.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerImpl.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Setup.java
   projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/dependency/unit/DependencyInstallTestCase.java
   projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/install/unit/BasicInstallTestCase.java
   projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/upgrade/unit/UpgradeUnitTestCase.java
Log:
EJBTHREE-1942 Refactoring

Modified: projects/ejb3/trunk/package-manager/src/main/assemble/assemble.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/assemble/assemble.xml	2010-02-02 07:58:01 UTC (rev 100244)
+++ projects/ejb3/trunk/package-manager/src/main/assemble/assemble.xml	2010-02-02 10:16:07 UTC (rev 100245)
@@ -3,7 +3,7 @@
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.1.1.xsd"
 >
-  <id>package-manager</id>
+  <id>installer</id>
   <formats>
     <format>tar.gz</format>
     <!-- <format>tar.bz2</format> -->

Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManager.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManager.java	2010-02-02 07:58:01 UTC (rev 100244)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManager.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -29,6 +29,9 @@
 import org.jboss.ejb3.packagemanager.db.PackageDatabaseManager;
 import org.jboss.ejb3.packagemanager.exception.PackageManagerException;
 import org.jboss.ejb3.packagemanager.exception.PackageNotInstalledException;
+import org.jboss.ejb3.packagemanager.option.InstallOptions;
+import org.jboss.ejb3.packagemanager.option.UnInstallOptions;
+import org.jboss.ejb3.packagemanager.option.UpgradeOptions;
 
 /**
  * PackageManager
@@ -58,11 +61,29 @@
    /**
     * Updates the package
     * 
+    * @param packagePath
+    * @param upgradeOptions
+    * @throws PackageManagerException
+    */
+   void updatePackage(String packagePath, UpgradeOptions upgradeOptions) throws PackageManagerException;
+   
+   /**
+    * Updates the package
+    * 
     * @param packageURL The URL of the package file
     */
    void updatePackage(URL packageURL) throws PackageManagerException;
    
    /**
+    * Updates the package
+    * 
+    * @param packageURL
+    * @param upgradeOptions
+    * @throws PackageManagerException
+    */
+   void updatePackage(URL packageURL, UpgradeOptions upgradeOptions) throws PackageManagerException;
+   
+   /**
     * Installs a package 
     * 
     * @param packagePath The URL path of the package file
@@ -71,6 +92,15 @@
    void installPackage(String packagePath) throws PackageManagerException;
    
    /**
+    * Installs a package
+    * 
+    * @param packagePath
+    * @param installOptions
+    * @throws PackageManagerException
+    */
+   void installPackage(String packagePath, InstallOptions installOptions) throws PackageManagerException;
+   
+   /**
     * Installs a package 
     * 
     * @param packageURL The URL of the package file
@@ -79,12 +109,31 @@
    void installPackage(URL packageURL) throws PackageManagerException;
    
    /**
+    * Installs a package
+    * 
+    * @param packageURL
+    * @param installOptions
+    * @throws PackageManagerException
+    */
+   void installPackage(URL packageURL, InstallOptions installOptions) throws PackageManagerException;
+   
+   /**
     * Removes a package using the name of the package
     * @param packageName Name of the package to be uninstalled
     */
    void removePackage(String packageName) throws PackageNotInstalledException, PackageManagerException;
    
    /**
+    * Removes a package
+    * 
+    * @param packageName
+    * @param uninstallOptions
+    * @throws PackageNotInstalledException
+    * @throws PackageManagerException
+    */
+   void removePackage(String packageName, UnInstallOptions uninstallOptions) throws PackageNotInstalledException, PackageManagerException;
+   
+   /**
     * Returns the names of all installed packages. Returns an empty set if there 
     * are no packages installed
     * 

Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerFactory.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerFactory.java	2010-02-02 07:58:01 UTC (rev 100244)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerFactory.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -21,12 +21,8 @@
 */
 package org.jboss.ejb3.packagemanager;
 
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
+import org.jboss.ejb3.packagemanager.impl.TransactionalPackageManager;
 
-import org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl;
-import org.jboss.ejb3.packagemanager.proxy.PackageManagerInvocationHandler;
-
 /**
  * PackageManagerFactory
  *
@@ -38,9 +34,12 @@
 
    public static PackageManager getDefaultPackageManager(PackageManagerEnvironment packageManagerEnv, String jbossHome)
    {
-      PackageManager pkgManager = new DefaultPackageManagerImpl(packageManagerEnv, jbossHome);
-      InvocationHandler packageManagerInvocationHandler = new PackageManagerInvocationHandler(pkgManager);
-      ClassLoader tccl = Thread.currentThread().getContextClassLoader();
-      return (PackageManager) Proxy.newProxyInstance(tccl, new Class[]{PackageManager.class}, packageManagerInvocationHandler);
+      return getTransactionalPackageManager(packageManagerEnv, jbossHome);
    }
+
+   public static PackageManager getTransactionalPackageManager(PackageManagerEnvironment packageManagerEnv,
+         String jbossHome)
+   {
+      return TransactionalPackageManager.createNewInstance(packageManagerEnv, jbossHome);
+   }
 }

Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerImpl.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerImpl.java	2010-02-02 07:58:01 UTC (rev 100244)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerImpl.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -28,7 +28,6 @@
 import java.util.List;
 import java.util.Set;
 
-import javax.transaction.Synchronization;
 import javax.transaction.TransactionManager;
 
 import org.jboss.ejb3.packagemanager.PackageContext;
@@ -36,8 +35,6 @@
 import org.jboss.ejb3.packagemanager.PackageManagerContext;
 import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
 import org.jboss.ejb3.packagemanager.PackageVersionComparator;
-import org.jboss.ejb3.packagemanager.annotation.TransactionAttribute;
-import org.jboss.ejb3.packagemanager.annotation.TransactionAttributeType;
 import org.jboss.ejb3.packagemanager.db.DefaultDatabaseManager;
 import org.jboss.ejb3.packagemanager.db.PackageDatabaseManager;
 import org.jboss.ejb3.packagemanager.entity.PersistentFile;
@@ -52,9 +49,14 @@
 import org.jboss.ejb3.packagemanager.metadata.PackagedDependency;
 import org.jboss.ejb3.packagemanager.metadata.ScriptType;
 import org.jboss.ejb3.packagemanager.metadata.UnProcessedDependenciesType;
+import org.jboss.ejb3.packagemanager.option.DefaultInstallOptions;
+import org.jboss.ejb3.packagemanager.option.DefaultUnInstallOptions;
+import org.jboss.ejb3.packagemanager.option.DefaultUpgradeOptions;
+import org.jboss.ejb3.packagemanager.option.InstallOptions;
+import org.jboss.ejb3.packagemanager.option.UnInstallOptions;
+import org.jboss.ejb3.packagemanager.option.UpgradeOptions;
 import org.jboss.ejb3.packagemanager.script.ScriptProcessor;
 import org.jboss.ejb3.packagemanager.script.impl.AntScriptProcessor;
-import org.jboss.ejb3.packagemanager.tx.TransactionManagerImpl;
 import org.jboss.ejb3.packagemanager.util.IOUtil;
 import org.jboss.logging.Logger;
 
@@ -64,7 +66,7 @@
  * @author Jaikiran Pai
  * @version $Revision: $
  */
-public class DefaultPackageManagerImpl implements PackageManager, Synchronization
+public class DefaultPackageManagerImpl implements PackageManager
 {
 
    /**
@@ -94,11 +96,6 @@
    private PackageDatabaseManager pkgDatabaseManager;
 
    /**
-    * Transaction manager
-    */
-   private TransactionManager transactionManager;
-
-   /**
     * Creates the default package manager for a server 
     * 
     * @param environment The package manager environment
@@ -109,7 +106,6 @@
       this.environment = environment;
       this.installationServerHome = jbossHome;
       this.pkgMgrCtx = new DefaultPackageManagerContext(this);
-      this.transactionManager = TransactionManagerImpl.getInstance();
       this.pkgDatabaseManager = new DefaultDatabaseManager(this.pkgMgrCtx);
    }
 
@@ -146,9 +142,31 @@
     * @see org.jboss.ejb3.packagemanager.PackageManager#installPackage(java.lang.String)
     */
    @Override
-   @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
    public void installPackage(String pkgPath) throws PackageManagerException
    {
+     this.installPackage(pkgPath, new DefaultInstallOptions());
+   }
+
+   /**
+    * Installs the package from the {@code packageURL}
+    * 
+    * @param packageURL The URL to the package that is to be installed
+    * @throws PackageManagerException If any exceptions occur during installation of the package
+    * @see org.jboss.ejb3.packagemanager.PackageManager#installPackage(URL)
+    * 
+    */
+   @Override
+   public void installPackage(URL packageURL) throws PackageManagerException
+   {
+      this.installPackage(packageURL, new DefaultInstallOptions());
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.PackageManager#installPackage(java.lang.String, org.jboss.ejb3.packagemanager.option.InstallOptions)
+    */
+   @Override
+   public void installPackage(String pkgPath, InstallOptions installOptions) throws PackageManagerException
+   {
       if (pkgPath == null)
       {
          throw new PackageManagerException("Package path is null");
@@ -162,20 +180,15 @@
       {
          throw new PackageManagerException("Cannot parse path " + pkgPath, mue);
       }
-      this.installPackage(packageURL);
+      this.installPackage(packageURL, installOptions);
+      
    }
-
+   
    /**
-    * Installs the package from the {@code packageURL}
-    * 
-    * @param packageURL The URL to the package that is to be installed
-    * @throws PackageManagerException If any exceptions occur during installation of the package
-    * @see org.jboss.ejb3.packagemanager.PackageManager#installPackage(URL)
-    * 
+    * @see org.jboss.ejb3.packagemanager.PackageManager#installPackage(java.net.URL, org.jboss.ejb3.packagemanager.option.InstallOptions)
     */
    @Override
-   @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
-   public void installPackage(URL packageURL) throws PackageManagerException
+   public void installPackage(URL packageURL, InstallOptions installOptions) throws PackageManagerException
    {
       if (packageURL == null)
       {
@@ -184,17 +197,16 @@
 
       // create a package context
       PackageContext pkgCtx = new DefaultPackageContext(this.pkgMgrCtx, packageURL);
-      this.installPackage(pkgCtx);
-
+      this.installPackage(pkgCtx, installOptions);
+      
    }
-
+   
    /**
     * 
     * @param pkgContext
     * @throws PackageManagerException
     */
-   @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
-   public void installPackage(PackageContext pkgContext) throws PackageManagerException
+   protected void installPackage(PackageContext pkgContext, InstallOptions installOptions) throws PackageManagerException
    {
       if (pkgContext == null)
       {
@@ -241,9 +253,18 @@
     * @see org.jboss.ejb3.packagemanager.PackageManager#removePackage(java.lang.String)
     */
    @Override
-   @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
    public void removePackage(String packageName) throws PackageNotInstalledException, PackageManagerException
    {
+      this.removePackage(packageName, new DefaultUnInstallOptions());
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.PackageManager#removePackage(java.lang.String, org.jboss.ejb3.packagemanager.option.UnInstallOptions)
+    */
+   @Override
+   public void removePackage(String packageName, UnInstallOptions uninstallOptions)
+         throws PackageNotInstalledException, PackageManagerException
+   {
       // get the installed package
       boolean isPackageInstalled = this.pkgDatabaseManager.isPackageInstalled(packageName);
       if (!isPackageInstalled)
@@ -252,15 +273,7 @@
       }
       PersistentPackage installedPackage = this.pkgDatabaseManager.getInstalledPackage(packageName);
 
-      this.removePackage(installedPackage, false);
-
-   }
-
-   protected void removePackage(PersistentPackage installedPackage, boolean forceRemove)
-         throws PackageNotInstalledException, PackageManagerException
-   {
-      String packageName = installedPackage.getPackageName();
-      if (!forceRemove)
+      if (!uninstallOptions.isForceUnInstall())
       {
          // check if other packages are dependent on this package
          // If yes, then do NOT remove this package. Else remove this package
@@ -284,15 +297,30 @@
       this.postUnInstallPackage(installedPackage);
       this.pkgDatabaseManager.removePackage(installedPackage);
       logger.info("Uninstalled " + packageName);
+      
    }
-
+   
    /**
     * @see org.jboss.ejb3.packagemanager.PackageManager#updatePackage(java.lang.String)
     */
    @Override
-   @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
    public void updatePackage(String packageFilePath) throws PackageManagerException
    {
+      this.updatePackage(packageFilePath, new DefaultUpgradeOptions());
+   }
+
+   @Override
+   public void updatePackage(URL packageURL) throws PackageManagerException
+   {
+      this.updatePackage(packageURL, new DefaultUpgradeOptions());
+   }
+   
+   /**
+    * @see org.jboss.ejb3.packagemanager.PackageManager#updatePackage(java.lang.String, org.jboss.ejb3.packagemanager.option.UpgradeOptions)
+    */
+   @Override
+   public void updatePackage(String packageFilePath, UpgradeOptions upgradeOptions) throws PackageManagerException
+   {
       if (packageFilePath == null)
       {
          throw new PackageManagerException("Package path is null");
@@ -306,12 +334,15 @@
       {
          throw new PackageManagerException("Cannot parse path " + packageFilePath, mue);
       }
-      this.updatePackage(packageURL);
+      this.updatePackage(packageURL, upgradeOptions);
+      
    }
 
+   /**
+    * @see org.jboss.ejb3.packagemanager.PackageManager#updatePackage(java.net.URL, org.jboss.ejb3.packagemanager.option.UpgradeOptions)
+    */
    @Override
-   @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
-   public void updatePackage(URL packageURL) throws PackageManagerException
+   public void updatePackage(URL packageURL, UpgradeOptions upgradeOptions) throws PackageManagerException
    {
       if (packageURL == null)
       {
@@ -320,11 +351,10 @@
 
       // create a package context
       PackageContext pkgCtx = new DefaultPackageContext(this.pkgMgrCtx, packageURL);
-      this.updatePackage(pkgCtx);
+      this.updatePackage(pkgCtx, upgradeOptions);      
    }
-
-   @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
-   public void updatePackage(PackageContext pkgContext) throws PackageManagerException
+   
+   protected void updatePackage(PackageContext pkgContext, UpgradeOptions upgradeOptions) throws PackageManagerException
    {
       String packageName = pkgContext.getPackageName();
       boolean isPackageInstalled = this.pkgDatabaseManager.isPackageInstalled(packageName);
@@ -337,9 +367,12 @@
          int versionComparison = comparator.compare(installedPackage.getPackageVersion(), pkgContext.getPackageVersion());
          if (versionComparison == 0)
          {
-            logger.info("Skipping package upgrade, since package with name " + packageName + " and version "
-                  + installedPackage.getPackageVersion() + " is already installed");
-            return;
+            if (!upgradeOptions.isForceUpgrade())
+            {
+               logger.info("Skipping package upgrade, since package with name " + packageName + " and version "
+                     + installedPackage.getPackageVersion() + " is already installed");
+               return;
+            }
          }
          else if (versionComparison > 0)
          {
@@ -351,10 +384,12 @@
          // this is a newer version, so continue with upgrade   
          logger.info("Upgrading package " + packageName + " from installed version " + installedPackage.getPackageVersion()
                + " to new version " + pkgContext.getPackageVersion());
-         removePackage(installedPackage, true);
+         UnInstallOptions uninstallOptions = new DefaultUnInstallOptions();
+         uninstallOptions.setForcedUnInstall(true);
+         removePackage(packageName, uninstallOptions);
       }
       // now install new version
-      this.installPackage(pkgContext);
+      this.installPackage(pkgContext, new DefaultInstallOptions());
 
    }
 
@@ -364,7 +399,7 @@
    @Override
    public TransactionManager getTransactionManager()
    {
-      return this.transactionManager;
+      return null;
    }
 
    /**
@@ -647,39 +682,13 @@
       for (PackageContext dependencyPackage : dependencies)
       {
          logger.info("Installing dependency package : " + dependencyPackage + " for dependent package: " + pkgContext);
-         this.updatePackage(dependencyPackage);
+         this.updatePackage(dependencyPackage, new DefaultUpgradeOptions());
       }
    }
 
-   /**
-    * @see javax.transaction.Synchronization#afterCompletion(int)
-    */
-   @Override
-   public void afterCompletion(int status)
-   {
-      if (this.pkgDatabaseManager instanceof Synchronization)
-      {
-         Synchronization dbManager = (Synchronization) this.pkgDatabaseManager;
-         dbManager.afterCompletion(status);
-      }
+   
 
-   }
-
    /**
-    * @see javax.transaction.Synchronization#beforeCompletion()
-    */
-   @Override
-   public void beforeCompletion()
-   {
-      if (this.pkgDatabaseManager instanceof Synchronization)
-      {
-         Synchronization dbManager = (Synchronization) this.pkgDatabaseManager;
-         dbManager.beforeCompletion();
-      }
-
-   }
-
-   /**
     * @see org.jboss.ejb3.packagemanager.PackageManager#getAllInstalledPackages()
     */
    @Override

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/TransactionalPackageManager.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/TransactionalPackageManager.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/TransactionalPackageManager.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -0,0 +1,227 @@
+package org.jboss.ejb3.packagemanager.impl;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+import java.net.URL;
+
+import javax.transaction.Synchronization;
+import javax.transaction.TransactionManager;
+
+import org.jboss.ejb3.packagemanager.PackageManager;
+import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
+import org.jboss.ejb3.packagemanager.annotation.TransactionAttribute;
+import org.jboss.ejb3.packagemanager.annotation.TransactionAttributeType;
+import org.jboss.ejb3.packagemanager.exception.PackageManagerException;
+import org.jboss.ejb3.packagemanager.exception.PackageNotInstalledException;
+import org.jboss.ejb3.packagemanager.option.InstallOptions;
+import org.jboss.ejb3.packagemanager.option.UnInstallOptions;
+import org.jboss.ejb3.packagemanager.option.UpgradeOptions;
+import org.jboss.ejb3.packagemanager.proxy.TransactionalPackageManagerInvocationHandler;
+import org.jboss.ejb3.packagemanager.tx.TransactionManagerImpl;
+import org.jboss.logging.Logger;
+
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+/**
+ * TransactionalPackageManager
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class TransactionalPackageManager extends DefaultPackageManagerImpl implements Synchronization
+{
+
+   /**
+    * Logger
+    */
+   private static Logger logger = Logger.getLogger(TransactionalPackageManager.class);
+
+   /**
+    * Transaction manager
+    */
+   private TransactionManager txManager;
+
+   /**
+    * 
+    * @param environment
+    * @param jbossHome
+    * @return
+    */
+   public static PackageManager createNewInstance(PackageManagerEnvironment environment, String jbossHome)
+   {
+      PackageManager packageManager = new TransactionalPackageManager(environment, jbossHome);
+      ClassLoader cl = Thread.currentThread().getContextClassLoader();
+      InvocationHandler invocationHandler = new TransactionalPackageManagerInvocationHandler(packageManager);
+      return (PackageManager) Proxy.newProxyInstance(cl, new Class[]
+      {PackageManager.class}, invocationHandler);
+   }
+
+   /**
+    * @param environment
+    * @param jbossHome
+    */
+   protected TransactionalPackageManager(PackageManagerEnvironment environment, String jbossHome)
+   {
+      super(environment, jbossHome);
+      this.txManager = TransactionManagerImpl.getInstance();
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#getTransactionManager()
+    */
+   @Override
+   public TransactionManager getTransactionManager()
+   {
+      return this.txManager;
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#installPackage(java.lang.String)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void installPackage(String pkgPath) throws PackageManagerException
+   {
+      super.installPackage(pkgPath);
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#installPackage(java.net.URL)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void installPackage(URL packageURL) throws PackageManagerException
+   {
+      super.installPackage(packageURL);
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#installPackage(java.lang.String, org.jboss.ejb3.packagemanager.option.InstallOptions)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void installPackage(String pkgPath, InstallOptions installOptions) throws PackageManagerException
+   {
+      super.installPackage(pkgPath, installOptions);
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#installPackage(java.net.URL, org.jboss.ejb3.packagemanager.option.InstallOptions)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void installPackage(URL packageURL, InstallOptions installOptions) throws PackageManagerException
+   {
+      super.installPackage(packageURL, installOptions);
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#updatePackage(java.lang.String)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void updatePackage(String packageFilePath) throws PackageManagerException
+   {
+      super.updatePackage(packageFilePath);
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#updatePackage(java.lang.String, org.jboss.ejb3.packagemanager.option.UpgradeOptions)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void updatePackage(String packageFilePath, UpgradeOptions upgradeOptions) throws PackageManagerException
+   {
+      super.updatePackage(packageFilePath, upgradeOptions);
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#updatePackage(java.net.URL)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void updatePackage(URL packageURL) throws PackageManagerException
+   {
+      super.updatePackage(packageURL);
+   }
+
+   /** 
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#updatePackage(java.net.URL, org.jboss.ejb3.packagemanager.option.UpgradeOptions)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void updatePackage(URL packageURL, UpgradeOptions upgradeOptions) throws PackageManagerException
+   {
+      super.updatePackage(packageURL, upgradeOptions);
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#removePackage(java.lang.String)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void removePackage(String packageName) throws PackageNotInstalledException, PackageManagerException
+   {
+      super.removePackage(packageName);
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl#removePackage(java.lang.String, org.jboss.ejb3.packagemanager.option.UnInstallOptions)
+    */
+   @Override
+   @TransactionAttribute(TransactionAttributeType.REQUIRED)
+   public void removePackage(String packageName, UnInstallOptions uninstallOptions)
+         throws PackageNotInstalledException, PackageManagerException
+   {
+      super.removePackage(packageName, uninstallOptions);
+   }
+
+   /**
+    * @see javax.transaction.Synchronization#afterCompletion(int)
+    */
+   @Override
+   public void afterCompletion(int status)
+   {
+      if (this.getDatabaseManager() instanceof Synchronization)
+      {
+         Synchronization dbManager = (Synchronization) this.getDatabaseManager();
+         dbManager.afterCompletion(status);
+      }
+
+   }
+
+   /**
+    * @see javax.transaction.Synchronization#beforeCompletion()
+    */
+   @Override
+   public void beforeCompletion()
+   {
+      if (this.getDatabaseManager() instanceof Synchronization)
+      {
+         Synchronization dbManager = (Synchronization) this.getDatabaseManager();
+         dbManager.beforeCompletion();
+      }
+
+   }
+
+}

Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Setup.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Setup.java	2010-02-02 07:58:01 UTC (rev 100244)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Setup.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -63,6 +63,7 @@
    {
       CmdLineParser cmdLineParser = new CmdLineParser();
       CmdLineParser.Option schemaFileCmdOption = cmdLineParser.addStringOption('f', "file");
+      CmdLineParser.Option packageManagerHomeCmdOption = cmdLineParser.addStringOption('p', "pmhome");
       
       try
       {
@@ -74,10 +75,8 @@
          printUsage();
          throw new PackageManagerException(e.getMessage());
       }
-      File currentDir = new File(".");
-      // Get the package manager home from system property. If not set, then defaults to
-      // current directory
-      String packageManagerHome = System.getProperty(Constants.PACKAGE_MANAGER_HOME_SYSTEM_PROPERTY, currentDir.getAbsolutePath());
+      // get package manager home
+      String packageManagerHome = (String) cmdLineParser.getOptionValue(packageManagerHomeCmdOption);
       if (packageManagerHome == null)
       {
          throw new PackageManagerException("Package manager home has not been set");

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultInstallOptions.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultInstallOptions.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultInstallOptions.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -0,0 +1,33 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.ejb3.packagemanager.option;
+
+/**
+ * DefaultInstallOptions
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class DefaultInstallOptions implements InstallOptions
+{
+
+}

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultUnInstallOptions.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultUnInstallOptions.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultUnInstallOptions.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -0,0 +1,58 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.ejb3.packagemanager.option;
+
+/**
+ * DefaultUnInstallOptions
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class DefaultUnInstallOptions implements UnInstallOptions
+{
+
+   private boolean forceUnInstall;
+   
+   public DefaultUnInstallOptions()
+   {
+      this.forceUnInstall = false;
+   }
+   
+   /**
+    * @see org.jboss.ejb3.packagemanager.option.UnInstallOptions#isForceUnInstall()
+    */
+   @Override
+   public boolean isForceUnInstall()
+   {
+      return this.forceUnInstall;
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.option.UnInstallOptions#setForcedUnInstall(boolean)
+    */
+   @Override
+   public void setForcedUnInstall(boolean force)
+   {
+      this.forceUnInstall = force;
+   }
+
+}

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultUpgradeOptions.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultUpgradeOptions.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/DefaultUpgradeOptions.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -0,0 +1,58 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.ejb3.packagemanager.option;
+
+/**
+ * DefaultUpgradeOptions
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class DefaultUpgradeOptions implements UpgradeOptions
+{
+
+   private boolean forceUpgrade;
+   
+   public DefaultUpgradeOptions()
+   {
+      this.forceUpgrade = true;
+   }
+   
+   /**
+    * @see org.jboss.ejb3.packagemanager.option.UpgradeOptions#isForceUpgrade()
+    */
+   @Override
+   public boolean isForceUpgrade()
+   {
+      return this.forceUpgrade;
+   }
+
+   /**
+    * @see org.jboss.ejb3.packagemanager.option.UpgradeOptions#setForcedUpgrade(boolean)
+    */
+   @Override
+   public void setForcedUpgrade(boolean force)
+   {
+      this.forceUpgrade = force;  
+   }
+
+}

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/InstallOptions.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/InstallOptions.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/InstallOptions.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -0,0 +1,33 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.ejb3.packagemanager.option;
+
+/**
+ * InstallOptions
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public interface InstallOptions extends PackageManagerOptions
+{
+
+}

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/PackageManagerOptions.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/PackageManagerOptions.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/PackageManagerOptions.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -0,0 +1,33 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.ejb3.packagemanager.option;
+
+/**
+ * PackageManagerOptions
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public interface PackageManagerOptions
+{
+
+}

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/UnInstallOptions.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/UnInstallOptions.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/UnInstallOptions.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -0,0 +1,35 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.ejb3.packagemanager.option;
+
+/**
+ * UnInstallOptions
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public interface UnInstallOptions extends PackageManagerOptions
+{
+   boolean isForceUnInstall();
+   
+   void setForcedUnInstall(boolean force);
+}

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/UpgradeOptions.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/UpgradeOptions.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/option/UpgradeOptions.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -0,0 +1,35 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.ejb3.packagemanager.option;
+
+/**
+ * UpgradeOptions
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public interface UpgradeOptions extends PackageManagerOptions
+{
+   boolean isForceUpgrade();
+
+   void setForcedUpgrade(boolean force);
+}

Deleted: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/PackageManagerInvocationHandler.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/PackageManagerInvocationHandler.java	2010-02-02 07:58:01 UTC (rev 100244)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/PackageManagerInvocationHandler.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -1,231 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/
-package org.jboss.ejb3.packagemanager.proxy;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
-import org.jboss.ejb3.packagemanager.PackageManager;
-import org.jboss.ejb3.packagemanager.annotation.TransactionAttribute;
-import org.jboss.ejb3.packagemanager.annotation.TransactionAttributeType;
-import org.jboss.logging.Logger;
-
-/**
- * PackageManagerInvocationHandler
- *
- * @author Jaikiran Pai
- * @version $Revision: $
- */
-public class PackageManagerInvocationHandler implements InvocationHandler
-{
-
-   /**
-    * Package manager
-    */
-   private PackageManager packageManager;
-
-   /**
-    * Logger
-    */
-   private static Logger logger = Logger.getLogger(PackageManagerInvocationHandler.class);
-
-   /**
-    * Constructs an invocation handler for a package manager
-    * @param packageManager
-    */
-   public PackageManagerInvocationHandler(PackageManager packageManager)
-   {
-      this.packageManager = packageManager;
-   }
-
-   /**
-    * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
-    */
-   @Override
-   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
-   {
-      TransactionAttribute txAnnotation = this.getTxAttribute(method);
-      // nothing special to do, just invoke 
-      if (txAnnotation == null)
-      {
-         return method.invoke(this.packageManager, args);
-      }
-      TransactionAttributeType txType = txAnnotation.value();
-      switch (txType)
-      {
-         case REQUIRED :
-            return this.invokeInCurrentTx(proxy, method, args);
-         case REQUIRES_NEW :
-            return this.invokeInNewTx(proxy, method, args);
-         default :
-            throw new RuntimeException("Unknow tx type " + txType);
-      }
-   }
-
-   private Object invokeInCurrentTx(Object proxy, Method method, Object[] args) throws Throwable
-   {
-      TransactionManager txManager = this.packageManager.getTransactionManager();
-      Transaction currentTx = txManager.getTransaction();
-      boolean txInitiator = false;
-      if (currentTx == null)
-      {
-         // start new tx
-         txManager.begin();
-         if (logger.isTraceEnabled())
-         {
-            logger.trace("Started tx " + txManager.getTransaction() + " for method " + method);
-         }
-         currentTx = txManager.getTransaction();
-         registerForSynchronization(txManager.getTransaction());
-         txInitiator = true;
-      }
-      try
-      {
-
-         Object result = method.invoke(this.packageManager, args);
-         if (txInitiator)
-         {
-            if (txManager.getStatus() == Status.STATUS_MARKED_ROLLBACK)
-            {
-               txManager.rollback();
-               if (logger.isTraceEnabled())
-               {
-                  logger.trace("Rolled back tx " + txManager.getTransaction() + " for method " + method);
-               }
-            }
-            else
-            {
-               txManager.commit();
-               if (logger.isTraceEnabled())
-               {
-                  logger.trace("Committed tx for method " + method);
-               }
-            }
-
-         }
-         return result;
-      }
-      catch (InvocationTargetException ite)
-      {
-         Throwable cause = ite.getCause();
-         if (!txInitiator)
-         {
-            txManager.setRollbackOnly();
-         }
-         else
-         {
-            txManager.rollback();
-         }
-
-         throw cause;
-      }
-
-   }
-
-   private Object invokeInNewTx(Object proxy, Method method, Object[] args) throws Throwable
-   {
-      TransactionManager txManager = this.packageManager.getTransactionManager();
-      Transaction currentTx = txManager.getTransaction();
-      try
-      {
-         if (currentTx != null)
-         {
-            // suspend current tx
-            txManager.suspend();
-            if (logger.isTraceEnabled())
-            {
-               logger.trace("Suspended tx " + txManager.getTransaction() + " for method " + method);
-            }
-         }
-         // start new tx and invoke the method
-         txManager.begin();
-         if (logger.isTraceEnabled())
-         {
-            logger.trace("Started tx " + txManager.getTransaction() + " for method " + method);
-         }
-         Transaction newTx = txManager.getTransaction();
-         registerForSynchronization(newTx);
-         try
-         {
-            Object result = method.invoke(this.packageManager, args);
-            if (newTx.getStatus() == Status.STATUS_MARKED_ROLLBACK)
-            {
-               // rollback
-               newTx.rollback();
-               if (logger.isTraceEnabled())
-               {
-                  logger.trace("Rolled back tx " + txManager.getTransaction() + " for method " + method);
-               }
-            }
-            else
-            {
-               // method successfully completed, so commit tx
-               newTx.commit();
-               if (logger.isTraceEnabled())
-               {
-                  logger.trace("Committed tx " + txManager.getTransaction() + " for method " + method);
-               }
-            }
-            return result;
-         }
-         catch (InvocationTargetException ite)
-         {
-            Throwable cause = ite.getCause();
-            // rollback the tx in which this method was invoked
-            newTx.rollback();
-            throw cause;
-         }
-      }
-      finally
-      {
-         if (currentTx != null)
-         {
-            txManager.resume(currentTx);
-         }
-      }
-
-   }
-
-   private TransactionAttribute getTxAttribute(Method method) throws SecurityException, NoSuchMethodException
-   {
-      Method methodOnPackageManagerImpl = this.packageManager.getClass().getMethod(method.getName(),
-            method.getParameterTypes());
-      return methodOnPackageManagerImpl.getAnnotation(TransactionAttribute.class);
-   }
-
-   private void registerForSynchronization(Transaction tx) throws IllegalStateException, RollbackException,
-         SystemException
-   {
-      if (this.packageManager instanceof Synchronization)
-      {
-         tx.registerSynchronization((Synchronization) this.packageManager);
-      }
-   }
-}

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/TransactionalPackageManagerInvocationHandler.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/TransactionalPackageManagerInvocationHandler.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/TransactionalPackageManagerInvocationHandler.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -0,0 +1,231 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.ejb3.packagemanager.proxy;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.transaction.RollbackException;
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
+import org.jboss.ejb3.packagemanager.PackageManager;
+import org.jboss.ejb3.packagemanager.annotation.TransactionAttribute;
+import org.jboss.ejb3.packagemanager.annotation.TransactionAttributeType;
+import org.jboss.logging.Logger;
+
+/**
+ * TransactionalPackageManagerInvocationHandler
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class TransactionalPackageManagerInvocationHandler implements InvocationHandler
+{
+
+   /**
+    * Package manager
+    */
+   private PackageManager packageManager;
+
+   /**
+    * Logger
+    */
+   private static Logger logger = Logger.getLogger(TransactionalPackageManagerInvocationHandler.class);
+
+   /**
+    * Constructs an invocation handler for a package manager
+    * @param packageManager
+    */
+   public TransactionalPackageManagerInvocationHandler(PackageManager packageManager)
+   {
+      this.packageManager = packageManager;
+   }
+
+   /**
+    * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
+    */
+   @Override
+   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
+   {
+      TransactionAttribute txAnnotation = this.getTxAttribute(method);
+      // nothing special to do, just invoke 
+      if (txAnnotation == null)
+      {
+         return method.invoke(this.packageManager, args);
+      }
+      TransactionAttributeType txType = txAnnotation.value();
+      switch (txType)
+      {
+         case REQUIRED :
+            return this.invokeInCurrentTx(proxy, method, args);
+         case REQUIRES_NEW :
+            return this.invokeInNewTx(proxy, method, args);
+         default :
+            throw new RuntimeException("Unknow tx type " + txType);
+      }
+   }
+
+   private Object invokeInCurrentTx(Object proxy, Method method, Object[] args) throws Throwable
+   {
+      TransactionManager txManager = this.packageManager.getTransactionManager();
+      Transaction currentTx = txManager.getTransaction();
+      boolean txInitiator = false;
+      if (currentTx == null)
+      {
+         // start new tx
+         txManager.begin();
+         if (logger.isTraceEnabled())
+         {
+            logger.trace("Started tx " + txManager.getTransaction() + " for method " + method);
+         }
+         currentTx = txManager.getTransaction();
+         registerForSynchronization(txManager.getTransaction());
+         txInitiator = true;
+      }
+      try
+      {
+
+         Object result = method.invoke(this.packageManager, args);
+         if (txInitiator)
+         {
+            if (txManager.getStatus() == Status.STATUS_MARKED_ROLLBACK)
+            {
+               txManager.rollback();
+               if (logger.isTraceEnabled())
+               {
+                  logger.trace("Rolled back tx " + txManager.getTransaction() + " for method " + method);
+               }
+            }
+            else
+            {
+               txManager.commit();
+               if (logger.isTraceEnabled())
+               {
+                  logger.trace("Committed tx for method " + method);
+               }
+            }
+
+         }
+         return result;
+      }
+      catch (InvocationTargetException ite)
+      {
+         Throwable cause = ite.getCause();
+         if (!txInitiator)
+         {
+            txManager.setRollbackOnly();
+         }
+         else
+         {
+            txManager.rollback();
+         }
+
+         throw cause;
+      }
+
+   }
+
+   private Object invokeInNewTx(Object proxy, Method method, Object[] args) throws Throwable
+   {
+      TransactionManager txManager = this.packageManager.getTransactionManager();
+      Transaction currentTx = txManager.getTransaction();
+      try
+      {
+         if (currentTx != null)
+         {
+            // suspend current tx
+            txManager.suspend();
+            if (logger.isTraceEnabled())
+            {
+               logger.trace("Suspended tx " + txManager.getTransaction() + " for method " + method);
+            }
+         }
+         // start new tx and invoke the method
+         txManager.begin();
+         if (logger.isTraceEnabled())
+         {
+            logger.trace("Started tx " + txManager.getTransaction() + " for method " + method);
+         }
+         Transaction newTx = txManager.getTransaction();
+         registerForSynchronization(newTx);
+         try
+         {
+            Object result = method.invoke(this.packageManager, args);
+            if (newTx.getStatus() == Status.STATUS_MARKED_ROLLBACK)
+            {
+               // rollback
+               newTx.rollback();
+               if (logger.isTraceEnabled())
+               {
+                  logger.trace("Rolled back tx " + txManager.getTransaction() + " for method " + method);
+               }
+            }
+            else
+            {
+               // method successfully completed, so commit tx
+               newTx.commit();
+               if (logger.isTraceEnabled())
+               {
+                  logger.trace("Committed tx " + txManager.getTransaction() + " for method " + method);
+               }
+            }
+            return result;
+         }
+         catch (InvocationTargetException ite)
+         {
+            Throwable cause = ite.getCause();
+            // rollback the tx in which this method was invoked
+            newTx.rollback();
+            throw cause;
+         }
+      }
+      finally
+      {
+         if (currentTx != null)
+         {
+            txManager.resume(currentTx);
+         }
+      }
+
+   }
+
+   private TransactionAttribute getTxAttribute(Method method) throws SecurityException, NoSuchMethodException
+   {
+      Method methodOnPackageManagerImpl = this.packageManager.getClass().getMethod(method.getName(),
+            method.getParameterTypes());
+      return methodOnPackageManagerImpl.getAnnotation(TransactionAttribute.class);
+   }
+
+   private void registerForSynchronization(Transaction tx) throws IllegalStateException, RollbackException,
+         SystemException
+   {
+      if (this.packageManager instanceof Synchronization)
+      {
+         tx.registerSynchronization((Synchronization) this.packageManager);
+      }
+   }
+}

Modified: projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/dependency/unit/DependencyInstallTestCase.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/dependency/unit/DependencyInstallTestCase.java	2010-02-02 07:58:01 UTC (rev 100244)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/dependency/unit/DependencyInstallTestCase.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -34,6 +34,7 @@
 import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.jboss.shrinkwrap.api.spec.JavaArchiveFactory;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -131,6 +132,7 @@
     * @throws Exception
     */
    @Test
+   @Ignore ("Temporarily disabled because this test requires a package to be available online and uses HTTP request to download it")
    public void testPackageWithUnProcessedDependencies() throws Exception
    {
       File dummyJar = this.createDummyJar();

Modified: projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/install/unit/BasicInstallTestCase.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/install/unit/BasicInstallTestCase.java	2010-02-02 07:58:01 UTC (rev 100244)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/install/unit/BasicInstallTestCase.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -30,6 +30,7 @@
 import org.jboss.ejb3.packagemanager.test.common.PackageManagerTestCase;
 import org.jboss.logging.Logger;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -159,6 +160,7 @@
     * @throws Exception
     */
    @Test
+   @Ignore ("Temporarily disabled because this test requires a package to be available online and uses HTTP request to download it")
    public void testHttpPackageInstall() throws Exception
    {
       // TODO: See javadocs of this test. This URL will change in near future

Modified: projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/upgrade/unit/UpgradeUnitTestCase.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/upgrade/unit/UpgradeUnitTestCase.java	2010-02-02 07:58:01 UTC (rev 100244)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/upgrade/unit/UpgradeUnitTestCase.java	2010-02-02 10:16:07 UTC (rev 100245)
@@ -162,11 +162,8 @@
       this.assertFileExistenceUnderJBossHome(jbossHome, "server/default/lib/dummy.jar");
       this.assertFileExistenceUnderJBossHome(jbossHome, "common/lib/dummy.jar");
       
-      // now upgrade. Note that even though we are upgrading to a different
-      // package contents, this upgrade will be skipped and the contents installed
-      // previously by this package will stay.
-      File simplePackage = this.createSimplePackage("upgrade-to-same-version", "1.0.0-beta-1");
-      this.pkgMgr.updatePackage(simplePackage.getAbsolutePath());
+      // now upgrade to same version.
+      this.pkgMgr.updatePackage(simplePackageWithDependency.getAbsolutePath());
       
       // ensure that the upgrade did not result in loss of installed files
       this.assertFileExistenceUnderJBossHome(jbossHome, "server/default/lib/dummy.jar");




More information about the jboss-cvs-commits mailing list