[jboss-cvs] JBossAS SVN: r96233 - in projects/ejb3/trunk/package-manager: src/main/java/org/jboss/ejb3/packagemanager and 27 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Nov 10 15:54:12 EST 2009
Author: jaikiran
Date: 2009-11-10 15:54:11 -0500 (Tue, 10 Nov 2009)
New Revision: 96233
Added:
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/annotation/
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/annotation/TransactionAttribute.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/annotation/TransactionAttributeType.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PostUnInstallScript.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PreUnInstallScript.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/Script.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PostUnInstallType.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PreUnInstallType.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostUnInstallImpl.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostUnInstallScript.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreUnInstallImpl.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreUninstallScript.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/
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/tx/
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/tx/JBossJTABasedTransactionManagerLookup.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/tx/TransactionManagerImpl.java
projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/upgrade/
projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/upgrade/unit/
projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/upgrade/unit/UpgradeUnitTestCase.java
projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-post-install-script.xml
projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-post-uninstall-script.xml
projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-pre-uninstall-script.xml
Modified:
projects/ejb3/trunk/package-manager/pom.xml
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageContext.java
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/PackageManagerContext.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerEnvironment.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/DefaultDatabaseManager.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/PackageDatabaseManager.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/InstalledPackage.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageContext.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerContext.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/installer/AbstractInstaller.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Main.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PackageInstallationPhase.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PackageType.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PostInstallType.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PreInstallType.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/ScriptType.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PackageImpl.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostInstallImpl.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostInstallScript.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreInstallImpl.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreInstallScript.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/ScriptImpl.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/script/ScriptProcessor.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/script/impl/AntScriptProcessor.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/util/IOUtil.java
projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/xml/PackageUnmarshaller.java
projects/ejb3/trunk/package-manager/src/main/resources/META-INF/persistence.xml
projects/ejb3/trunk/package-manager/src/main/resources/log4j.xml
projects/ejb3/trunk/package-manager/src/main/resources/package.xsd
projects/ejb3/trunk/package-manager/src/main/resources/schema.sql
projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/commandline/unit/CommandLineTestCase.java
projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/PackageManagerTestCase.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/uninstall/unit/UnInstallTestCase.java
projects/ejb3/trunk/package-manager/src/test/resources/log4j.xml
projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/build.xml
projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-pre-install-script.xml
projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package1.xml
projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package2.xml
projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package3.xml
Log:
EJBTHREE-1942 * Added support for transactions * Support for pre/post uninstall scripts * Better DB interaction
Modified: projects/ejb3/trunk/package-manager/pom.xml
===================================================================
--- projects/ejb3/trunk/package-manager/pom.xml 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/pom.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -208,6 +208,23 @@
<scope>runtime</scope>
</dependency>
+ <!-- Tx support -->
+ <dependency>
+ <groupId>jboss.jbossts</groupId>
+ <artifactId>jbossjta</artifactId>
+ <version>4.4.0.GA</version>
+ </dependency>
+ <dependency>
+ <groupId>jboss.jbossts</groupId>
+ <artifactId>jbossjts</artifactId>
+ <version>4.4.0.GA</version>
+ </dependency>
+
+ <dependency>
+ <groupId>jboss.jbossts</groupId>
+ <artifactId>jbossts-common</artifactId>
+ <version>4.4.0.GA</version>
+ </dependency>
<!-- Tests -->
<dependency>
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageContext.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageContext.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageContext.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -29,6 +29,10 @@
import org.jboss.ejb3.packagemanager.metadata.InstallFileType;
import org.jboss.ejb3.packagemanager.metadata.ScriptType;
import org.jboss.ejb3.packagemanager.metadata.SystemRequirementsType;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostUnInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreUninstallScript;
/**
* PackageContext
@@ -53,8 +57,16 @@
*/
File getPackageRoot();
+ /**
+ * Returns the name of the package
+ * @return
+ */
String getPackageName();
+ /**
+ * Returns the version of the package
+ * @return
+ */
String getPackageVersion();
/**
@@ -63,11 +75,40 @@
*/
Set<PackageContext> getDependencyPackages();
+ /**
+ * Returns the system requirements of this package
+ * @return
+ */
SystemRequirementsType getSystemRequirements();
- List<ScriptType> getPostInstallScripts();
+ /**
+ * Returns the post-install scripts
+ * @return
+ */
+ List<PostInstallScript> getPostInstallScripts();
- List<ScriptType> getPreInstallScripts();
+ /**
+ * Returns the pre-install scripts
+ * @return
+ */
+ List<PreInstallScript> getPreInstallScripts();
+ /**
+ * Returns the files to be installed by this package
+ * @return
+ */
List<InstallFileType> getInstallationFiles();
+
+ /**
+ * Returns the pre-uninstall scripts
+ * @return
+ */
+ List<PreUninstallScript> getPreUnInstallScripts();
+
+ /**
+ * Returns the post-uninstall scripts
+ * @return
+ */
+ List<PostUnInstallScript> getPostUnInstallScripts();
+
}
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 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManager.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -23,6 +23,8 @@
import java.net.URL;
+import javax.transaction.TransactionManager;
+
import org.jboss.ejb3.packagemanager.exception.PackageManagerException;
import org.jboss.ejb3.packagemanager.exception.PackageNotInstalledException;
@@ -88,4 +90,8 @@
* @return Returns the JBoss Server Home
*/
String getServerHome();
+
+ TransactionManager getTransactionManager();
+
+
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerContext.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerContext.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerContext.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -22,7 +22,9 @@
package org.jboss.ejb3.packagemanager;
+import org.jboss.ejb3.packagemanager.metadata.ScriptType;
+
/**
* Author: Jaikiran Pai
*/
@@ -42,4 +44,14 @@
*/
String getJBossServerHome();
+ /**
+ * Returns the location (relative to the package manager home) where the script files
+ * of the package corresponding to the <code>pkgContext</code> is persisted.
+ * Persistent script files can be used during uninstallation of packages.
+ *
+ * @param pkgContext Package context, whose script location is required
+ * @return
+ */
+ String getScriptStoreLocation(PackageContext pkgContext);
+
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerEnvironment.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerEnvironment.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerEnvironment.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -40,6 +40,10 @@
private File packageManagerBuildDir;
private File packageManagerTmpDir;
+
+ private File packageManagerScriptStoreDir;
+
+ private File packageManagerDataDir;
private Map<String, String> properties = new HashMap<String, String>();
@@ -76,7 +80,16 @@
{
this.packageManagerTmpDir.mkdirs();
}
-
+ this.packageManagerDataDir = new File(packageManagerHome, "data");
+ if (!this.packageManagerDataDir.exists())
+ {
+ this.packageManagerDataDir.mkdirs();
+ }
+ this.packageManagerScriptStoreDir = new File(packageManagerDataDir, "scripts");
+ if (!this.packageManagerScriptStoreDir.exists())
+ {
+ this.packageManagerScriptStoreDir.mkdirs();
+ }
}
public File getPackageManagerHome()
@@ -93,6 +106,16 @@
{
return this.packageManagerTmpDir;
}
+
+ public File getDataDir()
+ {
+ return this.packageManagerDataDir;
+ }
+
+ public File getScriptStoreDir()
+ {
+ return this.packageManagerScriptStoreDir;
+ }
public String getProperty(String propertyName)
{
Added: 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 (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerFactory.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,46 @@
+/*
+* 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;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+
+import org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl;
+import org.jboss.ejb3.packagemanager.proxy.PackageManagerInvocationHandler;
+
+/**
+ * PackageManagerFactory
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class PackageManagerFactory
+{
+
+ 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);
+ }
+}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/annotation/TransactionAttribute.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/annotation/TransactionAttribute.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/annotation/TransactionAttribute.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,40 @@
+/*
+* 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.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * TransactionAttribute
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+ at Target({ElementType.METHOD})
+ at Retention(RetentionPolicy.RUNTIME)
+public @interface TransactionAttribute
+{
+ TransactionAttributeType value() default TransactionAttributeType.REQUIRED;
+}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/annotation/TransactionAttributeType.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/annotation/TransactionAttributeType.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/annotation/TransactionAttributeType.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,34 @@
+/*
+* 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.annotation;
+
+/**
+ * TransactionAttributeType
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public enum TransactionAttributeType
+{
+ REQUIRED,
+ REQUIRES_NEW
+}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/DefaultDatabaseManager.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/DefaultDatabaseManager.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/DefaultDatabaseManager.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -29,9 +29,9 @@
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
+import javax.transaction.Synchronization;
import org.jboss.ejb3.packagemanager.PackageContext;
import org.jboss.ejb3.packagemanager.PackageManagerContext;
@@ -40,9 +40,12 @@
import org.jboss.ejb3.packagemanager.entity.InstalledPackage;
import org.jboss.ejb3.packagemanager.entity.PackageDependency;
import org.jboss.ejb3.packagemanager.entity.PackageManagerEntity;
+import org.jboss.ejb3.packagemanager.entity.PreUnInstallScript;
import org.jboss.ejb3.packagemanager.exception.PackageManagerException;
import org.jboss.ejb3.packagemanager.exception.PackageNotInstalledException;
import org.jboss.ejb3.packagemanager.metadata.InstallFileType;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostUnInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreUninstallScript;
import org.jboss.logging.Logger;
/**
@@ -51,7 +54,7 @@
* @author Jaikiran Pai
* @version $Revision: $
*/
-public class DefaultDatabaseManager implements PackageDatabaseManager
+public class DefaultDatabaseManager implements PackageDatabaseManager, Synchronization
{
/**
* Logger
@@ -79,13 +82,14 @@
this.packageManagerCtx = pkgMgrCtx;
PackageManagerEnvironment environment = pkgMgrCtx.getPackageManagerEnvironment();
// we use derby (filesystem) based DB
- File dbHome = new File(environment.getPackageManagerHome(), "data");
+ File dbHome = environment.getDataDir();
if (!dbHome.exists())
{
dbHome.mkdirs();
}
// set the Derby system home property to point to the package manager db
System.setProperty("derby.system.home", dbHome.getAbsolutePath());
+
logger.info("Package manager DB home set to " + System.getProperty("derby.system.home"));
this.entityMgrFactory = Persistence.createEntityManagerFactory("default");
@@ -100,10 +104,8 @@
if (packageManagers == null || packageManagers.isEmpty())
{
PackageManagerEntity pm = new PackageManagerEntity(pkgMgrCtx);
- EntityTransaction tx = em.getTransaction();
- tx.begin();
em.persist(pm);
- tx.commit();
+
return pm;
}
else if (packageManagers.size() > 1)
@@ -124,8 +126,8 @@
public InstalledPackage installPackage(PackageContext pkgCtx)
{
EntityManager em = this.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- tx.begin();
+ // EntityTransaction tx = em.getTransaction();
+ // tx.begin();
PackageManagerEntity packageManager = this.getOrCreatePackageManagerEntity(this.packageManagerCtx);
InstalledPackage newlyInstalledPackage;
@@ -138,21 +140,9 @@
throw new RuntimeException(pme);
}
- try
- {
- em.persist(newlyInstalledPackage);
- tx.commit();
- logger.info("Recorded installation of package " + pkgCtx + " to database");
- return newlyInstalledPackage;
-
- }
- catch (Exception e)
- {
- tx.rollback();
- this.removeEntityManager(em);
- throw new RuntimeException(e);
- }
-
+ em.persist(newlyInstalledPackage);
+ logger.info("Recorded installation of package " + pkgCtx + " to database");
+ return newlyInstalledPackage;
}
/**
@@ -214,7 +204,8 @@
* @return
* @throws PackageManagerException
*/
- private InstalledPackage createPackage(PackageManagerEntity pkgMgrEntity, PackageContext pkgCtx) throws PackageManagerException
+ private InstalledPackage createPackage(PackageManagerEntity pkgMgrEntity, PackageContext pkgCtx)
+ throws PackageManagerException
{
InstalledPackage newPackage = new InstalledPackage(pkgMgrEntity, pkgCtx.getPackageName(), pkgCtx
.getPackageVersion());
@@ -222,21 +213,43 @@
List<InstallFileType> files = pkgCtx.getInstallationFiles();
if (files != null)
{
- Set<InstalledFile> installationFilesForNewPackage = new HashSet<InstalledFile>(files.size());
- newPackage.setInstallationFiles(installationFilesForNewPackage);
-
for (InstallFileType file : files)
{
InstalledFile installationFile = new InstalledFile(file.getName(), file.getDestPath());
- installationFile.setPkg(newPackage);
if (file.getType() != null)
{
installationFile.setFileType(file.getType().toString());
}
- installationFilesForNewPackage.add(installationFile);
+ newPackage.addInstallationFile(installationFile);
+ installationFile.setPkg(newPackage);
+
}
}
+ String relativePathToScriptStore = this.packageManagerCtx.getScriptStoreLocation(pkgCtx);
+ List<PreUninstallScript> preUnInstallScripts = pkgCtx.getPreUnInstallScripts();
+ if (preUnInstallScripts != null)
+ {
+ for (PreUninstallScript script : preUnInstallScripts)
+ {
+ String scriptName = script.getName();
+ PreUnInstallScript preUnInstallScript = new PreUnInstallScript(newPackage, scriptName,
+ relativePathToScriptStore);
+ newPackage.addPreUnInstallScript(preUnInstallScript);
+ }
+ }
+ List<PostUnInstallScript> postUnInstallScripts = pkgCtx.getPostUnInstallScripts();
+ if (postUnInstallScripts != null)
+ {
+ for (PostUnInstallScript script : postUnInstallScripts)
+ {
+ String scriptName = script.getName();
+ org.jboss.ejb3.packagemanager.entity.PostUnInstallScript postUnInstallScript = new org.jboss.ejb3.packagemanager.entity.PostUnInstallScript(
+ newPackage, scriptName, relativePathToScriptStore);
+ newPackage.addPostUnInstallScript(postUnInstallScript);
+ }
+ }
+
Set<PackageContext> dependencyPackages = pkgCtx.getDependencyPackages();
if (dependencyPackages != null)
{
@@ -258,54 +271,6 @@
}
/**
- * @throws PackageNotInstalledException
- * @see org.jboss.ejb3.packagemanager.db.PackageDatabaseManager#upgradePackage(org.jboss.ejb3.packagemanager.entity.InstalledPackage, org.jboss.ejb3.packagemanager.entity.InstalledPackage)
- */
- public InstalledPackage upgradePackage(PackageContext packageToUpgrade) throws PackageNotInstalledException
- {
- // 1) get all packages which were dependent on the previous version of the package
- // 2) remove the earlier version of this package being upgraded
- // 3) save this new version
- // 4) Update the dependent packages to refer this newer version
- String packageName = packageToUpgrade.getPackageName();
- InstalledPackage existingVersionOfPackage = this.getInstalledPackage(packageName);
-
- Set<InstalledPackage> dependentPackages = this.getDependentPackages(packageName);
- EntityManager em = this.getEntityManager();
- // break the link with the previous version of the package
- if (dependentPackages != null && !dependentPackages.isEmpty())
- {
- for (InstalledPackage dependentPackage : dependentPackages)
- {
- dependentPackage.removeDependency(existingVersionOfPackage);
- em.persist(dependentPackage);
- }
-
- }
-
- // remove the package being upgraded
- this.removePackage(existingVersionOfPackage);
-
- // install this newer version
- InstalledPackage upgradedPackage = this.installPackage(packageToUpgrade);
- if (dependentPackages != null && !dependentPackages.isEmpty())
- {
- // create a new link/dependency on the new version of the package
- for (InstalledPackage dependentPackage : dependentPackages)
- {
- PackageDependency dependency = new PackageDependency();
- dependency.setDependeePackage(upgradedPackage);
- dependency.setDependentPackage(dependentPackage);
- dependentPackage.addDependency(dependency);
- em.persist(dependentPackage);
- }
-
- }
- // return the upgraded package
- return upgradedPackage;
- }
-
- /**
* @see org.jboss.ejb3.packagemanager.db.PackageDatabaseManager#removePackage(java.lang.String)
*/
@Override
@@ -332,41 +297,42 @@
em = this.entityMgrFactory.createEntityManager();
currentEntityManager.set(em);
}
+
return em;
}
/**
- * TODO: Revisit this
- * @param em
+ * @see org.jboss.ejb3.packagemanager.db.PackageDatabaseManager#removePackage(org.jboss.ejb3.packagemanager.entity.InstalledPackage)
*/
- private void removeEntityManager(EntityManager em)
+ @Override
+ public void removePackage(InstalledPackage installedPackage)
{
- em.close();
+ EntityManager em = this.getEntityManager();
+ //EntityTransaction tx = em.getTransaction();
+ //tx.begin();
+ installedPackage = em.merge(installedPackage);
+ em.remove(installedPackage);
+ // tx.commit();
+ logger.info("Deleted installed package = " + installedPackage.getPackageName());
+
+ }
+
+ /**
+ * @see javax.transaction.Synchronization#afterCompletion(int)
+ */
+ @Override
+ public void afterCompletion(int status)
+ {
currentEntityManager.set(null);
}
/**
- * @see org.jboss.ejb3.packagemanager.db.PackageDatabaseManager#removePackage(org.jboss.ejb3.packagemanager.entity.InstalledPackage)
+ * @see javax.transaction.Synchronization#beforeCompletion()
*/
@Override
- public void removePackage(InstalledPackage installedPackage)
+ public void beforeCompletion()
{
- EntityManager em = this.getEntityManager();
- EntityTransaction tx = em.getTransaction();
- tx.begin();
- try
- {
- installedPackage = em.merge(installedPackage);
- em.remove(installedPackage);
- tx.commit();
- logger.info("Deleted installed package = " + installedPackage.getPackageName());
- }
- catch (Exception e)
- {
- // tx.rollback();
- this.removeEntityManager(em);
- throw new RuntimeException(e);
- }
+ // TODO Auto-generated method stub
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/PackageDatabaseManager.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/PackageDatabaseManager.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/PackageDatabaseManager.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -100,4 +100,6 @@
* @param installedPackage The package which has been installed
*/
void removePackage(InstalledPackage installedPackage);
+
+
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/InstalledPackage.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/InstalledPackage.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/InstalledPackage.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -32,6 +32,8 @@
import javax.persistence.OneToMany;
import javax.persistence.Table;
+import org.hibernate.annotations.ForceDiscriminator;
+
/**
* Package
*
@@ -48,13 +50,19 @@
private String version;
- @OneToMany(mappedBy = "dependentPackage", cascade=CascadeType.ALL)
+ @OneToMany(mappedBy = "dependentPackage", cascade = CascadeType.ALL)
private Set<PackageDependency> dependencies;
@OneToMany(mappedBy = "pkg", cascade = CascadeType.ALL)
private Set<InstalledFile> installationFiles;
- @ManyToOne
+ @OneToMany(mappedBy = "installedPkg", cascade = CascadeType.ALL)
+ private Set<PreUnInstallScript> preUnInstallScripts;
+
+ @OneToMany(mappedBy = "installedPkg", cascade = CascadeType.ALL)
+ private Set<PostUnInstallScript> postUnInstallScripts;
+
+ @ManyToOne
@JoinColumn(name = "package_manager_id")
private PackageManagerEntity packageManager;
@@ -70,7 +78,6 @@
this.version = packageVersion;
}
-
public String getPackageName()
{
return this.name;
@@ -90,7 +97,55 @@
{
this.installationFiles = installationFiles;
}
+
+ public void addInstallationFile(InstalledFile file)
+ {
+ if (this.installationFiles == null)
+ {
+ this.installationFiles = new HashSet<InstalledFile>();
+ }
+ this.installationFiles.add(file);
+ }
+ public Set<PreUnInstallScript> getPreUnInstallScripts()
+ {
+ return this.preUnInstallScripts;
+ }
+
+ public void setPreUnInstallScript(Set<PreUnInstallScript> preUnInstallScripts)
+ {
+ this.preUnInstallScripts = preUnInstallScripts;
+ }
+
+ public void addPreUnInstallScript(PreUnInstallScript preUnInstallScrtipt)
+ {
+ if (this.preUnInstallScripts == null)
+ {
+ this.preUnInstallScripts = new HashSet<PreUnInstallScript>();
+ }
+ this.preUnInstallScripts.add(preUnInstallScrtipt);
+ }
+
+ public Set<PostUnInstallScript> getPostUnInstallScripts()
+ {
+ return this.postUnInstallScripts;
+ }
+
+ public void setPostUnInstallScript(Set<PostUnInstallScript> postUnInstallScripts)
+ {
+ this.postUnInstallScripts = postUnInstallScripts;
+ }
+
+ public void addPostUnInstallScript(PostUnInstallScript postUnInstallScript)
+ {
+ if (this.postUnInstallScripts == null)
+ {
+ this.postUnInstallScripts = new HashSet<PostUnInstallScript>();
+ }
+ this.postUnInstallScripts.add(postUnInstallScript);
+
+ }
+
public PackageManagerEntity getPackageManager()
{
return packageManager;
@@ -110,7 +165,7 @@
{
this.dependencies = dependencies;
}
-
+
public void addDependency(PackageDependency dependency)
{
if (this.dependencies == null)
@@ -119,7 +174,7 @@
}
this.dependencies.add(dependency);
}
-
+
public void addDependencies(Set<PackageDependency> dependencies)
{
if (this.dependencies == null)
@@ -128,7 +183,7 @@
}
this.dependencies.addAll(dependencies);
}
-
+
public void removeDependency(PackageDependency dependency)
{
if (this.dependencies == null)
@@ -137,8 +192,7 @@
}
this.dependencies.remove(dependency);
}
-
-
+
public void removeDependency(InstalledPackage dependencyPackage)
{
if (this.dependencies == null)
@@ -153,10 +207,9 @@
this.dependencies.remove(dependency);
}
}
-
+
}
-
-
+
/**
* @see java.lang.Object#equals(java.lang.Object)
*/
@@ -172,8 +225,8 @@
return false;
}
InstalledPackage otherPackge = (InstalledPackage) obj;
- return this.name == otherPackge.name;
-
+ return this.name == otherPackge.name;
+
}
/**
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PostUnInstallScript.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PostUnInstallScript.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PostUnInstallScript.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,80 @@
+/*
+* 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.entity;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * PostUnInstallScript
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+ at Entity
+ at DiscriminatorValue(value="post-uninstall")
+public class PostUnInstallScript extends Script
+{
+
+ // Bad! Hibernate wants this here, instead of on the super class.
+ // If this field is made available in the super class, and then
+ // there's a one-to-many mapping to this PostUnInstallScript, then
+ // you run into:
+ // Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property:
+ // org.jboss.ejb3.packagemanager.entity.PostUnInstallScript.installedPkg
+ // in org.jboss.ejb3.packagemanager.entity.InstalledPackage.postUnInstallScripts
+ @ManyToOne
+ @JoinColumn(name="package_name")
+ protected InstalledPackage installedPkg;
+
+ private PostUnInstallScript()
+ {
+ //for jpa
+ }
+
+ public PostUnInstallScript(String fileName, String path)
+ {
+ super(fileName, path);
+ }
+
+ /**
+ * @param pkg
+ * @param scriptFile
+ */
+ public PostUnInstallScript(InstalledPackage pkg, String fileName, String path)
+ {
+ super(fileName, path);
+ this.installedPkg = pkg;
+ }
+
+ public InstalledPackage getInstalledPkg()
+ {
+ return installedPkg;
+ }
+
+ public void setInstalledPkg(InstalledPackage installedPkg)
+ {
+ this.installedPkg = installedPkg;
+ }
+}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PreUnInstallScript.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PreUnInstallScript.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PreUnInstallScript.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,80 @@
+/*
+* 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.entity;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+/**
+ * PreUnInstallScript
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+ at Entity
+ at DiscriminatorValue(value = "pre-uninstall")
+public class PreUnInstallScript extends Script
+{
+
+ // Bad! Hibernate wants this here, instead of on the super class.
+ // If this field is made available in the super class, and then
+ // there's a one-to-many mapping to this PostUnInstallScript, then
+ // you run into:
+ // Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property:
+ // org.jboss.ejb3.packagemanager.entity.PostUnInstallScript.installedPkg
+ // in org.jboss.ejb3.packagemanager.entity.InstalledPackage.postUnInstallScripts
+ @ManyToOne
+ @JoinColumn(name = "package_name")
+ protected InstalledPackage installedPkg;
+
+ private PreUnInstallScript()
+ {
+ // for jpa
+ }
+
+ public PreUnInstallScript(String fileName, String path)
+ {
+ super(fileName, path);
+ }
+
+ /**
+ * @param pkg
+ * @param scriptFile
+ */
+ public PreUnInstallScript(InstalledPackage pkg, String fileName, String path)
+ {
+ super(fileName, path);
+ this.installedPkg = pkg;
+ }
+
+ public InstalledPackage getInstalledPkg()
+ {
+ return installedPkg;
+ }
+
+ public void setInstalledPkg(InstalledPackage installedPkg)
+ {
+ this.installedPkg = installedPkg;
+ }
+}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/Script.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/Script.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/Script.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,123 @@
+/*
+* 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.entity;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.ForceDiscriminator;
+
+/**
+ * Script
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+ at Entity
+ at Table (name="script")
+ at Inheritance (strategy=InheritanceType.SINGLE_TABLE)
+ at DiscriminatorColumn (name="scriptType")
+// Hibernate specific issue - Without the "ForcedDiscriminator" annotation
+// it fetches both pre-uninstall/post-uninstall scripts in the set maintained in InstalledPackage
+// OneToMany association. (i.e. if ForceDiscriminator is not used,
+// thenHibernate does not use the discriminator column in the where clause which fetching the set,
+// it just uses the join column). See https://forum.hibernate.org/viewtopic.php?t=961213
+ at ForceDiscriminator
+public abstract class Script
+{
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ protected long id;
+
+ protected String name;
+
+ protected String path;
+
+
+
+ protected Script()
+ {
+ // for jpa
+ }
+
+ protected Script(String fileName, String path)
+ {
+ this.name = fileName;
+ this.path = path;
+ }
+
+
+ public long getId()
+ {
+ return id;
+ }
+
+ public void setId(long id)
+ {
+ this.id = id;
+ }
+
+ public String getScriptFile()
+ {
+ return name;
+ }
+
+ public void setScriptFile(String scriptFile)
+ {
+ this.name = scriptFile;
+ }
+
+
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public String getPath()
+ {
+ return path;
+ }
+
+ public void setPath(String path)
+ {
+ this.path = path;
+ }
+
+
+
+
+}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageContext.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageContext.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageContext.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -43,10 +43,15 @@
import org.jboss.ejb3.packagemanager.metadata.PackageType;
import org.jboss.ejb3.packagemanager.metadata.PackagedDependency;
import org.jboss.ejb3.packagemanager.metadata.PostInstallType;
+import org.jboss.ejb3.packagemanager.metadata.PostUnInstallType;
import org.jboss.ejb3.packagemanager.metadata.PreInstallType;
-import org.jboss.ejb3.packagemanager.metadata.ScriptType;
+import org.jboss.ejb3.packagemanager.metadata.PreUnInstallType;
import org.jboss.ejb3.packagemanager.metadata.SystemRequirementsType;
import org.jboss.ejb3.packagemanager.metadata.UnProcessedDependenciesType;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostUnInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreUninstallScript;
import org.jboss.ejb3.packagemanager.retriever.PackageRetriever;
import org.jboss.ejb3.packagemanager.retriever.impl.PackageRetrievalFactory;
import org.jboss.ejb3.packagemanager.util.IOUtil;
@@ -127,7 +132,6 @@
return this.packageRoot;
}
-
public PackageType getPackage()
{
return this.pkg;
@@ -142,7 +146,7 @@
return this.dependencyPackages;
}
-
+
/**
* @see org.jboss.ejb3.packagemanager.PackageContext#getInstallationFiles()
*/
@@ -174,34 +178,34 @@
* @see org.jboss.ejb3.packagemanager.PackageContext#getPostInstallScripts()
*/
@Override
- public List<ScriptType> getPostInstallScripts()
+ public List<PostInstallScript> getPostInstallScripts()
{
PostInstallType postInstall = this.pkg.getPostInstall();
if (postInstall == null)
{
return Collections.EMPTY_LIST;
}
- List<ScriptType> postInstallScripts = postInstall.getScripts();
+ List<PostInstallScript> postInstallScripts = postInstall.getScripts();
if (postInstallScripts == null)
{
return Collections.EMPTY_LIST;
}
return Collections.unmodifiableList(postInstallScripts);
-
+
}
/**
* @see org.jboss.ejb3.packagemanager.PackageContext#getPreInstallScripts()
*/
@Override
- public List<ScriptType> getPreInstallScripts()
+ public List<PreInstallScript> getPreInstallScripts()
{
PreInstallType preInstall = this.pkg.getPreInstall();
if (preInstall == null)
{
return Collections.EMPTY_LIST;
}
- List<ScriptType> preInstallScripts = preInstall.getScripts();
+ List<PreInstallScript> preInstallScripts = preInstall.getScripts();
if (preInstallScripts == null)
{
return Collections.EMPTY_LIST;
@@ -210,6 +214,44 @@
}
/**
+ * @see org.jboss.ejb3.packagemanager.PackageContext#getPostUnInstallScripts()
+ */
+ @Override
+ public List<PostUnInstallScript> getPostUnInstallScripts()
+ {
+ PostUnInstallType postUnInstall = this.pkg.getPostUninstall();
+ if (postUnInstall == null)
+ {
+ return Collections.EMPTY_LIST;
+ }
+ List<PostUnInstallScript> postUnInstallScripts = postUnInstall.getScripts();
+ if (postUnInstallScripts == null)
+ {
+ return Collections.EMPTY_LIST;
+ }
+ return Collections.unmodifiableList(postUnInstallScripts);
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.PackageContext#getPreUnInstallScripts()
+ */
+ @Override
+ public List<PreUninstallScript> getPreUnInstallScripts()
+ {
+ PreUnInstallType preUnInstall = this.pkg.getPreUninstall();
+ if (preUnInstall == null)
+ {
+ return Collections.EMPTY_LIST;
+ }
+ List<PreUninstallScript> preUnInstallScripts = preUnInstall.getScripts();
+ if (preUnInstallScripts == null)
+ {
+ return Collections.EMPTY_LIST;
+ }
+ return Collections.unmodifiableList(preUnInstallScripts);
+ }
+
+ /**
* @see org.jboss.ejb3.packagemanager.PackageContext#getSystemRequirements()
*/
@Override
@@ -218,6 +260,7 @@
return this.pkg.getSystemRequirements();
}
+
private void initPackageDependencies() throws DependencyResoultionException, InvalidPackageException
{
// packaged dependencies
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerContext.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerContext.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerContext.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -21,9 +21,13 @@
*/
package org.jboss.ejb3.packagemanager.impl;
+import java.io.File;
+
+import org.jboss.ejb3.packagemanager.PackageContext;
import org.jboss.ejb3.packagemanager.PackageManager;
import org.jboss.ejb3.packagemanager.PackageManagerContext;
import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
+import org.jboss.ejb3.packagemanager.metadata.ScriptType;
/**
* DefaultPackageManagerContext
@@ -67,4 +71,16 @@
return this.pkgMgr.getPackageManagerEnvironment();
}
+ /**
+ * @see org.jboss.ejb3.packagemanager.PackageManagerContext#getScriptStoreLocation(org.jboss.ejb3.packagemanager.PackageContext)
+ */
+ @Override
+ public String getScriptStoreLocation(PackageContext pkgContext)
+ {
+ String packageName = pkgContext.getPackageName();
+ return "data/scripts/" + packageName;
+ }
+
+
+
}
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 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerImpl.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -22,15 +22,21 @@
package org.jboss.ejb3.packagemanager.impl;
import java.io.File;
+import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.Set;
+import javax.transaction.Synchronization;
+import javax.transaction.TransactionManager;
+
import org.jboss.ejb3.packagemanager.PackageContext;
import org.jboss.ejb3.packagemanager.PackageManager;
import org.jboss.ejb3.packagemanager.PackageManagerContext;
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.db.DefaultDatabaseManager;
import org.jboss.ejb3.packagemanager.db.PackageDatabaseManager;
import org.jboss.ejb3.packagemanager.entity.InstalledFile;
@@ -45,8 +51,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.metadata.impl.PostInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostUnInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreUninstallScript;
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;
/**
@@ -55,7 +67,7 @@
* @author Jaikiran Pai
* @version $Revision: $
*/
-public class DefaultPackageManagerImpl implements PackageManager
+public class DefaultPackageManagerImpl implements PackageManager, Synchronization
{
/**
@@ -85,6 +97,11 @@
private PackageDatabaseManager pkgDatabaseManager;
/**
+ * Transaction manager
+ */
+ private TransactionManager transactionManager;
+
+ /**
* Creates the default package manager for a server
*
* @param environment The package manager environment
@@ -95,7 +112,7 @@
this.environment = environment;
this.installationServerHome = jbossHome;
this.pkgMgrCtx = new DefaultPackageManagerContext(this);
-
+ this.transactionManager = TransactionManagerImpl.getInstance();
this.pkgDatabaseManager = new DefaultDatabaseManager(this.pkgMgrCtx);
}
@@ -123,6 +140,7 @@
* @see org.jboss.ejb3.packagemanager.PackageManager#installPackage(java.lang.String)
*/
@Override
+ @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
public void installPackage(String pkgPath) throws PackageManagerException
{
if (pkgPath == null)
@@ -150,6 +168,7 @@
*
*/
@Override
+ @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
public void installPackage(URL packageURL) throws PackageManagerException
{
if (packageURL == null)
@@ -168,12 +187,14 @@
* @param pkgContext
* @throws PackageManagerException
*/
+ @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
public void installPackage(PackageContext pkgContext) throws PackageManagerException
{
if (pkgContext == null)
{
throw new PackageManagerException("Package context is null");
}
+
// check if package is already installed
boolean packageAlreadyInstalled = this.pkgDatabaseManager.isPackageInstalled(pkgContext.getPackageName());
if (packageAlreadyInstalled)
@@ -202,6 +223,10 @@
}
// post-installation step
this.postInstallPackage(pkgContext);
+ // store the pre/post uninstall scripts (if any) at a particular location
+ // so that they can be used during uninstallation of this package
+ this.storeScripts(pkgContext);
+ // now record the installation into DB
this.pkgDatabaseManager.installPackage(pkgContext);
logger.info("Installed " + pkgContext);
}
@@ -210,6 +235,7 @@
* @see org.jboss.ejb3.packagemanager.PackageManager#removePackage(java.lang.String)
*/
@Override
+ @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
public void removePackage(String packageName) throws PackageNotInstalledException, PackageManagerException
{
// get the installed package
@@ -219,8 +245,9 @@
throw new PackageNotInstalledException("Package " + packageName + " is not installed - so cannot be removed!");
}
InstalledPackage installedPackage = this.pkgDatabaseManager.getInstalledPackage(packageName);
+
this.removePackage(installedPackage, false);
-
+
}
protected void removePackage(InstalledPackage installedPackage, boolean forceRemove)
@@ -238,6 +265,8 @@
+ " - cannot remove this package!");
}
}
+ // pre-uninstall step
+ this.preUnInstallPackage(installedPackage);
// TODO : Revisit this installer creation
Installer installer = new DefaultInstaller(this.pkgMgrCtx);
// install files in this package
@@ -245,6 +274,8 @@
{
installer.uninstall(installedPackage, fileToUninstall);
}
+ // post-uninstall step
+ this.postUnInstallPackage(installedPackage);
this.pkgDatabaseManager.removePackage(installedPackage);
logger.info("Uninstalled " + packageName);
}
@@ -253,6 +284,7 @@
* @see org.jboss.ejb3.packagemanager.PackageManager#updatePackage(java.lang.String)
*/
@Override
+ @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
public void updatePackage(String packageFilePath) throws PackageManagerException
{
if (packageFilePath == null)
@@ -272,6 +304,7 @@
}
@Override
+ @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
public void updatePackage(URL packageURL) throws PackageManagerException
{
if (packageURL == null)
@@ -284,6 +317,7 @@
this.updatePackage(pkgCtx);
}
+ @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
public void updatePackage(PackageContext pkgContext) throws PackageManagerException
{
String packageName = pkgContext.getPackageName();
@@ -295,13 +329,21 @@
+ " for upgrading to " + pkgContext);
removePackage(installedPackage, true);
}
-
// now install new version
this.installPackage(pkgContext);
-
+
}
/**
+ * @see org.jboss.ejb3.packagemanager.PackageManager#getTransactionManager()
+ */
+ @Override
+ public TransactionManager getTransactionManager()
+ {
+ return this.transactionManager;
+ }
+
+ /**
* Parses the {@code pkgPath} string and returns an appropriate URL.
*
* @param pkgPath
@@ -344,6 +386,82 @@
}
/**
+ * Stores the scripts available in a package to a local store so
+ * that they are available during uninstallation of the package.
+ * Currently, only post-uninstall and pre-uinstall scripts are
+ * stored because the rest of the scripts are not required
+ * after installation of a package.
+ *
+ * @param pkgCtx Package whose scripts are to be stored
+ */
+ private void storeScripts(PackageContext pkgCtx) throws PackageManagerException
+ {
+ String relativePathToScriptStoreDir = this.pkgMgrCtx.getScriptStoreLocation(pkgCtx);
+ File scriptStoreDir = new File(this.getPackageManagerEnvironment().getPackageManagerHome(),
+ relativePathToScriptStoreDir);
+ if (!scriptStoreDir.exists())
+ {
+ scriptStoreDir.mkdirs();
+ }
+ logger.debug("Scripts for " + pkgCtx + " will be stored in " + scriptStoreDir);
+ // we store only uninstall scripts.
+
+ // post-uninstall
+ List<PostUnInstallScript> postUnInstallScripts = pkgCtx.getPostUnInstallScripts();
+ if (postUnInstallScripts != null)
+ {
+ for (PostUnInstallScript script : postUnInstallScripts)
+ {
+ storeScript(pkgCtx, script, scriptStoreDir);
+
+ }
+ }
+ // pre-uninstall
+ List<PreUninstallScript> preUnInstallScripts = pkgCtx.getPreUnInstallScripts();
+ if (preUnInstallScripts != null)
+ {
+ for (PreUninstallScript script : preUnInstallScripts)
+ {
+ storeScript(pkgCtx, script, scriptStoreDir);
+ }
+ }
+ }
+
+ /**
+ * Stores the script to the <code>destDir</code>
+ *
+ * @param pkgCtx Package to which this script belongs
+ * @param script Script to be stored
+ * @param destDir The destination directory where the script has to be stored
+ * @throws PackageManagerException
+ */
+ private void storeScript(PackageContext pkgCtx, ScriptType script, File destDir) throws PackageManagerException
+ {
+ String scriptFileName = script.getName();
+ File root = pkgCtx.getPackageRoot();
+ File path = root;
+ if (script.getPath() != null)
+ {
+ path = new File(root, script.getPath());
+ }
+ File scriptFile = new File(path, scriptFileName);
+ if (!scriptFile.exists())
+ {
+ throw new PackageManagerException("Script file " + scriptFile + " for " + pkgCtx + " does not exist!");
+ }
+ try
+ {
+ File destFile = new File(destDir, scriptFile.getName());
+ IOUtil.copy(scriptFile, destFile);
+ logger.debug("Stored script file " + scriptFile + " at " + destDir);
+ }
+ catch (IOException e)
+ {
+ throw new PackageManagerException("Could not store script due to exception ", e);
+ }
+ }
+
+ /**
* The pre-installation step for packages. Each package can have multiple
* pre-install scripts to be run. This method runs those pre-install scripts
*
@@ -354,23 +472,69 @@
protected void preInstallPackage(PackageContext pkgCtx) throws PackageManagerException
{
// find any pre-install scripts
- List<ScriptType> preInstallScripts = pkgCtx.getPreInstallScripts();
+ List<PreInstallScript> preInstallScripts = pkgCtx.getPreInstallScripts();
if (preInstallScripts == null || preInstallScripts.isEmpty())
{
- logger.debug("There are no pre-install scripts for " + pkgCtx);
+ logger.trace("There are no pre-install scripts for " + pkgCtx);
return;
}
- for (ScriptType script : preInstallScripts)
+ for (PreInstallScript script : preInstallScripts)
{
// TODO: Can we just have one instance of the script processor to process
// all scripts? Stateful/stateless?
ScriptProcessor scriptProcessor = new AntScriptProcessor();
- scriptProcessor.processScript(this.pkgMgrCtx, pkgCtx, script);
+ String scriptFileName = script.getName();
+ File root = pkgCtx.getPackageRoot();
+ File path = root;
+ if (script.getPath() != null)
+ {
+ path = new File(root, script.getPath());
+ }
+ File scriptFile = new File(path, scriptFileName);
+ if (!scriptFile.exists())
+ {
+ throw new PackageManagerException("Script file " + scriptFile + " for " + pkgCtx + " does not exist!");
+ }
+ scriptProcessor.processPreInstallScript(this.pkgMgrCtx, pkgCtx, scriptFile);
}
}
/**
+ * The pre-uninstallation step for packages. Each package can have multiple
+ * pre-uninstall scripts to be run. This method runs those pre-uninstall scripts
+ *
+ * @param installedPackage The installed package
+ * @throws PackageManagerException If any exception occurs during pre-uninstallation of the
+ * package
+ */
+ protected void preUnInstallPackage(InstalledPackage installedPackage) throws PackageManagerException
+ {
+ // find any pre-uninstall scripts
+ Set<org.jboss.ejb3.packagemanager.entity.PreUnInstallScript> preUnInstallScripts = installedPackage
+ .getPreUnInstallScripts();
+ if (preUnInstallScripts == null || preUnInstallScripts.isEmpty())
+ {
+ logger.trace("There are no pre-uninstall scripts for package " + installedPackage.getPackageName());
+ return;
+ }
+ for (org.jboss.ejb3.packagemanager.entity.PreUnInstallScript script : preUnInstallScripts)
+ {
+ ScriptProcessor scriptProcessor = new AntScriptProcessor();
+ File packageManagerHome = this.pkgMgrCtx.getPackageManagerEnvironment().getPackageManagerHome();
+ File scriptFileLocation = new File(packageManagerHome, script.getPath());
+ File scriptFile = new File(scriptFileLocation, script.getName());
+ if (!scriptFile.exists())
+ {
+ throw new PackageManagerException("Script file " + scriptFile + " for package "
+ + installedPackage.getPackageName() + " does not exist!");
+ }
+ scriptProcessor.processPreUnInstallScript(this.pkgMgrCtx, installedPackage, scriptFile);
+ }
+
+ }
+
+ /**
* The post-installation step for packages. Each package can have multiple
* post-install scripts to be run. This method runs those post-install scripts
*
@@ -381,23 +545,68 @@
protected void postInstallPackage(PackageContext pkgCtx) throws PackageManagerException
{
// find any post-install scripts
- List<ScriptType> postInstallScripts = pkgCtx.getPostInstallScripts();
+ List<PostInstallScript> postInstallScripts = pkgCtx.getPostInstallScripts();
if (postInstallScripts == null || postInstallScripts.isEmpty())
{
- logger.debug("There are no post-install scripts for " + pkgCtx);
+ logger.trace("There are no post-install scripts for " + pkgCtx);
return;
}
- for (ScriptType script : postInstallScripts)
+ for (PostInstallScript script : postInstallScripts)
{
ScriptProcessor scriptProcessor = new AntScriptProcessor();
// TODO: Can we just have one instance of the script processor to process
// all scripts? Stateful/stateless?
- scriptProcessor.processScript(this.pkgMgrCtx, pkgCtx, script);
+ String scriptFileName = script.getName();
+ File root = pkgCtx.getPackageRoot();
+ File path = root;
+ if (script.getPath() != null)
+ {
+ path = new File(root, script.getPath());
+ }
+ File scriptFile = new File(path, scriptFileName);
+ if (!scriptFile.exists())
+ {
+ throw new PackageManagerException("Script file " + scriptFile + " for " + pkgCtx + " does not exist!");
+ }
+ scriptProcessor.processPostInstallScript(this.pkgMgrCtx, pkgCtx, scriptFile);
}
}
/**
+ * The post-uninstallation step for packages. Each package can have multiple
+ * post-uninstall scripts to be run. This method runs those post-uninstall scripts
+ *
+ * @param installedPackage The installed package
+ * @throws PackageManagerException If any exception occurs during post-uninstallation of the
+ * package
+ */
+ protected void postUnInstallPackage(InstalledPackage installedPackage) throws PackageManagerException
+ {
+ // find any post-uninstall scripts
+ Set<org.jboss.ejb3.packagemanager.entity.PostUnInstallScript> postUnInstallScripts = installedPackage
+ .getPostUnInstallScripts();
+ if (postUnInstallScripts == null || postUnInstallScripts.isEmpty())
+ {
+ logger.trace("There are no post-uninstall scripts for package " + installedPackage.getPackageName());
+ return;
+ }
+ for (org.jboss.ejb3.packagemanager.entity.PostUnInstallScript script : postUnInstallScripts)
+ {
+ ScriptProcessor scriptProcessor = new AntScriptProcessor();
+ File packageManagerHome = this.pkgMgrCtx.getPackageManagerEnvironment().getPackageManagerHome();
+ File scriptFileLocation = new File(packageManagerHome, script.getPath());
+ File scriptFile = new File(scriptFileLocation, script.getName());
+ if (!scriptFile.exists())
+ {
+ throw new PackageManagerException("Script file " + scriptFile + " for package "
+ + installedPackage.getPackageName() + " does not exist!");
+ }
+ scriptProcessor.processPostUnInstallScript(this.pkgMgrCtx, installedPackage, scriptFile);
+ }
+ }
+
+ /**
* Process any dependencies listed for the package. Dependency processing
* will include resolving and retrieving the appropriate dependency packages
* and install those packages. Dependency packages, either in the form of {@link PackagedDependency}
@@ -418,4 +627,32 @@
}
}
+ /**
+ * @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();
+ }
+
+ }
+
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/installer/AbstractInstaller.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/installer/AbstractInstaller.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/installer/AbstractInstaller.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -58,6 +58,7 @@
String jbossHome = pkg.getPackageManager().getJbossHome();
File relativePathToFile = new File(jbossHome, installedFile.getInstalledPath());
File fileToUninstall = new File(relativePathToFile, installedFile.getFileName());
+
if (!fileToUninstall.exists())
{
throw new PackageManagerException("Installed file missing: " + fileToUninstall.getAbsolutePath()
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Main.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Main.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Main.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -31,6 +31,7 @@
import org.jboss.ejb3.packagemanager.PackageManager;
import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
+import org.jboss.ejb3.packagemanager.PackageManagerFactory;
import org.jboss.ejb3.packagemanager.exception.PackageManagerException;
import org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl;
import org.jboss.ejb3.packagemanager.util.DBUtil;
@@ -108,7 +109,7 @@
logger.info("Using Package Manager Home: " + packageManagerHome);
logger.info("Using JBoss Home: " + jbossHome);
PackageManagerEnvironment env = new PackageManagerEnvironment(packageManagerHome);
- PackageManager pm = new DefaultPackageManagerImpl(env, jbossHome);
+ PackageManager pm = PackageManagerFactory.getDefaultPackageManager(env, jbossHome);
String schemaSetupScript = (String) cmdLineParser.getOptionValue(setupCmdOption);
if (schemaSetupScript != null)
@@ -175,7 +176,7 @@
// out you go!
pm.removePackage(packageToRemove);
}
-
+
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PackageInstallationPhase.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PackageInstallationPhase.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PackageInstallationPhase.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -25,7 +25,7 @@
* PackageInstallationPhase
*
* Represents a phase during package installation.
- * Possible phases are pre-install and post-install
+ *
*
* @author Jaikiran Pai
* @version $Revision: $
@@ -33,5 +33,7 @@
public enum PackageInstallationPhase
{
PRE_INSTALL,
- POST_INSTALL
+ POST_INSTALL,
+ PRE_UNINSTALL,
+ POST_UNINSTALL
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PackageType.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PackageType.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PackageType.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -144,4 +144,29 @@
* @param postInstall Post-install
*/
void setPostInstall(PostInstallType postInstall);
+
+ /**
+ * Returns any pre-uninstall metadata related to this package
+ * @return
+ */
+ PreUnInstallType getPreUninstall();
+
+ /**
+ * Sets the pre-uninstall metadata for this package
+ * @param preUninstall
+ */
+ void setPreUnInstall(PreUnInstallType preUninstall);
+
+ /**
+ * Returns any post-uninstall metadata related to this package
+ * @return
+ */
+ PostUnInstallType getPostUninstall();
+
+ /**
+ * Sets the post-uninstall metadata for this package
+ * @param preUninstall
+ */
+ void setPostUnInstall(PostUnInstallType postUninstall);
+
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PostInstallType.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PostInstallType.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PostInstallType.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -23,6 +23,8 @@
import java.util.List;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostInstallScript;
+
/**
* PostInstallMetadata
*
@@ -40,21 +42,21 @@
*
* @return
*/
- List<ScriptType> getScripts();
+ List<PostInstallScript> getScripts();
/**
* Sets the list of post-install scripts for a package
*
* @param scripts The post-install scripts
*/
- void setScripts(List<ScriptType> scripts);
+ void setScripts(List<PostInstallScript> scripts);
/**
- * Adds a pre-install script to the list of post-install scripts
+ * Adds a post-install script to the list of post-install scripts
* for this package
* @param script
*/
- void addScript(ScriptType script);
+ void addScript(PostInstallScript script);
/**
* Returns the package to which this post-install step
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PostUnInstallType.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PostUnInstallType.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PostUnInstallType.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,64 @@
+/*
+* 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.metadata;
+
+import java.util.List;
+
+import org.jboss.ejb3.packagemanager.metadata.impl.PostUnInstallScript;
+
+/**
+ * PostUnInstallType
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public interface PostUnInstallType
+{
+
+ /**
+ * Returns the list of post-uninstall scripts for a package
+ *
+ * @return
+ */
+ List<PostUnInstallScript> getScripts();
+
+ /**
+ * Sets the list of post-uninstall scripts for a package
+ *
+ * @param scripts The post-uninstall scripts
+ */
+ void setScripts(List<PostUnInstallScript> scripts);
+
+ /**
+ * Adds a post-uninstall script to the list of post-uninstall scripts
+ * for this package
+ * @param script
+ */
+ void addScript(PostUnInstallScript script);
+
+ /**
+ * Returns the package to which this post-uninstall step
+ * belongs to
+ * @return
+ */
+ PackageType getPackage();
+}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PreInstallType.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PreInstallType.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PreInstallType.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -23,6 +23,8 @@
import java.util.List;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreInstallScript;
+
/**
* PreInstallMetadata
*
@@ -42,21 +44,21 @@
*
* @return
*/
- List<ScriptType> getScripts();
+ List<PreInstallScript> getScripts();
/**
* Sets the list of pre-install scripts for a package
*
* @param scripts The pre-install scripts
*/
- void setScripts(List<ScriptType> scripts);
+ void setScripts(List<PreInstallScript> scripts);
/**
* Adds a pre-install script to the list of pre-install scripts
* for this package
* @param script
*/
- void addScript(ScriptType script);
+ void addScript(PreInstallScript script);
/**
* Returns the package to which this pre-install step
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PreUnInstallType.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PreUnInstallType.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/PreUnInstallType.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,63 @@
+/*
+* 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.metadata;
+
+import java.util.List;
+
+import org.jboss.ejb3.packagemanager.metadata.impl.PreUninstallScript;
+
+/**
+ * PreUnInstallType
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public interface PreUnInstallType
+{
+ /**
+ * Returns the list of pre-uninstall scripts for a package
+ *
+ * @return
+ */
+ List<PreUninstallScript> getScripts();
+
+ /**
+ * Sets the list of pre-uninstall scripts for a package
+ *
+ * @param scripts The pre-uninstall scripts
+ */
+ void setScripts(List<PreUninstallScript> scripts);
+
+ /**
+ * Adds a pre-uninstall script to the list of pre-uninstall scripts
+ * for this package
+ * @param script
+ */
+ void addScript(PreUninstallScript script);
+
+ /**
+ * Returns the package to which this pre-uninstall step
+ * belongs to
+ * @return
+ */
+ PackageType getPackage();
+}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/ScriptType.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/ScriptType.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/ScriptType.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -21,7 +21,10 @@
*/
package org.jboss.ejb3.packagemanager.metadata;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostUnInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreUninstallScript;
+
/**
* ScriptMetadata
*
@@ -35,41 +38,47 @@
{
/**
- * Returns the file path (including the file name) relative to
- * the location of the package.xml in the package
+ * Returns the name of the file
* @return
*/
- String getFile();
+ String getName();
/**
- * Sets the file path (including the name of the file)
+ * Sets the name of the file
*
- * @param scriptFile Path relative to the location of package.xml in the package
+ * @param name Name of the script file
*/
- void setFile(String scriptFile);
+ void setName(String name);
-// /**
-// * Returns the fully qualified name of the class which implements
-// * {@link ScriptProcessor} and is responsible for processing the
-// * {@link #getFile()} script file
-// * @return
-// */
-// String getProcessor();
-//
-// /**
-// * Sets the script processor which is responsible for processing the
-// * {@link #getFile()} script file
-// *
-// * @param scriptProcessor Fully qualified name of the class which implements
-// * {@link ScriptProcessor}
-// */
-// void setProcessor(String scriptProcessor);
+ /**
+ * Sets the path of this script file.
+ * @param path
+ */
+ void setPath(String path);
/**
+ * Returns the path of this script file. Path is relative to
+ * the location of package.xml of the package to which this
+ * script belongs
+ * @return
+ */
+ String getPath();
+
+ /**
* Returns the package installation phase, during which this script
* is expected to be executed
*
* @return
*/
PackageInstallationPhase getScriptExecutionPhase();
+
+ /**
+ * Returns true, if the script has to be stored, during installation, to some
+ * location (usually within the package manager home), so that
+ * the script is available for use during uninstallation of the package.
+ *
+ * Uninstall scripts (pre-uninstall and post-uninstall) are by default persisted
+ * @return
+ */
+ boolean isPersistent();
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PackageImpl.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PackageImpl.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PackageImpl.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -28,7 +28,9 @@
import org.jboss.ejb3.packagemanager.metadata.InstallFileType;
import org.jboss.ejb3.packagemanager.metadata.PackageType;
import org.jboss.ejb3.packagemanager.metadata.PostInstallType;
+import org.jboss.ejb3.packagemanager.metadata.PostUnInstallType;
import org.jboss.ejb3.packagemanager.metadata.PreInstallType;
+import org.jboss.ejb3.packagemanager.metadata.PreUnInstallType;
import org.jboss.ejb3.packagemanager.metadata.SystemRequirementsType;
public class PackageImpl implements PackageType
@@ -54,6 +56,16 @@
*/
protected PreInstallType preInstall;
+ /**
+ * Post-UnInstall
+ */
+ protected PostUnInstallType postUnInstall;
+
+ /**
+ * Pre-Uninstall
+ */
+ protected PreUnInstallType preUnInstall;
+
public PackageImpl()
{
@@ -164,4 +176,42 @@
}
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PackageType#getPostUninstall()
+ */
+ @Override
+ public PostUnInstallType getPostUninstall()
+ {
+ return this.postUnInstall;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PackageType#getPreUninstall()
+ */
+ @Override
+ public PreUnInstallType getPreUninstall()
+ {
+ return this.preUnInstall;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PackageType#setPostUnInstall(org.jboss.ejb3.packagemanager.metadata.PostUnInstallType)
+ */
+ @Override
+ public void setPostUnInstall(PostUnInstallType postUninstall)
+ {
+ this.postUnInstall = postUninstall;
+
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PackageType#setPreUnInstall(org.jboss.ejb3.packagemanager.metadata.PreUnInstallType)
+ */
+ @Override
+ public void setPreUnInstall(PreUnInstallType preUninstall)
+ {
+ this.preUnInstall = preUninstall;
+
+ }
+
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostInstallImpl.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostInstallImpl.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostInstallImpl.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -26,7 +26,6 @@
import org.jboss.ejb3.packagemanager.metadata.PackageType;
import org.jboss.ejb3.packagemanager.metadata.PostInstallType;
-import org.jboss.ejb3.packagemanager.metadata.ScriptType;
/**
* PostInstallMetadataImpl
@@ -45,7 +44,7 @@
/**
* post-install scripts
*/
- private List<ScriptType> scripts;
+ private List<PostInstallScript> scripts;
/**
* Constructor
@@ -57,9 +56,9 @@
}
/**
- * @see org.jboss.ejb3.packagemanager.metadata.PostInstallType#addScript(org.jboss.ejb3.packagemanager.metadata.ScriptType)
+ * @see org.jboss.ejb3.packagemanager.metadata.PostInstallType#addScript(PostInstallScript)
*/
- public void addScript(ScriptType script)
+ public void addScript(PostInstallScript script)
{
if (script == null)
{
@@ -67,7 +66,7 @@
}
if (this.scripts == null)
{
- this.scripts = new ArrayList<ScriptType>();
+ this.scripts = new ArrayList<PostInstallScript>();
}
this.scripts.add(script);
@@ -84,7 +83,7 @@
/**
* @see org.jboss.ejb3.packagemanager.metadata.PostInstallType#getScripts()
*/
- public List<ScriptType> getScripts()
+ public List<PostInstallScript> getScripts()
{
return this.scripts;
}
@@ -92,7 +91,7 @@
/**
* @see org.jboss.ejb3.packagemanager.metadata.PostInstallType#setScripts(java.util.List)
*/
- public void setScripts(List<ScriptType> scripts)
+ public void setScripts(List<PostInstallScript> scripts)
{
if (scripts == null)
{
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostInstallScript.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostInstallScript.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostInstallScript.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -69,5 +69,15 @@
{
return this.postInstallMeta;
}
+
+ /**
+ * Post install scripts are not persistent
+ * @see org.jboss.ejb3.packagemanager.metadata.impl.ScriptImpl#isPersistent()
+ */
+ @Override
+ public boolean isPersistent()
+ {
+ return false;
+ }
}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostUnInstallImpl.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostUnInstallImpl.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostUnInstallImpl.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,102 @@
+/*
+* 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.metadata.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.ejb3.packagemanager.metadata.PackageType;
+import org.jboss.ejb3.packagemanager.metadata.PostUnInstallType;
+
+/**
+ * PostUnInstallImpl
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class PostUnInstallImpl implements PostUnInstallType
+{
+ /**
+ * The package to which this post-uninstall belongs
+ */
+ private PackageType pkgMetadata;
+
+ /**
+ * post-install scripts
+ */
+ private List<PostUnInstallScript> scripts;
+
+ /**
+ * Constructor
+ * @param pkgMeta The {@link PackageType} to which this post-uninstall belongs
+ */
+ public PostUnInstallImpl(PackageType pkgMeta)
+ {
+ this.pkgMetadata = pkgMeta;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PostUnInstallType#addScript(PostUnInstallScript)
+ */
+ public void addScript(PostUnInstallScript script)
+ {
+ if (script == null)
+ {
+ return;
+ }
+ if (this.scripts == null)
+ {
+ this.scripts = new ArrayList<PostUnInstallScript>();
+ }
+ this.scripts.add(script);
+
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PostUnInstallType#getPackage()
+ */
+ public PackageType getPackage()
+ {
+ return this.pkgMetadata;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PostUnInstallType#getScripts()
+ */
+ public List<PostUnInstallScript> getScripts()
+ {
+ return this.scripts;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PostUnInstallType#setScripts(List)
+ */
+ public void setScripts(List<PostUnInstallScript> scripts)
+ {
+ if (scripts == null)
+ {
+ throw new IllegalArgumentException("post-uninstall scripts cannot be set to null scripts");
+ }
+ this.scripts = scripts;
+
+ }
+}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostUnInstallScript.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostUnInstallScript.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PostUnInstallScript.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,82 @@
+/*
+* 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.metadata.impl;
+
+import org.jboss.ejb3.packagemanager.metadata.PackageInstallationPhase;
+import org.jboss.ejb3.packagemanager.metadata.PostUnInstallType;
+
+/**
+ * PostUnInstallScript
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class PostUnInstallScript extends ScriptImpl
+{
+
+ /**
+ * The post-uninstall step to which this script
+ * belongs
+ */
+ private PostUnInstallType postUinstallMeta;
+
+ /**
+ * Constructor
+ *
+ * @param postUnInstallMeta The {@link PostUnInstallType} to which this
+ * post-uninstall script belongs to
+ */
+ public PostUnInstallScript(PostUnInstallType postUninstall)
+ {
+ this.postUinstallMeta = postUninstall;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.impl.ScriptImpl#getScriptExecutionPhase()
+ */
+ @Override
+ public PackageInstallationPhase getScriptExecutionPhase()
+ {
+ return PackageInstallationPhase.POST_UNINSTALL;
+ }
+
+ /**
+ * Returns the {@link PostUnInstallType} to which this post-uninstall script
+ * belongs to
+ *
+ * @return
+ */
+ public PostUnInstallType getPostUnInstallMetadata()
+ {
+ return this.postUinstallMeta;
+ }
+
+ /**
+ * Post uninstall scripts are persistent
+ * @see org.jboss.ejb3.packagemanager.metadata.impl.ScriptImpl#isPersistent()
+ */
+ @Override
+ public boolean isPersistent()
+ {
+ return true;
+ }
+}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreInstallImpl.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreInstallImpl.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreInstallImpl.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -26,7 +26,6 @@
import org.jboss.ejb3.packagemanager.metadata.PackageType;
import org.jboss.ejb3.packagemanager.metadata.PreInstallType;
-import org.jboss.ejb3.packagemanager.metadata.ScriptType;
/**
* PreInstallMetadataImpl
@@ -45,7 +44,7 @@
/**
* pre-install scripts
*/
- private List<ScriptType> scripts;
+ private List<PreInstallScript> scripts;
/**
* Constructor
@@ -57,9 +56,9 @@
}
/**
- * @see org.jboss.ejb3.packagemanager.metadata.PreInstallType#addScript(org.jboss.ejb3.packagemanager.metadata.ScriptType)
+ * @see org.jboss.ejb3.packagemanager.metadata.PreInstallType#addScript(PreInstallScript)
*/
- public void addScript(ScriptType script)
+ public void addScript(PreInstallScript script)
{
if (script == null)
{
@@ -67,7 +66,7 @@
}
if (this.scripts == null)
{
- this.scripts = new ArrayList<ScriptType>();
+ this.scripts = new ArrayList<PreInstallScript>();
}
this.scripts.add(script);
}
@@ -83,7 +82,7 @@
/**
* @see org.jboss.ejb3.packagemanager.metadata.PreInstallType#getScripts()
*/
- public List<ScriptType> getScripts()
+ public List<PreInstallScript> getScripts()
{
return this.scripts;
}
@@ -91,7 +90,7 @@
/**
* @see org.jboss.ejb3.packagemanager.metadata.PreInstallType#setScripts(java.util.List)
*/
- public void setScripts(List<ScriptType> scripts)
+ public void setScripts(List<PreInstallScript> scripts)
{
if (scripts == null)
{
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreInstallScript.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreInstallScript.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreInstallScript.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -68,5 +68,15 @@
{
return this.preInstallMeta;
}
+
+ /**
+ * Pre install scripts are not persistent
+ * @see org.jboss.ejb3.packagemanager.metadata.impl.ScriptImpl#isPersistent()
+ */
+ @Override
+ public boolean isPersistent()
+ {
+ return false;
+ }
}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreUnInstallImpl.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreUnInstallImpl.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreUnInstallImpl.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,101 @@
+/*
+* 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.metadata.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.ejb3.packagemanager.metadata.PackageType;
+import org.jboss.ejb3.packagemanager.metadata.PreUnInstallType;
+
+/**
+ * PreUnInstallImpl
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class PreUnInstallImpl implements PreUnInstallType
+{
+ /**
+ * The package to which this pre-uninstall belongs
+ */
+ private PackageType pkgMetadata;
+
+ /**
+ * pre-install scripts
+ */
+ private List<PreUninstallScript> scripts;
+
+ /**
+ * Constructor
+ * @param pkgMeta The {@link PackageType} to which this pre-uninstall belongs
+ */
+ public PreUnInstallImpl(PackageType pkgMeta)
+ {
+ this.pkgMetadata = pkgMeta;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PreUnInstallType#addScript(PreUninstallScript)
+ */
+ public void addScript(PreUninstallScript script)
+ {
+ if (script == null)
+ {
+ return;
+ }
+ if (this.scripts == null)
+ {
+ this.scripts = new ArrayList<PreUninstallScript>();
+ }
+ this.scripts.add(script);
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PreUnInstallType#getPackage()
+ */
+ public PackageType getPackage()
+ {
+ return this.pkgMetadata;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PreUnInstallType#getScripts()
+ */
+ public List<PreUninstallScript> getScripts()
+ {
+ return this.scripts;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.PreUnInstallType#setScripts(List)
+ */
+ public void setScripts(List<PreUninstallScript> scripts)
+ {
+ if (scripts == null)
+ {
+ throw new IllegalArgumentException("pre-uninstall scripts cannot be set to null scripts");
+ }
+ this.scripts = scripts;
+
+ }
+}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreUninstallScript.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreUninstallScript.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/PreUninstallScript.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,83 @@
+/*
+* 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.metadata.impl;
+
+import org.jboss.ejb3.packagemanager.metadata.PackageInstallationPhase;
+import org.jboss.ejb3.packagemanager.metadata.PostUnInstallType;
+import org.jboss.ejb3.packagemanager.metadata.PreUnInstallType;
+
+/**
+ * PreUninstallScript
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class PreUninstallScript extends ScriptImpl
+{
+
+ /**
+ * The pre-uninstall step to which this script
+ * belongs
+ */
+ private PreUnInstallType preUninstallMeta;
+
+ /**
+ * Constructor
+ *
+ * @param preUninstall The {@link PostUnInstallType} to which this
+ * pre-uninstall script belongs to
+ */
+ public PreUninstallScript(PreUnInstallType preUninstall)
+ {
+ this.preUninstallMeta = preUninstall;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.impl.ScriptImpl#getScriptExecutionPhase()
+ */
+ @Override
+ public PackageInstallationPhase getScriptExecutionPhase()
+ {
+ return PackageInstallationPhase.PRE_UNINSTALL;
+ }
+
+ /**
+ * Returns the {@link PreUnInstallType} to which this pre-uninstall script
+ * belongs to
+ *
+ * @return
+ */
+ public PreUnInstallType getPreUnInstallMetadata()
+ {
+ return this.preUninstallMeta;
+ }
+
+ /**
+ * Pre uninstall scripts are persistent
+ * @see org.jboss.ejb3.packagemanager.metadata.impl.ScriptImpl#isPersistent()
+ */
+ @Override
+ public boolean isPersistent()
+ {
+ return true;
+ }
+}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/ScriptImpl.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/ScriptImpl.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/metadata/impl/ScriptImpl.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -34,33 +34,64 @@
{
/**
- * The script file (default is package-script.xml)
+ * The script file name (default is package-script.xml)
*/
- private String scriptFile = "package-script.xml";
+ private String scriptFileName = "package-script.xml";
/**
- * @see org.jboss.ejb3.packagemanager.metadata.ScriptType#getFile()
+ * Path to the script file. Path is relative to the location
+ * of package.xml of the package. A null value means this
+ * script is at the same location as the package.xml
*/
- public String getFile()
+ private String path;
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.ScriptType#getName()
+ */
+ public String getName()
{
- return this.scriptFile;
+ return this.scriptFileName;
}
/**
- * @see org.jboss.ejb3.packagemanager.metadata.ScriptType#setFile(java.lang.String)
+ * @see org.jboss.ejb3.packagemanager.metadata.ScriptType#setName(String)
*/
- public void setFile(String scriptFile)
+ public void setName(String name)
{
- if (scriptFile == null)
+ if (name == null)
{
- throw new IllegalArgumentException("Script file value cannot be null");
+ throw new IllegalArgumentException("Script file name cannot be null");
}
- this.scriptFile = scriptFile;
+ this.scriptFileName = name;
}
/**
+ * @see org.jboss.ejb3.packagemanager.metadata.ScriptType#getPath()
+ */
+ @Override
+ public String getPath()
+ {
+ return this.path;
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.ScriptType#setPath(java.lang.String)
+ */
+ @Override
+ public void setPath(String path)
+ {
+ this.path = path;
+
+ }
+
+ /**
* @see org.jboss.ejb3.packagemanager.metadata.ScriptType#getScriptExecutionPhase()
*/
public abstract PackageInstallationPhase getScriptExecutionPhase();
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.metadata.ScriptType#isPersistent()
+ */
+ public abstract boolean isPersistent();
}
Added: 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 (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/proxy/PackageManagerInvocationHandler.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,196 @@
+/*
+* 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
+{
+
+ private PackageManager packageManager;
+
+ private static Logger logger = Logger.getLogger(PackageManagerInvocationHandler.class);
+
+ 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();
+ logger.debug("Started in invocation handler " + 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();
+ }
+ else
+ {
+ logger.debug("Commiting in invocation handler " + txManager.getTransaction() + " for method " + method);
+ txManager.commit();
+ logger.debug("Commited in invocation handler " + txManager.getTransaction() + " 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();
+ }
+ // start new tx and invoke the method
+ txManager.begin();
+ Transaction newTx = txManager.getTransaction();
+ registerForSynchronization(newTx);
+ try
+ {
+ Object result = method.invoke(this.packageManager, args);
+ if (newTx.getStatus() == Status.STATUS_MARKED_ROLLBACK)
+ {
+ // rollback
+ newTx.rollback();
+ }
+ else
+ {
+ // method successfully completed, so commit tx
+ newTx.commit();
+ }
+ 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/main/java/org/jboss/ejb3/packagemanager/script/ScriptProcessor.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/script/ScriptProcessor.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/script/ScriptProcessor.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -21,10 +21,12 @@
*/
package org.jboss.ejb3.packagemanager.script;
+import java.io.File;
+
import org.jboss.ejb3.packagemanager.PackageContext;
import org.jboss.ejb3.packagemanager.PackageManagerContext;
+import org.jboss.ejb3.packagemanager.entity.InstalledPackage;
import org.jboss.ejb3.packagemanager.exception.ScriptProcessingException;
-import org.jboss.ejb3.packagemanager.metadata.ScriptType;
/**
* ScriptProcessor
@@ -35,5 +37,11 @@
public interface ScriptProcessor
{
- void processScript(PackageManagerContext pkgManagerCtx, PackageContext pkgCtx, ScriptType script) throws ScriptProcessingException;
+ void processPreInstallScript(PackageManagerContext pkgManagerCtx, PackageContext pkgCtx, File script) throws ScriptProcessingException;
+
+ void processPostInstallScript(PackageManagerContext pkgManagerCtx, PackageContext pkgCtx, File script) throws ScriptProcessingException;
+
+ void processPreUnInstallScript(PackageManagerContext pkgManagerCtx, InstalledPackage installedPackage, File script) throws ScriptProcessingException;
+
+ void processPostUnInstallScript(PackageManagerContext pkgManagerCtx, InstalledPackage installedPackage, File script) throws ScriptProcessingException;
}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/script/impl/AntScriptProcessor.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/script/impl/AntScriptProcessor.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/script/impl/AntScriptProcessor.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -22,6 +22,10 @@
package org.jboss.ejb3.packagemanager.script.impl;
import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.BuildListener;
@@ -29,9 +33,9 @@
import org.apache.tools.ant.ProjectHelper;
import org.jboss.ejb3.packagemanager.PackageContext;
import org.jboss.ejb3.packagemanager.PackageManagerContext;
+import org.jboss.ejb3.packagemanager.entity.InstalledPackage;
+import org.jboss.ejb3.packagemanager.entity.PackageManagerEntity;
import org.jboss.ejb3.packagemanager.exception.ScriptProcessingException;
-import org.jboss.ejb3.packagemanager.metadata.PackageInstallationPhase;
-import org.jboss.ejb3.packagemanager.metadata.ScriptType;
import org.jboss.ejb3.packagemanager.script.ScriptProcessor;
import org.jboss.logging.Logger;
@@ -50,68 +54,130 @@
private static Logger logger = Logger.getLogger(AntScriptProcessor.class);
/**
- * @see org.jboss.ejb3.packagemanager.script.ScriptProcessor#processScript(PackageManagerContext, PackageContext, ScriptType)
+ * @see org.jboss.ejb3.packagemanager.script.ScriptProcessor#processPostInstallScript(org.jboss.ejb3.packagemanager.PackageManagerContext, org.jboss.ejb3.packagemanager.PackageContext, java.io.File)
*/
@Override
- public void processScript(PackageManagerContext pkgManagerCtx, PackageContext pkgCtx, ScriptType script)
+ public void processPostInstallScript(PackageManagerContext pkgManagerCtx, PackageContext pkgCtx, File script)
throws ScriptProcessingException
{
- File root = pkgCtx.getPackageRoot();
- File antBuildFile = new File(root, script.getFile());
- if (!antBuildFile.exists())
+ // Set the properties JBOSS_HOME and PM_HOME for the
+ // build scripts to use (if they find it necessary)
+ Map<String, String> props = new HashMap<String, String>();
+ props.put("JBOSS_HOME", pkgManagerCtx.getJBossServerHome());
+ props.put("PM_HOME", pkgManagerCtx.getPackageManagerEnvironment().getPackageManagerHome().getAbsolutePath());
+ Project antProject = this.buildProject(script, pkgCtx.getPackageRoot(), props);
+ this.runTarget(antProject, "post-install");
+
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.script.ScriptProcessor#processPostUnInstallScript(PackageManagerContext, InstalledPackage, File)
+ */
+ @Override
+ public void processPostUnInstallScript(PackageManagerContext pkgManagerCtx, InstalledPackage installedPackage, File script)
+ throws ScriptProcessingException
+ {
+ // Set the properties JBOSS_HOME and PM_HOME for the
+ // build scripts to use (if they find it necessary)
+ Map<String, String> props = new HashMap<String, String>();
+ props.put("JBOSS_HOME", pkgManagerCtx.getJBossServerHome());
+ props.put("PM_HOME", pkgManagerCtx.getPackageManagerEnvironment().getPackageManagerHome().getAbsolutePath());
+
+ // TODO: What should basedir point to? Let's right now point it to the folder containing the
+ // script file
+ Project antProject = this.buildProject(script, script.getParentFile(), props);
+ this.runTarget(antProject, "post-uninstall");
+
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.script.ScriptProcessor#processPreInstallScript(org.jboss.ejb3.packagemanager.PackageManagerContext, org.jboss.ejb3.packagemanager.PackageContext, java.io.File)
+ */
+ @Override
+ public void processPreInstallScript(PackageManagerContext pkgManagerCtx, PackageContext pkgCtx, File script)
+ throws ScriptProcessingException
+ {
+ // Set the properties JBOSS_HOME and PM_HOME for the
+ // build scripts to use (if they find it necessary)
+ Map<String, String> props = new HashMap<String, String>();
+ props.put("JBOSS_HOME", pkgManagerCtx.getJBossServerHome());
+ props.put("PM_HOME", pkgManagerCtx.getPackageManagerEnvironment().getPackageManagerHome().getAbsolutePath());
+ Project antProject = this.buildProject(script, pkgCtx.getPackageRoot(), props);
+ this.runTarget(antProject, "pre-install");
+
+ }
+
+ /**
+ * @see org.jboss.ejb3.packagemanager.script.ScriptProcessor#processPreUnInstallScript(PackageManagerContext, InstalledPackage, File)
+ */
+ @Override
+ public void processPreUnInstallScript(PackageManagerContext pkgManagerCtx, InstalledPackage installedPackage, File script)
+ throws ScriptProcessingException
+ {
+ // Set the properties JBOSS_HOME and PM_HOME for the
+ // build scripts to use (if they find it necessary)
+ Map<String, String> props = new HashMap<String, String>();
+ props.put("JBOSS_HOME", pkgManagerCtx.getJBossServerHome());
+ props.put("PM_HOME", pkgManagerCtx.getPackageManagerEnvironment().getPackageManagerHome().getAbsolutePath());
+
+ // TODO: What should basedir point to? Let's right now point it to the folder containing the
+ // script file
+ Project antProject = this.buildProject(script, script.getParentFile(), props);
+ this.runTarget(antProject, "pre-uninstall");
+
+
+ }
+
+ private Project buildProject(File scriptFile, File baseDir, Map<String, String> antProperties) throws ScriptProcessingException
+ {
+ if (!scriptFile.exists())
{
- throw new ScriptProcessingException("Ant script " + script.getFile() + " does not exist in " + pkgCtx);
+ throw new ScriptProcessingException("Ant script file " + scriptFile + " does not exist");
}
Project antProject = new Project();
// add our build listener to capture ant logging and other stuff
antProject.addBuildListener(new AntBuildListener());
- // Set the basedir for the ant project to point to the
- // root of the package.xml file of the package being installed
- antProject.setBaseDir(pkgCtx.getPackageRoot());
- // Also set the properties JBOSS_HOME and PM_HOME for the
- // build scripts to use (if they find it necessary)
- antProject.setProperty("JBOSS_HOME", pkgManagerCtx.getJBossServerHome());
- antProject.setProperty("PM_HOME", pkgManagerCtx.getPackageManagerEnvironment().getPackageManagerHome()
- .getAbsolutePath());
+ // Set the basedir for the ant project
+ antProject.setBaseDir(baseDir);
+
+ if (antProperties != null)
+ {
+ Set<Entry<String, String>> entries = antProperties.entrySet();
+ for (Entry<String, String> entry : entries)
+ {
+ String propName = entry.getKey();
+ String propVal = entry.getValue();
+ antProject.setProperty(propName, propVal);
+ }
+
+ }
+ // antProject.setProperty("JBOSS_HOME", pkgManagerCtx.getJBossServerHome());
+ // antProject.setProperty("PM_HOME", pkgManagerCtx.getPackageManagerEnvironment().getPackageManagerHome()
+ // .getAbsolutePath());
// init the project
antProject.init();
ProjectHelper antProjHelper = ProjectHelper.getProjectHelper();
// parse the project from the build file
- antProjHelper.parse(antProject, antBuildFile);
+ antProjHelper.parse(antProject, scriptFile);
- // now run the appropriate target
- String targetName = null;
- PackageInstallationPhase phase = script.getScriptExecutionPhase();
- if (phase == PackageInstallationPhase.PRE_INSTALL)
- {
- targetName = "pre-install";
- }
- else if (phase == PackageInstallationPhase.POST_INSTALL)
- {
- targetName = "post-install";
- }
- else
- {
- throw new ScriptProcessingException(
- "Ant script processor is only capable of running pre-install or post-install scripts. It cannot handle "
- + phase + " for script " + script);
- }
+ return antProject;
+ }
+
+ private void runTarget(Project antProject, String targetName) throws ScriptProcessingException
+ {
// check whether the target exists in the build file
if (!antProject.getTargets().containsKey(targetName))
{
- throw new ScriptProcessingException("Target " + targetName + " not present in Ant script " + antBuildFile
- + " for " + pkgCtx);
+ throw new ScriptProcessingException("Target " + targetName + " not present in Ant script file");
}
- logger.info("Running script " + antBuildFile + " ,target= " + targetName + " for " + pkgCtx);
try
{
antProject.executeTarget(targetName);
}
catch (Exception e)
{
- throw new ScriptProcessingException("Exception while running target " + targetName + " in script "
- + antBuildFile + " for " + pkgCtx);
+ throw new ScriptProcessingException("Exception while running target " + targetName + " in Ant script");
}
}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/tx/JBossJTABasedTransactionManagerLookup.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/tx/JBossJTABasedTransactionManagerLookup.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/tx/JBossJTABasedTransactionManagerLookup.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,71 @@
+/*
+* 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.tx;
+
+import java.util.Properties;
+
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
+import org.hibernate.HibernateException;
+import org.hibernate.transaction.TransactionManagerLookup;
+
+/**
+ * JBossJTABasedTransactionManagerLookup
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class JBossJTABasedTransactionManagerLookup implements TransactionManagerLookup
+{
+
+ /**
+ * @see org.hibernate.transaction.TransactionManagerLookup#getTransactionIdentifier(javax.transaction.Transaction)
+ */
+ @Override
+ public Object getTransactionIdentifier(Transaction transaction)
+ {
+ // we just return back the transaction (and that's allowed as per the javadocs of this method)
+ return transaction;
+ }
+
+ /**
+ * @see org.hibernate.transaction.TransactionManagerLookup#getTransactionManager(java.util.Properties)
+ */
+ @Override
+ public TransactionManager getTransactionManager(Properties props) throws HibernateException
+ {
+ // send back our transaction manager
+ return TransactionManagerImpl.getInstance();
+ }
+
+ /**
+ * @see org.hibernate.transaction.TransactionManagerLookup#getUserTransactionName()
+ */
+ @Override
+ public String getUserTransactionName()
+ {
+ // we return null
+ return null;
+ }
+
+}
Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/tx/TransactionManagerImpl.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/tx/TransactionManagerImpl.java (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/tx/TransactionManagerImpl.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,148 @@
+/*
+* 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.tx;
+
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.InvalidTransactionException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
+/**
+ * TransactionManagerImpl
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class TransactionManagerImpl implements TransactionManager
+{
+
+ private TransactionManager delegate = com.arjuna.ats.jta.TransactionManager.transactionManager();
+
+ private static TransactionManagerImpl singleInstance;
+
+ private TransactionManagerImpl()
+ {
+
+ }
+
+ public synchronized static TransactionManager getInstance()
+ {
+ if (singleInstance == null)
+ {
+ singleInstance = new TransactionManagerImpl();
+ }
+ return singleInstance;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.transaction.TransactionManager#begin()
+ */
+ @Override
+ public void begin() throws NotSupportedException, SystemException
+ {
+ delegate.begin();
+
+ }
+
+ /* (non-Javadoc)
+ * @see javax.transaction.TransactionManager#commit()
+ */
+ @Override
+ public void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException,
+ SecurityException, IllegalStateException, SystemException
+ {
+ delegate.commit();
+
+ }
+
+ /* (non-Javadoc)
+ * @see javax.transaction.TransactionManager#getStatus()
+ */
+ @Override
+ public int getStatus() throws SystemException
+ {
+ return delegate.getStatus();
+ }
+
+ /* (non-Javadoc)
+ * @see javax.transaction.TransactionManager#getTransaction()
+ */
+ @Override
+ public Transaction getTransaction() throws SystemException
+ {
+ return delegate.getTransaction();
+ }
+
+ /* (non-Javadoc)
+ * @see javax.transaction.TransactionManager#resume(javax.transaction.Transaction)
+ */
+ @Override
+ public void resume(Transaction tobj) throws InvalidTransactionException, IllegalStateException, SystemException
+ {
+ delegate.resume(tobj);
+
+ }
+
+ /* (non-Javadoc)
+ * @see javax.transaction.TransactionManager#rollback()
+ */
+ @Override
+ public void rollback() throws IllegalStateException, SecurityException, SystemException
+ {
+ delegate.rollback();
+
+ }
+
+ /* (non-Javadoc)
+ * @see javax.transaction.TransactionManager#setRollbackOnly()
+ */
+ @Override
+ public void setRollbackOnly() throws IllegalStateException, SystemException
+ {
+ delegate.setRollbackOnly();
+
+ }
+
+ /* (non-Javadoc)
+ * @see javax.transaction.TransactionManager#setTransactionTimeout(int)
+ */
+ @Override
+ public void setTransactionTimeout(int seconds) throws SystemException
+ {
+ delegate.setTransactionTimeout(seconds);
+
+ }
+
+ /* (non-Javadoc)
+ * @see javax.transaction.TransactionManager#suspend()
+ */
+ @Override
+ public Transaction suspend() throws SystemException
+ {
+ return delegate.suspend();
+ }
+
+}
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/util/IOUtil.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/util/IOUtil.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/util/IOUtil.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -39,6 +39,13 @@
*/
public class IOUtil
{
+ /**
+ * Copies a file from one location to other
+ *
+ * @param src The source file (should not be a directory)
+ * @param dest The destination file (should not be a directory)
+ * @throws IOException
+ */
public static void copy(File src, File dest) throws IOException
{
FileInputStream fis = new FileInputStream(src);
Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/xml/PackageUnmarshaller.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/xml/PackageUnmarshaller.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/xml/PackageUnmarshaller.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -23,7 +23,6 @@
import java.net.URL;
-import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.XMLEvent;
import org.codehaus.stax2.XMLInputFactory2;
@@ -35,7 +34,9 @@
import org.jboss.ejb3.packagemanager.metadata.PackageType;
import org.jboss.ejb3.packagemanager.metadata.PackagedDependency;
import org.jboss.ejb3.packagemanager.metadata.PostInstallType;
+import org.jboss.ejb3.packagemanager.metadata.PostUnInstallType;
import org.jboss.ejb3.packagemanager.metadata.PreInstallType;
+import org.jboss.ejb3.packagemanager.metadata.PreUnInstallType;
import org.jboss.ejb3.packagemanager.metadata.ScriptType;
import org.jboss.ejb3.packagemanager.metadata.SystemRequirementsType;
import org.jboss.ejb3.packagemanager.metadata.UnProcessedDependenciesType;
@@ -45,8 +46,12 @@
import org.jboss.ejb3.packagemanager.metadata.impl.PackagedDependencyImpl;
import org.jboss.ejb3.packagemanager.metadata.impl.PostInstallImpl;
import org.jboss.ejb3.packagemanager.metadata.impl.PostInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostUnInstallImpl;
+import org.jboss.ejb3.packagemanager.metadata.impl.PostUnInstallScript;
import org.jboss.ejb3.packagemanager.metadata.impl.PreInstallImpl;
import org.jboss.ejb3.packagemanager.metadata.impl.PreInstallScript;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreUnInstallImpl;
+import org.jboss.ejb3.packagemanager.metadata.impl.PreUninstallScript;
import org.jboss.ejb3.packagemanager.metadata.impl.UnProcessedDependenciesImpl;
/**
@@ -68,7 +73,6 @@
public PackageType unmarshal(URL packageXml) throws Exception
{
-
XMLInputFactory2 xmlFactory = (XMLInputFactory2) XMLInputFactory2.newInstance();
XMLStreamReader2 xmlStreamReader = (XMLStreamReader2) xmlFactory.createXMLStreamReader(packageXml.openStream());
@@ -80,7 +84,7 @@
XMLValidationSchema schema = validationSchemaFactory.createSchema(packageXsd);;
// enable validation (note: validation will happen during parse)
xmlStreamReader.validateAgainst(schema);
-
+
// parse the xml
PackageType pkgMetadata = null;
while (xmlStreamReader.hasNext())
@@ -137,11 +141,21 @@
PostInstallType postInstall = processPostInstall(pkgMeta, xmlStreamReader);
pkgMeta.setPostInstall(postInstall);
}
+ else if (childElement.equals("pre-uninstall"))
+ {
+ PreUnInstallType preUnInstall = processPreUnInstall(pkgMeta, xmlStreamReader);
+ pkgMeta.setPreUnInstall(preUnInstall);
+ }
+ else if (childElement.equals("post-uninstall"))
+ {
+ PostUnInstallType postUnInstall = processPostUnInstall(pkgMeta, xmlStreamReader);
+ pkgMeta.setPostUnInstall(postUnInstall);
+ }
else if (childElement.equals("dependencies"))
{
DependenciesType dependencies = this.processDependencies(pkgMeta, xmlStreamReader);
pkgMeta.setDependencies(dependencies);
-
+
}
break;
@@ -159,8 +173,8 @@
* @return
* @throws Exception
*/
- private SystemRequirementsType processSystemRequirements(PackageType pkgMeta,
- XMLStreamReader2 xmlStreamReader) throws Exception
+ private SystemRequirementsType processSystemRequirements(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader)
+ throws Exception
{
// TODO Implement
int event = xmlStreamReader.next();
@@ -210,7 +224,7 @@
event = xmlStreamReader.next();
}
-
+
return fileMeta;
}
@@ -221,8 +235,7 @@
* @return
* @throws Exception
*/
- private PreInstallType processPreInstall(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader)
- throws Exception
+ private PreInstallType processPreInstall(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader) throws Exception
{
PreInstallType preInstall = new PreInstallImpl(pkgMeta);
int event = xmlStreamReader.next();
@@ -234,7 +247,7 @@
String childElement = xmlStreamReader.getLocalName();
if (childElement.equals("script"))
{
- ScriptType script = processPreInstallScript(preInstall, xmlStreamReader);
+ PreInstallScript script = processPreInstallScript(preInstall, xmlStreamReader);
preInstall.addScript(script);
}
break;
@@ -251,9 +264,37 @@
* @return
* @throws Exception
*/
- private PostInstallType processPostInstall(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader)
- throws Exception
+ private PreUnInstallType processPreUnInstall(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader) throws Exception
{
+ PreUnInstallType preInstall = new PreUnInstallImpl(pkgMeta);
+ int event = xmlStreamReader.next();
+ while (event != XMLEvent.END_ELEMENT)
+ {
+ switch (event)
+ {
+ case XMLEvent.START_ELEMENT :
+ String childElement = xmlStreamReader.getLocalName();
+ if (childElement.equals("script"))
+ {
+ PreUninstallScript script = processPreUnInstallScript(preInstall, xmlStreamReader);
+ preInstall.addScript(script);
+ }
+ break;
+ }
+ event = xmlStreamReader.next();
+ }
+ return preInstall;
+ }
+
+ /**
+ *
+ * @param pkgMeta
+ * @param xmlStreamReader
+ * @return
+ * @throws Exception
+ */
+ private PostInstallType processPostInstall(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader) throws Exception
+ {
PostInstallType postInstall = new PostInstallImpl(pkgMeta);
int event = xmlStreamReader.next();
while (event != XMLEvent.END_ELEMENT)
@@ -264,7 +305,7 @@
String childElement = xmlStreamReader.getLocalName();
if (childElement.equals("script"))
{
- ScriptType script = processPostInstallScript(postInstall, xmlStreamReader);
+ PostInstallScript script = processPostInstallScript(postInstall, xmlStreamReader);
postInstall.addScript(script);
}
break;
@@ -276,6 +317,36 @@
/**
*
+ * @param pkgMeta
+ * @param xmlStreamReader
+ * @return
+ * @throws Exception
+ */
+ private PostUnInstallType processPostUnInstall(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader)
+ throws Exception
+ {
+ PostUnInstallType postUnInstall = new PostUnInstallImpl(pkgMeta);
+ int event = xmlStreamReader.next();
+ while (event != XMLEvent.END_ELEMENT)
+ {
+ switch (event)
+ {
+ case XMLEvent.START_ELEMENT :
+ String childElement = xmlStreamReader.getLocalName();
+ if (childElement.equals("script"))
+ {
+ PostUnInstallScript script = processPostUnInstallScript(postUnInstall, xmlStreamReader);
+ postUnInstall.addScript(script);
+ }
+ break;
+ }
+ event = xmlStreamReader.next();
+ }
+ return postUnInstall;
+ }
+
+ /**
+ *
* @param preInstallMeta
* @param xmlStreamReader
* @return
@@ -291,14 +362,29 @@
/**
*
- * @param preInstallMeta
+ * @param preUnInstallMeta
* @param xmlStreamReader
* @return
* @throws Exception
*/
- private PostInstallScript processPostInstallScript(PostInstallType postInstallMeta,
+ private PreUninstallScript processPreUnInstallScript(PreUnInstallType preUnInstallMeta,
XMLStreamReader2 xmlStreamReader) throws Exception
{
+ PreUninstallScript preInstallScript = new PreUninstallScript(preUnInstallMeta);
+ processScript(preInstallScript, xmlStreamReader);
+ return preInstallScript;
+ }
+
+ /**
+ *
+ * @param preInstallMeta
+ * @param xmlStreamReader
+ * @return
+ * @throws Exception
+ */
+ private PostInstallScript processPostInstallScript(PostInstallType postInstallMeta, XMLStreamReader2 xmlStreamReader)
+ throws Exception
+ {
PostInstallScript postInstallScript = new PostInstallScript(postInstallMeta);
processScript(postInstallScript, xmlStreamReader);
return postInstallScript;
@@ -306,19 +392,38 @@
/**
*
+ * @param postUnInstall
* @param xmlStreamReader
* @return
+ * @throws Exception
*/
+ private PostUnInstallScript processPostUnInstallScript(PostUnInstallType postUnInstall,
+ XMLStreamReader2 xmlStreamReader) throws Exception
+ {
+ PostUnInstallScript postUnInstallScript = new PostUnInstallScript(postUnInstall);
+ processScript(postUnInstallScript, xmlStreamReader);
+ return postUnInstallScript;
+ }
+
+ /**
+ *
+ * @param xmlStreamReader
+ * @return
+ */
private ScriptType processScript(ScriptType script, XMLStreamReader2 xmlStreamReader) throws Exception
{
for (int i = 0; i < xmlStreamReader.getAttributeCount(); i++)
{
- String name = xmlStreamReader.getAttributeLocalName(i);
- if ("file".equals(name))
+ String attrName = xmlStreamReader.getAttributeLocalName(i);
+ if ("name".equals(attrName))
{
- script.setFile(xmlStreamReader.getAttributeValue(i));
+ script.setName(xmlStreamReader.getAttributeValue(i));
}
+ else if ("path".equals(attrName))
+ {
+ script.setPath(xmlStreamReader.getAttributeValue(i));
+ }
}
// consume the end event of file
@@ -328,11 +433,12 @@
event = xmlStreamReader.next();
}
-
+
return script;
}
-
- private DependenciesType processDependencies(PackageType pkgMetadata, XMLStreamReader2 xmlStreamReader) throws Exception
+
+ private DependenciesType processDependencies(PackageType pkgMetadata, XMLStreamReader2 xmlStreamReader)
+ throws Exception
{
DependenciesType depMetadata = new DependenciesImpl(pkgMetadata);
int event = xmlStreamReader.next();
@@ -344,7 +450,8 @@
String childElement = xmlStreamReader.getLocalName();
if (childElement.equals("unprocessed-dependencies"))
{
- UnProcessedDependenciesType unProcessedDeps = processUnProcessedDependencies(pkgMetadata, xmlStreamReader);
+ UnProcessedDependenciesType unProcessedDeps = processUnProcessedDependencies(pkgMetadata,
+ xmlStreamReader);
depMetadata.setUnProcessedDependencies(unProcessedDeps);
}
else if (childElement.equals("packaged-dependency"))
@@ -353,14 +460,15 @@
depMetadata.addPackagedDependency(packagedDep);
}
break;
-
+
}
event = xmlStreamReader.next();
}
return depMetadata;
}
-
- private UnProcessedDependenciesType processUnProcessedDependencies(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader) throws Exception
+
+ private UnProcessedDependenciesType processUnProcessedDependencies(PackageType pkgMeta,
+ XMLStreamReader2 xmlStreamReader) throws Exception
{
UnProcessedDependenciesType unProcessedDep = new UnProcessedDependenciesImpl(pkgMeta);
for (int i = 0; i < xmlStreamReader.getAttributeCount(); i++)
@@ -385,8 +493,9 @@
}
return unProcessedDep;
}
-
- private PackagedDependency processPackagedDependency(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader) throws Exception
+
+ private PackagedDependency processPackagedDependency(PackageType pkgMeta, XMLStreamReader2 xmlStreamReader)
+ throws Exception
{
PackagedDependency packagedDep = new PackagedDependencyImpl(pkgMeta);
for (int i = 0; i < xmlStreamReader.getAttributeCount(); i++)
Modified: projects/ejb3/trunk/package-manager/src/main/resources/META-INF/persistence.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/resources/META-INF/persistence.xml 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/resources/META-INF/persistence.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -1,19 +1,22 @@
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0">
- <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
+ <persistence-unit name="default" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- <class>org.jboss.ejb3.packagemanager.metadata.impl.PackageImpl</class> -->
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
- <property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver"/>
+ <property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedXADataSource"/>
+ <!-- <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/>-->
+ <property name="hibernate.transaction.manager_lookup_class" value="org.jboss.ejb3.packagemanager.tx.JBossJTABasedTransactionManagerLookup"/>
<!-- <property name="hibernate.connection.username" value="sa"/>
<property name="hibernate.connection.password" value=""/> -->
<property name="hibernate.connection.url" value="jdbc:derby:pmdb"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<!-- <property name="hibernate.hbm2ddl.auto" value="create-drop"/> -->
- <property name="hibernate.connection.autocommit" value="false"/>
+ <!-- <property name="hibernate.connection.autocommit" value="false"/> -->
+ <!-- <property name="hibernate.connection.release_mode" value="on_close"/> -->
<!--
<property name="hibernate.connection.isolation" value="2"/> -->
Modified: projects/ejb3/trunk/package-manager/src/main/resources/log4j.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/resources/log4j.xml 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/resources/log4j.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -23,7 +23,7 @@
<!-- A time/date based rolling appender -->
<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
<param name="File" value="log/test.log"/>
- <param name="Threshold" value="DEBUG"/>
+
<param name="Append" value="false"/>
<!-- Rollover at midnight each day -->
@@ -35,7 +35,7 @@
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+ <param name="ConversionPattern" value="%d %-5p [%t] [%c] %m%n"/>
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
@@ -52,7 +52,7 @@
<param name="Threshold" value="INFO"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%t] [%c{1}] %m%n"/>
</layout>
</appender>
@@ -64,7 +64,9 @@
<!-- ======================= -->
<!-- Setup the Root category -->
<!-- ======================= -->
-
+ <category name="org.hibernate">
+ <priority value="ALL"/>
+ </category>
<root>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
Modified: projects/ejb3/trunk/package-manager/src/main/resources/package.xsd
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/resources/package.xsd 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/resources/package.xsd 2009-11-10 20:54:11 UTC (rev 96233)
@@ -170,14 +170,15 @@
<xs:annotation>
<xs:documentation>
A script element points to a Ant build script file.
- The file attribute of this element contains the path of the script, relative to the location of
+ The name attribute of the this elements contains the name of the script file. By default
+ this is "package-script.xml"
+ The path attribute of this element contains the path of the script, relative to the location of
package.xml in the package.
- By default the file attribute value is "package-script.xml"
-
</xs:documentation>
</xs:annotation>
- <xs:attribute name="file" type="xs:string" use="optional" default="package-script.xml"/>
+ <xs:attribute name="name" type="xs:string" use="optional" default="package-script.xml"/>
+ <xs:attribute name="path" type="xs:string" use="optional"/>
<!--<xs:attribute name="processor" type="xs:string" use="optional"
default="org.jboss.ejb3.packagemanager.script.impl.AntScriptProcessor"/> -->
</xs:complexType>
Modified: projects/ejb3/trunk/package-manager/src/main/resources/schema.sql
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/resources/schema.sql 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/main/resources/schema.sql 2009-11-10 20:54:11 UTC (rev 96233)
@@ -30,6 +30,18 @@
);
+-- Script file
+-- DROP TABLE installation_file;
+CREATE TABLE script (
+ id bigint not null GENERATED ALWAYS AS IDENTITY CONSTRAINT SCRIPT_PK PRIMARY KEY,
+ package_name varchar(255) not null,
+ name varchar(255) not null,
+ path varchar(255) not null,
+ scriptType varchar(255) not null,
+ foreign key (package_name) references package (name)
+
+);
+
-- Package dependencies
-- DROP TABLE package_dependency;
CREATE TABLE package_dependency (
Modified: projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/commandline/unit/CommandLineTestCase.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/commandline/unit/CommandLineTestCase.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/commandline/unit/CommandLineTestCase.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -25,8 +25,8 @@
import org.jboss.ejb3.packagemanager.PackageManager;
import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
+import org.jboss.ejb3.packagemanager.PackageManagerFactory;
import org.jboss.ejb3.packagemanager.exception.PackageNotInstalledException;
-import org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl;
import org.jboss.ejb3.packagemanager.main.Main;
import org.jboss.ejb3.packagemanager.test.common.PackageManagerTestCase;
import org.jboss.logging.Logger;
@@ -45,12 +45,8 @@
private static Logger logger = Logger.getLogger(CommandLineTestCase.class);
+
/**
- * Package manager
- */
- private static PackageManager pkgMgr;
-
- /**
* The JBoss Home used in each test
*/
private static File jbossHome;
@@ -69,8 +65,8 @@
{
pkgMgrHome = setupPackageManagerHome(CommandLineTestCase.class);
jbossHome = setupDummyJBoss(CommandLineTestCase.class);
- PackageManagerEnvironment env = new PackageManagerEnvironment(pkgMgrHome.getAbsolutePath());
- pkgMgr = new DefaultPackageManagerImpl(env, jbossHome.getAbsolutePath());
+
+
}
/**
Modified: projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/PackageManagerTestCase.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/PackageManagerTestCase.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/PackageManagerTestCase.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -97,6 +97,12 @@
private static void setupDatabase(File dbHome) throws IOException, SQLException
{
System.setProperty("derby.system.home", dbHome.getAbsolutePath());
+// System.setProperty("derby.stream.error.logSeverityLevel", "20000");
+// System.setProperty("derby.language.logStatementText", "true");
+// //System.setProperty("derby.locks.escalationThreshold", "50000");
+//
+// System.setProperty("derby.locks.monitor", "true");
+// System.setProperty("derby.locks.deadlockTrace", "true");
InputStream sql = Thread.currentThread().getContextClassLoader().getResourceAsStream(PACKAGE_MANAGER_DB_SCHEMA_FILE_NAME);
if (sql == null)
@@ -105,7 +111,17 @@
"Could not find package-manager-sql-scripts.sql in classpath - Cannot setup database");
}
Connection conn = DriverManager.getConnection("jdbc:derby:pmdb;create=true");
- DBUtil.runSql(conn, sql);
+ try
+ {
+ DBUtil.runSql(conn, sql);
+ }
+ finally
+ {
+ if (conn != null)
+ {
+ conn.close();
+ }
+ }
logger.info("Successfully setup package manager database at " + dbHome);
}
@@ -336,25 +352,149 @@
*/
protected File createPackageWithPreInstallScript(String packageFileName) throws IOException
{
- File dummyJar = this.createDummyJar();
-
- // Now let's package the dummy.jar, package.xml and build.xml into a package
- File packageWithPreInstallScript = new File(getPerTestTargetDir(this.getClass()), packageFileName);
- JavaArchive pkg = JavaArchiveFactory.create(packageWithPreInstallScript.getName());
- pkg.addResource("dummy.jar", dummyJar);
+
URL packageXmlURL = this.getResource(PackageManagerTestCase.class, "package-with-pre-install-script.xml");
File packageXmlFile = new File(packageXmlURL.getFile());
- pkg.addResource("package.xml", packageXmlFile);
URL buildXmlURL = this.getResource(PackageManagerTestCase.class, "build.xml");
File buildFile = new File(buildXmlURL.getFile());
- pkg.addResource("build.xml", buildFile);
+ return this.createPackageWithScript(packageFileName, buildFile, packageXmlFile);
+ }
+
+
+
+ /**
+ * Creates a package containing a file to install and a pre-install script. The package
+ * will look as follows:
+ *
+ * <package-name>
+ * |
+ * |--- dummy.jar
+ * |
+ * |--- package.xml
+ * |
+ * |--- build.xml
+ *
+ * The package.xml is configured to install the dummy.jar to JBOSS_HOME/server/default/deploy.
+ * Additionally, the package.xml is also configured for the pre-install script named build.xml,
+ * which is available at the root of the package. The build.xml script is implemented
+ * to place a file named "pre-uninstall.txt" under JBOSS_HOME/bin folder, when the script is run.
+ *
+ * @param packageFileName The name of the package to be created. Ex: simple-package.jar
+ * Note: It is mandatory to specify the extension (.jar) which passing the packageFileName
+ * @return Returns the {@link File} corresponding the to the created package
+ * @throws IOException If any IO exceptions occur during the package creation
+ */
+ protected File createPackageWithPreUnInstallScript(String packageFileName) throws IOException
+ {
+
+ URL packageXmlURL = this.getResource(PackageManagerTestCase.class, "package-with-pre-uninstall-script.xml");
+ File packageXmlFile = new File(packageXmlURL.getFile());
+ URL buildXmlURL = this.getResource(PackageManagerTestCase.class, "build.xml");
+ File buildFile = new File(buildXmlURL.getFile());
+ return this.createPackageWithScript(packageFileName, buildFile, packageXmlFile);
+ }
+
+ /**
+ * Creates a package containing a file to install and a pre-install script. The package
+ * will look as follows:
+ *
+ * <package-name>
+ * |
+ * |--- dummy.jar
+ * |
+ * |--- package.xml
+ * |
+ * |--- build.xml
+ *
+ * The package.xml is configured to install the dummy.jar to JBOSS_HOME/server/default/deploy.
+ * Additionally, the package.xml is also configured for the pre-install script named build.xml,
+ * which is available at the root of the package. The build.xml script is implemented
+ * to place a file named "post-install.txt" under JBOSS_HOME/bin folder, when the script is run.
+ *
+ * @param packageFileName The name of the package to be created. Ex: simple-package.jar
+ * Note: It is mandatory to specify the extension (.jar) which passing the packageFileName
+ * @return Returns the {@link File} corresponding the to the created package
+ * @throws IOException If any IO exceptions occur during the package creation
+ */
+ protected File createPackageWithPostInstallScript(String packageFileName) throws IOException
+ {
+
+ URL packageXmlURL = this.getResource(PackageManagerTestCase.class, "package-with-post-install-script.xml");
+ File packageXmlFile = new File(packageXmlURL.getFile());
+ URL buildXmlURL = this.getResource(PackageManagerTestCase.class, "build.xml");
+ File buildFile = new File(buildXmlURL.getFile());
+ return this.createPackageWithScript(packageFileName, buildFile, packageXmlFile);
+ }
+
+ /**
+ * Creates a package containing a file to install and a pre-install script. The package
+ * will look as follows:
+ *
+ * <package-name>
+ * |
+ * |--- dummy.jar
+ * |
+ * |--- package.xml
+ * |
+ * |--- build.xml
+ *
+ * The package.xml is configured to install the dummy.jar to JBOSS_HOME/server/default/deploy.
+ * Additionally, the package.xml is also configured for the post-uninstall script named build.xml,
+ * which is available at the root of the package. The build.xml script is implemented
+ * to place a file named "post-uninstall.txt" from JBOSS_HOME/bin folder
+ *
+ * @param packageFileName The name of the package to be created. Ex: simple-package.jar
+ * Note: It is mandatory to specify the extension (.jar) which passing the packageFileName
+ * @return Returns the {@link File} corresponding the to the created package
+ * @throws IOException If any IO exceptions occur during the package creation
+ */
+ protected File createPackageWithPostUnInstallScript(String packageFileName) throws IOException
+ {
+
+ URL packageXmlURL = this.getResource(PackageManagerTestCase.class, "package-with-post-uninstall-script.xml");
+ File packageXmlFile = new File(packageXmlURL.getFile());
+ URL buildXmlURL = this.getResource(PackageManagerTestCase.class, "build.xml");
+ File buildFile = new File(buildXmlURL.getFile());
+ return this.createPackageWithScript(packageFileName, buildFile, packageXmlFile);
+ }
+
+
+ /**
+ * Utility method to create a package with a script file.
+ *
+ * The package
+ * will look as follows:
+ *
+ * <package-name>
+ * |
+ * |--- dummy.jar
+ * |
+ * |--- package.xml
+ * |
+ * |--- [script-file]
+ *
+ * @param packageFileName Package file name
+ * @param scriptFile Script file
+ * @param packageXmlFile package.xml
+ * @return Returns the created package
+ * @throws IOException
+ */
+ private File createPackageWithScript(String packageFileName, File scriptFile, File packageXmlFile) throws IOException
+ {
+ File dummyJar = this.createDummyJar();
+ File packageWithScript = new File(getPerTestTargetDir(this.getClass()), packageFileName);
+ JavaArchive pkg = JavaArchiveFactory.create(packageWithScript.getName());
+ pkg.addResource("dummy.jar", dummyJar);
+ pkg.addResource("package.xml", packageXmlFile);
+ pkg.addResource(scriptFile.getName(), scriptFile);
+
// now write out the package to disk
logger.debug("Writing out the created package " + pkg.toString(true));
- this.exportZip(pkg, packageWithPreInstallScript);
- return packageWithPreInstallScript;
+ this.exportZip(pkg, packageWithScript);
+ return packageWithScript;
}
-
+
/**
* Creates a package containing a file to install and a packaged-dependency. The package
* will look as follows:
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 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/dependency/unit/DependencyInstallTestCase.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -28,9 +28,8 @@
import org.jboss.ejb3.packagemanager.PackageManager;
import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
-import org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl;
+import org.jboss.ejb3.packagemanager.PackageManagerFactory;
import org.jboss.ejb3.packagemanager.test.common.PackageManagerTestCase;
-import org.jboss.ejb3.packagemanager.test.uninstall.unit.UnInstallTestCase;
import org.jboss.logging.Logger;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchiveFactory;
@@ -78,7 +77,7 @@
pkgMgrHome = setupPackageManagerHome(DependencyInstallTestCase.class);
jbossHome = setupDummyJBoss(DependencyInstallTestCase.class);
PackageManagerEnvironment env = new PackageManagerEnvironment(pkgMgrHome.getAbsolutePath());
- pkgMgr = new DefaultPackageManagerImpl(env, jbossHome.getAbsolutePath());
+ pkgMgr = PackageManagerFactory.getDefaultPackageManager(env, jbossHome.getAbsolutePath());
}
/**
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 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/install/unit/BasicInstallTestCase.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -26,6 +26,7 @@
import org.jboss.ejb3.packagemanager.PackageManager;
import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
+import org.jboss.ejb3.packagemanager.PackageManagerFactory;
import org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl;
import org.jboss.ejb3.packagemanager.main.Main;
import org.jboss.ejb3.packagemanager.test.common.PackageManagerTestCase;
@@ -73,7 +74,7 @@
pkgMgrHome = setupPackageManagerHome(BasicInstallTestCase.class);
jbossHome = setupDummyJBoss(BasicInstallTestCase.class);
PackageManagerEnvironment env = new PackageManagerEnvironment(pkgMgrHome.getAbsolutePath());
- pkgMgr = new DefaultPackageManagerImpl(env, jbossHome.getAbsolutePath());
+ pkgMgr = PackageManagerFactory.getDefaultPackageManager(env, jbossHome.getAbsolutePath());
}
/**
Modified: projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/uninstall/unit/UnInstallTestCase.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/uninstall/unit/UnInstallTestCase.java 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/uninstall/unit/UnInstallTestCase.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -25,6 +25,7 @@
import org.jboss.ejb3.packagemanager.PackageManager;
import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
+import org.jboss.ejb3.packagemanager.PackageManagerFactory;
import org.jboss.ejb3.packagemanager.exception.PackageNotInstalledException;
import org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl;
import org.jboss.ejb3.packagemanager.test.common.PackageManagerTestCase;
@@ -72,7 +73,7 @@
pkgMgrHome = setupPackageManagerHome(UnInstallTestCase.class);
jbossHome = setupDummyJBoss(UnInstallTestCase.class);
PackageManagerEnvironment env = new PackageManagerEnvironment(pkgMgrHome.getAbsolutePath());
- pkgMgr = new DefaultPackageManagerImpl(env, jbossHome.getAbsolutePath());
+ pkgMgr = PackageManagerFactory.getDefaultPackageManager(env, jbossHome.getAbsolutePath());
}
@@ -160,5 +161,34 @@
this.assertFileExistenceUnderJBossHome(jbossHome, "common/lib/dummy.jar");
}
+
+ /**
+ * Tests that the post-uninstall script runs during the uninstall process
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testPostUnInstallScriptExecution() throws Exception
+ {
+ File postUnInstallScriptPackage = this.createPackageWithPostUnInstallScript("post-uninstall-test-package.jar");
+
+ // As a sanity check, ensure that the file supposed to be created by our post-uninstall
+ // step is not already present
+ this.assertFileAbsenceUnderJBossHome(jbossHome, "bin/post-uninstall.txt");
+
+ // first install
+ pkgMgr.installPackage(postUnInstallScriptPackage.getAbsolutePath());
+
+ // simple check to ensure installation was successful
+ this.assertFileExistenceUnderJBossHome(jbossHome, "server/default/deploy/dummy.jar");
+
+ // now uninstall
+ pkgMgr.removePackage("common-package-with-post-uninstall");
+ // make sure uninstall was successful
+ this.assertFileAbsenceUnderJBossHome(jbossHome, "server/default/deploy/dummy.jar");
+ // check that post-uninstall script was run
+ this.assertFileExistenceUnderJBossHome(jbossHome, "bin/post-uninstall.txt");
+
+ }
}
Added: 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 (rev 0)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/upgrade/unit/UpgradeUnitTestCase.java 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,92 @@
+/*
+* 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.test.upgrade.unit;
+
+import java.io.File;
+
+import org.jboss.ejb3.packagemanager.PackageManager;
+import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
+import org.jboss.ejb3.packagemanager.PackageManagerFactory;
+import org.jboss.ejb3.packagemanager.test.common.PackageManagerTestCase;
+import org.jboss.logging.Logger;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * UpgradeUnitTestCase
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class UpgradeUnitTestCase extends PackageManagerTestCase
+{
+
+ /**
+ * Logger
+ */
+ private static Logger logger = Logger.getLogger(UpgradeUnitTestCase.class);
+
+ /**
+ * Package manager
+ */
+ private static PackageManager pkgMgr;
+
+ /**
+ * The JBoss Home used in each test
+ */
+ private static File jbossHome;
+
+ /**
+ * Package manager home used in each test
+ */
+ private static File pkgMgrHome;
+
+ private static File perTestTargetDir = getPerTestTargetDir(UpgradeUnitTestCase.class);
+
+ /**
+ * Do the necessary setup
+ * @throws Exception
+ */
+ @BeforeClass
+ public static void beforeClass() throws Exception
+ {
+ pkgMgrHome = setupPackageManagerHome(UpgradeUnitTestCase.class);
+ jbossHome = setupDummyJBoss(UpgradeUnitTestCase.class);
+ PackageManagerEnvironment env = new PackageManagerEnvironment(pkgMgrHome.getAbsolutePath());
+ pkgMgr = PackageManagerFactory.getDefaultPackageManager(env, jbossHome.getAbsolutePath());
+ }
+
+ @Test
+ public void testSimpleUpgrade() throws Exception
+ {
+ // first install a simple package, then call upgrade on the same package
+ File simplePackage = this.createSimplePackage("simple-package.jar");
+
+ this.pkgMgr.installPackage(simplePackage.getAbsolutePath());
+
+ this.assertFileExistenceUnderJBossHome(jbossHome, "common/lib/dummy.jar");
+
+ // now upgrade
+ this.pkgMgr.updatePackage(simplePackage.getAbsolutePath());
+ this.assertFileExistenceUnderJBossHome(jbossHome, "common/lib/dummy.jar");
+ }
+}
Modified: projects/ejb3/trunk/package-manager/src/test/resources/log4j.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/resources/log4j.xml 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/resources/log4j.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -23,7 +23,7 @@
<!-- A time/date based rolling appender -->
<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
<param name="File" value="target/test.log"/>
- <param name="Threshold" value="DEBUG"/>
+
<param name="Append" value="false"/>
<!-- Rollover at midnight each day -->
@@ -35,7 +35,7 @@
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+ <param name="ConversionPattern" value="%d %-5p [%t] [%c] %m%n"/>
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
@@ -52,7 +52,7 @@
<!-- <param name="Threshold" value="INFO"/> -->
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%t] [%c{1}] %m%n"/>
</layout>
</appender>
@@ -69,7 +69,9 @@
<priority value="ALL"/>
</category>
-
+ <category name="org.hibernate">
+ <priority value="ALL"/>
+ </category>
<!-- ======================= -->
<!-- Setup the Root category -->
<!-- ======================= -->
Modified: projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/build.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/build.xml 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/build.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -34,4 +34,32 @@
<echo file="${JBOSS_HOME}/bin/test.txt" message="This proves that the pre-install script was run"/>
<echo level="debug" message="Test property value is = ${test}"/>
</target>
+
+ <target name="post-install">
+ <echo level="info">***************************************************************</echo>
+ <echo level="info">This is the post-install target in the dummy package!</echo>
+ <echo level="info">Package manager home is = ${PM_HOME}</echo>
+ <echo level="info">JBoss AS home is = ${JBOSS_HOME}</echo>
+ <echo level="info">***************************************************************</echo>
+ <echo file="${JBOSS_HOME}/bin/post-install.txt" message="This proves that the post-install script was run"/>
+ </target>
+
+ <target name="pre-uninstall">
+ <echo level="info">***************************************************************</echo>
+ <echo level="info">This is the pre-uninstall target in the dummy package!</echo>
+ <echo level="info">Package manager home is = ${PM_HOME}</echo>
+ <echo level="info">JBoss AS home is = ${JBOSS_HOME}</echo>
+ <echo level="info">***************************************************************</echo>
+ <echo file="${JBOSS_HOME}/bin/pre-uninstall.txt" message="This proves that the pre-uninstall script was run"/>
+ </target>
+
+ <target name="post-uninstall">
+ <echo level="info">***************************************************************</echo>
+ <echo level="info">This is the post-uninstall target in the dummy package!</echo>
+ <echo level="info">Package manager home is = ${PM_HOME}</echo>
+ <echo level="info">JBoss AS home is = ${JBOSS_HOME}</echo>
+ <echo level="info">***************************************************************</echo>
+ <echo file="${JBOSS_HOME}/bin/post-uninstall.txt" message="This proves that the post-uninstall script was run"/>
+ </target>
+
</project>
\ No newline at end of file
Added: projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-post-install-script.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-post-install-script.xml (rev 0)
+++ projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-post-install-script.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,11 @@
+<sh:package name="common-package-with-post-install" version="1.0.0-Alpha1"
+xmlns:sh="http://www.jboss.org/schema">
+
+ <!-- Package to install a dummy jar into JBOSS_AS/server/default/deploy -->
+ <file name="dummy.jar" dest-path="server/default/deploy" type="library"/>
+
+ <post-install>
+ <script name="build.xml"/>
+ </post-install>
+
+</sh:package>
\ No newline at end of file
Added: projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-post-uninstall-script.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-post-uninstall-script.xml (rev 0)
+++ projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-post-uninstall-script.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,11 @@
+<sh:package name="common-package-with-post-uninstall" version="1.0.0-Alpha1"
+xmlns:sh="http://www.jboss.org/schema">
+
+ <!-- Package to install a dummy jar into JBOSS_AS/server/default/deploy -->
+ <file name="dummy.jar" dest-path="server/default/deploy" type="library"/>
+
+ <post-uninstall>
+ <script name="build.xml"/>
+ </post-uninstall>
+
+</sh:package>
\ No newline at end of file
Modified: projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-pre-install-script.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-pre-install-script.xml 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-pre-install-script.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -5,7 +5,7 @@
<file name="dummy.jar" dest-path="server/default/deploy" type="library"/>
<pre-install>
- <script file="build.xml"/>
+ <script name="build.xml"/>
</pre-install>
</sh:package>
\ No newline at end of file
Added: projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-pre-uninstall-script.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-pre-uninstall-script.xml (rev 0)
+++ projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/common/package-with-pre-uninstall-script.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -0,0 +1,11 @@
+<sh:package name="common-package-with-pre-uninstall" version="1.0.0-Alpha1"
+xmlns:sh="http://www.jboss.org/schema">
+
+ <!-- Package to install a dummy jar into JBOSS_AS/server/default/deploy -->
+ <file name="dummy.jar" dest-path="server/default/deploy" type="library"/>
+
+ <pre-uninstall>
+ <script name="build.xml"/>
+ </pre-uninstall>
+
+</sh:package>
\ No newline at end of file
Modified: projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package1.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package1.xml 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package1.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -5,7 +5,7 @@
<file name="dummy1.jar" dest-path="server/default/deployers" type="library"/>
<pre-install>
- <script file="scripts/pre-install-build.xml"/>
+ <script path="scripts" name="pre-install-build.xml"/>
</pre-install>
</sh:package>
\ No newline at end of file
Modified: projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package2.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package2.xml 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package2.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -5,7 +5,7 @@
<file name="dummy2.jar" dest-path="server/default/deployers" type="library"/>
<post-install>
- <script file="scripts/post-install-build.xml"/>
+ <script path="scripts" name="post-install-build.xml"/>
</post-install>
</sh:package>
\ No newline at end of file
Modified: projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package3.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package3.xml 2009-11-10 20:52:56 UTC (rev 96232)
+++ projects/ejb3/trunk/package-manager/src/test/resources/org/jboss/ejb3/packagemanager/test/dependency/unit/dependee-package3.xml 2009-11-10 20:54:11 UTC (rev 96233)
@@ -5,11 +5,11 @@
<file name="dummy3.jar" dest-path="server/default/deployers" type="library"/>
<pre-install>
- <script file="build.xml"/>
+ <script name="build.xml"/>
</pre-install>
<post-install>
- <script file="build.xml"/>
+ <script name="build.xml"/>
</post-install>
</sh:package>
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list