[jboss-cvs] JBossAS SVN: r95993 - in projects/ejb3/trunk/package-manager: src/main and 10 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 4 05:31:05 EST 2009


Author: jaikiran
Date: 2009-11-04 05:31:04 -0500 (Wed, 04 Nov 2009)
New Revision: 95993

Added:
   projects/ejb3/trunk/package-manager/src/main/assemble/
   projects/ejb3/trunk/package-manager/src/main/assemble/assemble.xml
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/util/DBUtil.java
   projects/ejb3/trunk/package-manager/src/main/resources/run.sh
   projects/ejb3/trunk/package-manager/src/main/resources/schema.sql
   projects/ejb3/trunk/package-manager/src/main/resources/setup.sh
Removed:
   projects/ejb3/trunk/package-manager/src/main/resources/package-manager-sql-scripts.sql
   projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/DBUtil.java
Modified:
   projects/ejb3/trunk/package-manager/pom.xml
   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/InstalledFile.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/entity/PackageDependency.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerImpl.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Main.java
   projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/script/impl/AntScriptProcessor.java
   projects/ejb3/trunk/package-manager/src/main/resources/log4j.xml
   projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/PackageManagerTestCase.java
Log:
EJBTHREE-1942 Package manager implementation - setup and run scripts added

Modified: projects/ejb3/trunk/package-manager/pom.xml
===================================================================
--- projects/ejb3/trunk/package-manager/pom.xml	2009-11-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/pom.xml	2009-11-04 10:31:04 UTC (rev 95993)
@@ -73,6 +73,27 @@
                     <argLine>-ea</argLine>
                 </configuration>
             </plugin>
+            
+            <!-- Assembly Plugin -->
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>2.2-beta-4</version>
+                <executions>
+                  <execution>
+                    <id>make-assembly</id> 
+                    <phase>package</phase>
+                    <goals>
+                      <goal>single</goal>
+                    </goals>
+                  </execution>
+                </executions>
+                <configuration>
+                  <descriptors>
+                    <descriptor>src/main/assemble/assemble.xml</descriptor>
+                  </descriptors>
+                </configuration>
+                <inherited>false</inherited>
+              </plugin>
         </plugins>
     </build>
     
@@ -117,10 +138,11 @@
         
         
         <!-- Command line parsing -->
+        
         <dependency>
-            <groupId>gnu-getopt</groupId>
-            <artifactId>getopt</artifactId>
-            <version>1.0.13</version>
+            <groupId>net.sf</groupId>
+            <artifactId>jargs</artifactId>
+            <version>1.0</version>
         </dependency>
         
         

Added: projects/ejb3/trunk/package-manager/src/main/assemble/assemble.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/assemble/assemble.xml	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/assemble/assemble.xml	2009-11-04 10:31:04 UTC (rev 95993)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<assembly xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.1.1.xsd"
+>
+  <id>package-manager</id>
+  <formats>
+    <format>tar.gz</format>
+    <!-- <format>tar.bz2</format> -->
+    <format>zip</format>
+  </formats>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources</directory>
+      <includes>
+        <include>schema.sql</include>
+      </includes>
+      <outputDirectory>script</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>src/main/resources</directory>
+      <includes>
+        <include>setup.sh</include>
+      </includes>
+      <outputDirectory>bin</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>src/main/resources</directory>
+      <includes>
+        <include>setup.sh</include>
+        <include>run.sh</include>
+      </includes>
+      <outputDirectory>bin</outputDirectory>
+    </fileSet>
+   
+  </fileSets>
+  <dependencySets>
+    <dependencySet>
+      <outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
+      <useProjectArtifact>true</useProjectArtifact>
+      <outputDirectory>lib</outputDirectory>
+    </dependencySet>
+    
+  </dependencySets>
+</assembly>

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-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/PackageManagerEnvironment.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -40,7 +40,7 @@
    private File packageManagerBuildDir;
 
    private File packageManagerTmpDir;
-   
+
    private Map<String, String> properties = new HashMap<String, String>();
 
    /**
@@ -50,12 +50,12 @@
    {
       this(home, new HashMap<String, String>());
    }
-   
+
    public PackageManagerEnvironment(String home, Map<String, String> props)
    {
       this.packageManagerHome = new File(home);
       this.properties = props == null ? new HashMap<String, String>() : props;
-      
+
       if (!this.packageManagerHome.exists() || !this.packageManagerHome.isDirectory())
       {
          throw new RuntimeException("Package manager home " + home + " doesn't exist or is not a directory");
@@ -76,6 +76,7 @@
       {
          this.packageManagerTmpDir.mkdirs();
       }
+
    }
 
    public File getPackageManagerHome()
@@ -92,18 +93,18 @@
    {
       return this.packageManagerTmpDir;
    }
-   
+
    public String getProperty(String propertyName)
    {
       return this.properties.get(propertyName);
    }
-   
+
    public void setProperty(String propertyName, String propertyValue)
    {
       this.properties.put(propertyName, propertyValue);
-      
+
    }
-   
+
    public Map<String, String> getProperties()
    {
       return Collections.unmodifiableMap(this.properties);

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-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/DefaultDatabaseManager.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -21,6 +21,7 @@
 */
 package org.jboss.ejb3.packagemanager.db;
 
+import java.io.File;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -34,10 +35,12 @@
 
 import org.jboss.ejb3.packagemanager.PackageContext;
 import org.jboss.ejb3.packagemanager.PackageManagerContext;
+import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
 import org.jboss.ejb3.packagemanager.entity.InstalledFile;
 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.exception.PackageManagerException;
 import org.jboss.ejb3.packagemanager.exception.PackageNotInstalledException;
 import org.jboss.ejb3.packagemanager.metadata.InstallFileType;
 import org.jboss.logging.Logger;
@@ -74,11 +77,16 @@
    public DefaultDatabaseManager(PackageManagerContext pkgMgrCtx)
    {
       this.packageManagerCtx = pkgMgrCtx;
-
-      // TODO: Set it in a better way
-      //      String jbossServerDataDir = pkgMgrCtx.getJBossServerHome() + "/server/default/data";
-      //      System.setProperty("derby.system.home", "/home/jpai/pm");
-      System.out.println("Derby system home is " + System.getProperty("derby.system.home"));
+      PackageManagerEnvironment environment = pkgMgrCtx.getPackageManagerEnvironment();
+      // we use derby (filesystem) based DB
+      File dbHome = new File(environment.getPackageManagerHome(), "data");
+      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");
 
    }
@@ -120,7 +128,15 @@
       tx.begin();
       PackageManagerEntity packageManager = this.getOrCreatePackageManagerEntity(this.packageManagerCtx);
 
-      InstalledPackage newlyInstalledPackage = this.createPackage(packageManager, pkgCtx);
+      InstalledPackage newlyInstalledPackage;
+      try
+      {
+         newlyInstalledPackage = this.createPackage(packageManager, pkgCtx);
+      }
+      catch (PackageManagerException pme)
+      {
+         throw new RuntimeException(pme);
+      }
 
       try
       {
@@ -143,7 +159,7 @@
     * @see org.jboss.ejb3.packagemanager.db.PackageDatabaseManager#getInstalledPackage(java.lang.String)
     */
    @Override
-   public InstalledPackage getInstalledPackage(String name)
+   public InstalledPackage getInstalledPackage(String name) throws PackageNotInstalledException
    {
       EntityManager em = this.getEntityManager();
       PackageManagerEntity packageManager = this.getOrCreatePackageManagerEntity(this.packageManagerCtx);
@@ -175,12 +191,12 @@
     * @see org.jboss.ejb3.packagemanager.db.PackageDatabaseManager#getDependentPackages(java.lang.String)
     */
    @Override
-   public Set<InstalledPackage> getDependentPackages(String name)
+   public Set<InstalledPackage> getDependentPackages(String name) throws PackageNotInstalledException
    {
       InstalledPackage installedPackage = this.getInstalledPackage(name);
       EntityManager em = this.getEntityManager();
       Query query = em.createQuery("select pd.dependentPackage from " + PackageDependency.class.getSimpleName()
-            + " pd " + "join pd.dependeePackage p " + " where p.id=" + installedPackage.getId());
+            + " pd " + "join pd.dependeePackage p " + " where p.name='" + installedPackage.getPackageName() + "'");
 
       List<InstalledPackage> result = query.getResultList();
       if (result == null || result.isEmpty())
@@ -196,8 +212,9 @@
     * @param pkgMgrEntity
     * @param pkgCtx
     * @return
+    * @throws PackageManagerException 
     */
-   private InstalledPackage createPackage(PackageManagerEntity pkgMgrEntity, PackageContext pkgCtx)
+   private InstalledPackage createPackage(PackageManagerEntity pkgMgrEntity, PackageContext pkgCtx) throws PackageManagerException
    {
       InstalledPackage newPackage = new InstalledPackage(pkgMgrEntity, pkgCtx.getPackageName(), pkgCtx
             .getPackageVersion());
@@ -241,13 +258,51 @@
    }
 
    /**
+    * @throws PackageNotInstalledException 
     * @see org.jboss.ejb3.packagemanager.db.PackageDatabaseManager#upgradePackage(org.jboss.ejb3.packagemanager.entity.InstalledPackage, org.jboss.ejb3.packagemanager.entity.InstalledPackage)
     */
-   @Override
-   public InstalledPackage upgradePackage(PackageContext packageToUpgrade)
+   public InstalledPackage upgradePackage(PackageContext packageToUpgrade) throws PackageNotInstalledException
    {
-      // get all packages which were dependent on the previous version of the package
-      return null;
+      // 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;
    }
 
    /**
@@ -304,7 +359,7 @@
          installedPackage = em.merge(installedPackage);
          em.remove(installedPackage);
          tx.commit();
-         logger.info("Deleted installed package = " + installedPackage.getId());
+         logger.info("Deleted installed package = " + installedPackage.getPackageName());
       }
       catch (Exception e)
       {

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-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/db/PackageDatabaseManager.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -29,24 +29,75 @@
 
 /**
  * PackageDatabaseManager
- *
+ * 
+ * Manages the database used by the Package manager for tracking the installed
+ * packages. 
+ * 
  * @author Jaikiran Pai
  * @version $Revision: $
  */
 public interface PackageDatabaseManager
 {
 
+   /**
+    * Store the information, in DB, about a package that was installed.
+    * 
+    * This method is called to record the result of a successful package
+    * installation
+    *  
+    * @param pkgCtx The package which was installed.
+    * @return Returns the {@link InstalledPackage} representing the newly
+    * installed package
+    */
    InstalledPackage installPackage(PackageContext pkgCtx);
    
-   InstalledPackage getInstalledPackage(String name);
+   /**
+    * Returns a package with the package name - <code>name</code>, which is already installed. 
+    * If such a package is not installed then {@link PackageNotInstalledException} is thrown.
+    * If the caller is not sure whether the package with a given name is installed, then
+    * use the {@link #isPackageInstalled(String)} method, before calling this method
+    *   
+    * @param name Name of the package
+    * @return
+    * @throws PackageNotInstalledException If the package with the name <code>name</code> is 
+    * not installed
+    */
+   InstalledPackage getInstalledPackage(String name) throws PackageNotInstalledException;
    
+   /**
+    * Returns true if the package with the given <code>name</code> is already installed.
+    * Else returns false.
+    * 
+    * @param name Name of the package
+    * @return
+    */
    boolean isPackageInstalled(String name);
    
-   Set<InstalledPackage> getDependentPackages(String name);
+   /**
+    * Returns a set of {@link InstalledPackage}s which depend on the package with the
+    * name <code>name</code>. If there are no such dependent packages then an empty
+    * set is returned.
+    * 
+    * @param name Name of the package which has to be checked for dependent packages
+    * @return
+    * @throws If the package with <code>name</code> is not installed, then {@link PackageNotInstalledException}
+    * is thrown
+    */
+   Set<InstalledPackage> getDependentPackages(String name) throws PackageNotInstalledException;
    
-   InstalledPackage upgradePackage(PackageContext pkgCtx);
-   
+   /**
+    * Removes the package from the DB records.
+    * 
+    * @param name The name of the package to remove
+    * @throws PackageNotInstalledException If the package with name <code>name</code> is
+    * not already installed
+    */
    void removePackage(String name) throws PackageNotInstalledException;
    
+   /**
+    * Removes the package from the DB records.
+    * 
+    * @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/InstalledFile.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/InstalledFile.java	2009-11-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/InstalledFile.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -51,7 +51,7 @@
    private String fileType;
    
    @ManyToOne 
-   @JoinColumn(name="package_id")
+   @JoinColumn(name="package_name")
    private InstalledPackage pkg;
    
    private InstalledFile()

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-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/InstalledPackage.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -21,12 +21,11 @@
 */
 package org.jboss.ejb3.packagemanager.entity;
 
+import java.util.HashSet;
 import java.util.Set;
 
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
@@ -45,14 +44,11 @@
 {
 
    @Id
-   @GeneratedValue(strategy = GenerationType.IDENTITY)
-   private long id;
-
    private String name;
 
    private String version;
 
-   @OneToMany(mappedBy = "dependeePackage", cascade=CascadeType.ALL)
+   @OneToMany(mappedBy = "dependentPackage", cascade=CascadeType.ALL)
    private Set<PackageDependency> dependencies;
 
    @OneToMany(mappedBy = "pkg", cascade = CascadeType.ALL)
@@ -74,12 +70,7 @@
       this.version = packageVersion;
    }
 
-   public InstalledPackage(long id)
-   {
-      this.id = id;
-   }
 
-   
    public String getPackageName()
    {
       return this.name;
@@ -90,16 +81,6 @@
       return this.version;
    }
 
-   public long getId()
-   {
-      return id;
-   }
-
-   public void setId(long id)
-   {
-      this.id = id;
-   }
-
    public Set<InstalledFile> getInstallationFiles()
    {
       return installationFiles;
@@ -130,6 +111,52 @@
       this.dependencies = dependencies;
    }
    
+   public void addDependency(PackageDependency dependency)
+   {
+      if (this.dependencies == null)
+      {
+         this.dependencies = new HashSet<PackageDependency>();
+      }
+      this.dependencies.add(dependency);
+   }
+   
+   public void addDependencies(Set<PackageDependency> dependencies)
+   {
+      if (this.dependencies == null)
+      {
+         this.dependencies = new HashSet<PackageDependency>();
+      }
+      this.dependencies.addAll(dependencies);
+   }
+   
+   public void removeDependency(PackageDependency dependency)
+   {
+      if (this.dependencies == null)
+      {
+         return;
+      }
+      this.dependencies.remove(dependency);
+   }
+   
+   
+   public void removeDependency(InstalledPackage dependencyPackage)
+   {
+      if (this.dependencies == null)
+      {
+         return;
+      }
+      Set<PackageDependency> copyOfDependencies = new HashSet<PackageDependency>(this.dependencies);
+      for (PackageDependency dependency : copyOfDependencies)
+      {
+         if (dependency.getDependentPackage().equals(dependencyPackage))
+         {
+            this.dependencies.remove(dependency);
+         }
+      }
+      
+   }
+   
+   
    /**
     * @see java.lang.Object#equals(java.lang.Object)
     */
@@ -145,7 +172,7 @@
          return false;
       }
       InstalledPackage otherPackge = (InstalledPackage) obj;
-      return this.getId() == otherPackge.getId(); 
+      return this.name == otherPackge.name; 
       
    }
 
@@ -155,6 +182,6 @@
    @Override
    public int hashCode()
    {
-      return Long.valueOf(this.id).hashCode();
+      return this.name.hashCode();
    }
 }

Modified: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PackageDependency.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PackageDependency.java	2009-11-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/entity/PackageDependency.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -45,12 +45,12 @@
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
 
-   @ManyToOne (cascade=CascadeType.REFRESH)
-   @JoinColumn(name = "dependent_package_id")
+   @ManyToOne(cascade = CascadeType.REFRESH)
+   @JoinColumn(name = "dependent_package")
    private InstalledPackage dependentPackage;
 
-   @ManyToOne(cascade=CascadeType.REFRESH)
-   @JoinColumn(name = "dependee_package_id")
+   @ManyToOne(cascade = CascadeType.REFRESH)
+   @JoinColumn(name = "dependee_package")
    private InstalledPackage dependeePackage;
 
    public long getId()
@@ -83,4 +83,35 @@
       this.dependeePackage = dependeePackage;
    }
 
+   /**
+    * @see java.lang.Object#equals(java.lang.Object)
+    */
+   @Override
+   public boolean equals(Object obj)
+   {
+      if (obj == null)
+      {
+         return false;
+      }
+      if (!(obj instanceof PackageDependency))
+      {
+         return false;
+      }
+      PackageDependency other = (PackageDependency) obj;
+      if (this.dependeePackage != null && this.dependentPackage != null)
+      {
+         return this.dependeePackage.equals(other.getDependeePackage()) && this.dependentPackage.equals(other.getDependentPackage());
+      }
+      return false;
+   }
+
+   /**
+    * @see java.lang.Object#hashCode()
+    */
+   @Override
+   public int hashCode()
+   {
+      // TODO Auto-generated method stub
+      return super.hashCode();
+   }
 }

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-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/impl/DefaultPackageManagerImpl.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -95,6 +95,7 @@
       this.environment = environment;
       this.installationServerHome = jbossHome;
       this.pkgMgrCtx = new DefaultPackageManagerContext(this);
+      
       this.pkgDatabaseManager = new DefaultDatabaseManager(this.pkgMgrCtx);
    }
 
@@ -181,7 +182,7 @@
       }
       logger.debug("New package " + pkgContext + " being installed");
       // proceed with installation of the package
-      
+
       if (pkgContext.getInstallationFiles() == null)
       {
          throw new PackageManagerException("There are no files to install for package: " + pkgContext);
@@ -211,19 +212,21 @@
    @Override
    public void removePackage(String packageName) throws PackageNotInstalledException, PackageManagerException
    {
-      this.removePackage(packageName, false);
-      logger.info("Uninstalled " + packageName);
-   }
-
-   
-   protected void removePackage(String packageName, boolean forceRemove) throws PackageNotInstalledException, PackageManagerException
-   {
       // get the installed package
       boolean isPackageInstalled = this.pkgDatabaseManager.isPackageInstalled(packageName);
       if (!isPackageInstalled)
       {
          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)
+         throws PackageNotInstalledException, PackageManagerException
+   {
+      String packageName = installedPackage.getPackageName();
       if (!forceRemove)
       {
          // check if other packages are dependent on this package
@@ -235,7 +238,6 @@
                   + " - cannot remove this package!");
          }
       }
-      InstalledPackage installedPackage = this.pkgDatabaseManager.getInstalledPackage(packageName);
       // TODO : Revisit this installer creation
       Installer installer = new DefaultInstaller(this.pkgMgrCtx);
       // install files in this package
@@ -244,8 +246,9 @@
          installer.uninstall(installedPackage, fileToUninstall);
       }
       this.pkgDatabaseManager.removePackage(installedPackage);
+      logger.info("Uninstalled " + packageName);
    }
-   
+
    /**
     * @see org.jboss.ejb3.packagemanager.PackageManager#updatePackage(java.lang.String)
     */
@@ -283,25 +286,21 @@
 
    public void updatePackage(PackageContext pkgContext) throws PackageManagerException
    {
-      // TODO: Revisit
-//      // first remove
-//      this.removeIfExists(pkgContext.getPackageName());
-//      
+      String packageName = pkgContext.getPackageName();
+      boolean isPackageInstalled = this.pkgDatabaseManager.isPackageInstalled(packageName);
+      if (isPackageInstalled)
+      {
+         InstalledPackage installedPackage = this.pkgDatabaseManager.getInstalledPackage(packageName);
+         logger.info("Removing existing package " + packageName + " version " + installedPackage.getPackageVersion()
+               + " for upgrading to " + pkgContext);
+         removePackage(installedPackage, true);
+      }
+
       // now install new version
       this.installPackage(pkgContext);
       
    }
 
-   private void removeIfExists(String packageName) throws PackageManagerException
-   {
-      // get the installed package
-      boolean isPackageInstalled = this.pkgDatabaseManager.isPackageInstalled(packageName);
-      if (!isPackageInstalled)
-      {
-         return;
-      }
-      this.removePackage(packageName);
-   }
    /**
     * Parses the {@code pkgPath} string and returns an appropriate URL.
     * 

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-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/main/Main.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -21,17 +21,25 @@
 */
 package org.jboss.ejb3.packagemanager.main;
 
-import gnu.getopt.Getopt;
+import jargs.gnu.CmdLineParser;
 
+import java.io.File;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
 import org.jboss.ejb3.packagemanager.PackageManager;
 import org.jboss.ejb3.packagemanager.PackageManagerEnvironment;
 import org.jboss.ejb3.packagemanager.exception.PackageManagerException;
 import org.jboss.ejb3.packagemanager.impl.DefaultPackageManagerImpl;
+import org.jboss.ejb3.packagemanager.util.DBUtil;
+import org.jboss.logging.Logger;
 
 /**
  * Main
  * 
- * TODO: This needs a lot of rework - currently WIP.
+ * TODO: Command line parsing is WIP.
  * 
  * @author Jaikiran Pai
  * @version $Revision: $
@@ -40,6 +48,11 @@
 {
 
    /**
+    * Logger
+    */
+   private static Logger logger = Logger.getLogger(Main.class);
+   
+   /**
     * One of the entry points to the package manager.
     * Accepts the command line arguments and carries out appropriate operations
     * through the package-manager.
@@ -51,58 +64,126 @@
     */
    public static void main(String[] args) throws PackageManagerException
    {
-      
-      Getopt arguments = new Getopt("packagemanager", args, "i:u:r:s:p:");
-      int argument;
-      String jbossHome = null;
-      String pmHome = System.getProperty("java.io.tmpdir");
-      // TODO: Better handling of commands/options
-      while ((argument = arguments.getopt()) != -1)
+      CmdLineParser cmdLineParser = new CmdLineParser();
+      CmdLineParser.Option setupCmdOption = cmdLineParser.addStringOption("setup");
+      CmdLineParser.Option installCmdOption = cmdLineParser.addStringOption('i', "install");
+      CmdLineParser.Option upgradeCmdOption = cmdLineParser.addStringOption('u', "upgrade");
+      CmdLineParser.Option removeCmdOption = cmdLineParser.addStringOption('r', "remove");
+      CmdLineParser.Option packageManagerHomeCmdOption = cmdLineParser.addStringOption('p', "pmhome");
+      CmdLineParser.Option jbossHomeCmdOption = cmdLineParser.addStringOption('s', "jbossHome");
+
+      try
       {
-         switch (argument)
-         {
-            case 's' :
-               jbossHome = arguments.getOptarg();
-               break;
-            case 'p' :
-               pmHome = arguments.getOptarg();
-               break;
-         }
+         cmdLineParser.parse(args);
       }
-      
+      catch (CmdLineParser.OptionException e)
+      {
+         System.err.println("Error parsing command " + e.getMessage());
+         printUsage();
+         throw new PackageManagerException(e.getMessage());
+      }
+      File currentDir = new File(".");
+      String packageManagerHome = (String) cmdLineParser.getOptionValue(packageManagerHomeCmdOption,currentDir.getAbsolutePath());
+      String jbossHome = (String) cmdLineParser.getOptionValue(jbossHomeCmdOption);
+      if (packageManagerHome == null)
+      {
+         throw new PackageManagerException("Package manager home has not been set");
+      }
       if (jbossHome == null)
       {
-         throw new Error("JBoss Server Home not specified");
+         throw new PackageManagerException("JBoss Home has not been set");
       }
-      PackageManagerEnvironment env = new PackageManagerEnvironment(pmHome);
+
+      File pmHome = new File(packageManagerHome);
+      if (!pmHome.exists())
+      {
+         throw new PackageManagerException("Package manager home " + pmHome + " does not exist!");
+      }
+
+      File jbHome = new File(jbossHome);
+      if (!jbHome.exists())
+      {
+         throw new PackageManagerException("JBoss home " + jbHome + " does not exist!");
+      }
+      logger.info("Using Package Manager Home: " + packageManagerHome);
+      logger.info("Using JBoss Home: " + jbossHome);
+      PackageManagerEnvironment env = new PackageManagerEnvironment(packageManagerHome);
       PackageManager pm = new DefaultPackageManagerImpl(env, jbossHome);
-      
-      Getopt commands = new Getopt("packagemanager", args, "i:u:r:s:p:");
-      int command;
-      String packageToOperateOn = null;
-      // TODO: Better handling of commands/options
-      while ((command = commands.getopt()) != -1)
+
+      String schemaSetupScript = (String) cmdLineParser.getOptionValue(setupCmdOption);
+      if (schemaSetupScript != null)
       {
-         switch (command)
+         File schemaFile = new File(schemaSetupScript);
+         if (!schemaFile.exists())
          {
-            case 'i' :
-               packageToOperateOn = commands.getOptarg();
-               pm.installPackage(packageToOperateOn);
-               break;
-            case 'u' :
-               packageToOperateOn = commands.getOptarg();
-               pm.updatePackage(packageToOperateOn);
-               break;
-            case 'r' :
-               packageToOperateOn = commands.getOptarg();
-               pm.removePackage(packageToOperateOn);
-               break;
+            throw new PackageManagerException(
+                  "Could not setup the database for package manager, because of non-existent schema file "
+                        + schemaSetupScript);
          }
+         Connection conn = null;
+         try
+         {
+            conn = DriverManager.getConnection("jdbc:derby:pmdb;create=true");
+            DBUtil.runSql(conn, schemaFile);
+            logger.info("Successfully setup the package manager database");
+         }
+         catch (SQLException sqle)
+         {
+            throw new PackageManagerException("Could not setup package manager database: ", sqle);
+         }
+         catch (IOException ioe)
+         {
+            throw new PackageManagerException("Could not setup package manager database: ", ioe);
+         }
+         finally
+         {
+            if (conn != null)
+            {
+               try
+               {
+                  conn.close();
+               }
+               catch (SQLException sqle)
+               {
+                  // can't do much
+                  logger.trace("Could not close connection:",sqle);
+               }
+            }
+         }
+
       }
-      
 
+      String packageToInstall = (String) cmdLineParser.getOptionValue(installCmdOption);
+      String packageToUpgrade = (String) cmdLineParser.getOptionValue(upgradeCmdOption);
+      String packageToRemove = (String) cmdLineParser.getOptionValue(removeCmdOption);
+
+      if (packageToInstall != null)
+      {
+         // it's time to install
+         pm.installPackage(packageToInstall);
+
+      }
+
+      if (packageToUpgrade != null)
+      {
+         // upgrade!
+         pm.updatePackage(packageToUpgrade);
+      }
+
+      if (packageToRemove != null)
+      {
+         // out you go!
+         pm.removePackage(packageToRemove);
+      }
+
    }
+
    
-   
+   private static void printUsage()
+   {
+      System.out
+            .println("Usage: packagemanager [-i path_to_package] [-r package_name] [-u path_to_package] [-p path_to_package_manager_home]\n"
+                  + " [-s path_to_jboss_home]");
+   }
 
 }

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-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/script/impl/AntScriptProcessor.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -103,7 +103,7 @@
          throw new ScriptProcessingException("Target " + targetName + " not present in Ant script " + antBuildFile
                + " for " + pkgCtx);
       }
-      logger.info("Running pre-install script " + antBuildFile + " ,target= " + targetName + " for " + pkgCtx);
+      logger.info("Running script " + antBuildFile + " ,target= " + targetName + " for " + pkgCtx);
       try
       {
          antProject.executeTarget(targetName);

Added: projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/util/DBUtil.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/util/DBUtil.java	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/java/org/jboss/ejb3/packagemanager/util/DBUtil.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -0,0 +1,108 @@
+/*
+* 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.util;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.jboss.logging.Logger;
+
+/**
+ * DBUtil
+ *
+ * @author Jaikiran Pai
+ * @version $Revision: $
+ */
+public class DBUtil
+{
+
+   private static Logger logger = Logger.getLogger(DBUtil.class);
+
+   public static void runSql(Connection conn, File sqlFile) throws IOException, SQLException
+   {
+      logger.info("SQL being run from file " + sqlFile);
+      InputStream sql = new FileInputStream(sqlFile);
+
+      runSql(conn, sql);
+
+   }
+
+   public static void runSql(Connection conn, InputStream sql) throws IOException, SQLException
+   {
+
+      Reader reader = new InputStreamReader(sql);
+      BufferedReader bufferedReader = new BufferedReader(reader);
+      long lineNo = 0;
+      Statement statement = conn.createStatement();
+      try
+      {
+         StringBuffer trimmedSql = new StringBuffer();
+         for (String line = bufferedReader.readLine(); line != null; line = bufferedReader.readLine())
+         {
+            try
+            {
+               lineNo++;
+               line = line.trim();
+               //String trimmedSql = line.trim();
+               if (line.length() == 0 || line.startsWith("--") || line.startsWith("//")
+                     || line.startsWith("/*"))
+               {
+                  continue;
+               }
+               else
+               {
+                  trimmedSql.append(" ");
+                  trimmedSql.append(line);
+                  if (trimmedSql.toString().endsWith(";"))
+                  {
+                     String sqlToRun = trimmedSql.substring(0, trimmedSql.length() - 1);
+                     logger.info(sqlToRun);
+                     statement.execute(sqlToRun);
+                     trimmedSql = new StringBuffer();
+                  }
+                  
+               }
+            }
+            catch (SQLException sqle)
+            {
+               logger.error("SQLException at line number " + lineNo, sqle);
+               throw sqle;
+            }
+         }
+      }
+      finally 
+      {
+         if (statement != null)
+         {
+            statement.close();
+         }
+      }
+   }
+}

Modified: projects/ejb3/trunk/package-manager/src/main/resources/log4j.xml
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/resources/log4j.xml	2009-11-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/resources/log4j.xml	2009-11-04 10:31:04 UTC (rev 95993)
@@ -22,8 +22,8 @@
 
   <!-- 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="INFO"/>
+    <param name="File" value="log/test.log"/>
+    <param name="Threshold" value="DEBUG"/>
     <param name="Append" value="false"/>
 
     <!-- Rollover at midnight each day -->
@@ -49,7 +49,7 @@
 
   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
     <param name="Target" value="System.out"/>
-
+    <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"/>
@@ -61,15 +61,6 @@
   <!-- Limit categories -->
   <!-- ================ -->
 
-  <category name="org.jboss">
-    <priority value="INFO"/>
-  </category>
-
-  <category name="org.jboss.ejb3">
-    <priority value="ALL"/>
-  </category>
-
-
   <!-- ======================= -->
   <!-- Setup the Root category -->
   <!-- ======================= -->

Deleted: projects/ejb3/trunk/package-manager/src/main/resources/package-manager-sql-scripts.sql
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/resources/package-manager-sql-scripts.sql	2009-11-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/main/resources/package-manager-sql-scripts.sql	2009-11-04 10:31:04 UTC (rev 95993)
@@ -1,49 +0,0 @@
--- Package Manager table
--- DROP TABLE package_manager;
-CREATE TABLE package_manager (
- 	id bigint not null GENERATED ALWAYS AS IDENTITY	CONSTRAINT PACKAGE_MANAGER_PK PRIMARY KEY,
- 	jbossHome varchar(255) not null
-);
--- add a unique constraint to server home
-ALTER TABLE package_manager 
-ADD CONSTRAINT jboss_server_home_uniqueness UNIQUE (jbossHome);
-
--- Package table
--- DROP TABLE package;
-CREATE TABLE package (
-	id bigint not null GENERATED ALWAYS AS IDENTITY	CONSTRAINT PACKAGE_PK PRIMARY KEY,
-	package_manager_id bigint not null,
-	name varchar(255) not null, 
-	version varchar(255) not null, 
-	foreign key (package_manager_id) references package_manager (id) 
-
-);
-
--- add a unique constraint to package name,version
-ALTER TABLE package 
-ADD CONSTRAINT package_name_version UNIQUE (name, version);
-
-
--- Installation file
--- DROP TABLE installation_file;
-CREATE TABLE installation_file (
-	id bigint not null GENERATED ALWAYS AS IDENTITY	CONSTRAINT INSTALLATION_FILE_PK PRIMARY KEY,
-	package_id bigint not null,
-	fileName varchar(255) not null,
-	installedPath varchar(255) not null,
-	fileType varchar(255),
-	foreign key (package_id) references package (id) 
-
-);
-
--- Package dependencies
--- DROP TABLE package_dependency;
-CREATE TABLE package_dependency (
-	id bigint not null GENERATED ALWAYS AS IDENTITY	CONSTRAINT PACKAGE_DEPENDENCY_PK PRIMARY KEY,
-	dependent_package_id bigint not null,
-	dependee_package_id bigint not null,
-	--primary key (dependent_package_id, dependee_package_id),
-	foreign key (dependee_package_id) references package (id),
-	foreign key (dependent_package_id) references package(id)
-	
-);
\ No newline at end of file

Added: projects/ejb3/trunk/package-manager/src/main/resources/run.sh
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/resources/run.sh	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/resources/run.sh	2009-11-04 10:31:04 UTC (rev 95993)
@@ -0,0 +1,93 @@
+#!/bin/sh
+### ====================================================================== ###
+##                                                                          ##
+##  JBoss Package Manager setup script                                      ##
+##                                                                          ##
+### ====================================================================== ###
+
+DIRNAME=`dirname $0`
+PROGNAME=`basename $0`
+GREP="grep"
+
+
+#
+# Helper to complain.
+#
+warn() {
+    echo "${PROGNAME}: $*"
+}
+
+#
+# Helper to puke.
+#
+die() {
+    warn $*
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false;
+darwin=false;
+linux=false;
+case "`uname`" in
+    CYGWIN*)
+        cygwin=true
+        ;;
+
+    Darwin*)
+        darwin=true
+        ;;
+        
+    Linux)
+        linux=true
+        ;;
+esac
+
+# Setup PACKAGE_MANAGER_HOME
+if [ "x$PACKAGE_MANAGER_HOME" = "x" ]; then
+    # get the full path (without any relative bits)
+    PACKAGE_MANAGER_HOME=`cd $DIRNAME/..; pwd`
+fi
+export PACKAGE_MANAGER_HOME
+
+# Setup the JVM
+if [ "x$JAVA" = "x" ]; then
+    if [ "x$JAVA_HOME" != "x" ]; then
+	JAVA="$JAVA_HOME/bin/java"
+    else
+	JAVA="java"
+    fi
+fi
+
+# Setup the classpath
+# wildcards are supported in classpath, starting Java 6
+PACKAGE_MANAGER_CLASSPATH="$PACKAGE_MANAGER_HOME/lib/*"
+
+# Setup JBoss Package Manager specific properties
+JAVA_OPTS="-Dprogram.name=$PROGNAME $JAVA_OPTS"
+
+# Sample JPDA settings for remote socket debugging
+#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"
+
+
+# Display our environment
+echo "========================================================================="
+echo ""
+echo "  JBoss Package Manager Environment"
+echo ""
+echo "  PACKAGE_MANAGER_HOME: $PACKAGE_MANAGER_HOME"
+echo ""
+echo "  JAVA: $JAVA"
+echo ""
+echo "  JAVA_OPTS: $JAVA_OPTS"
+echo ""
+echo "  CLASSPATH: $PACKAGE_MANAGER_CLASSPATH"
+echo ""
+echo "========================================================================="
+echo ""
+
+"$JAVA" $JAVA_OPTS \
+         -classpath "$PACKAGE_MANAGER_CLASSPATH" \
+         org.jboss.ejb3.packagemanager.main.Main  "$@"
+      PACKAGE_MANAGER_STATUS=$?
+

Added: projects/ejb3/trunk/package-manager/src/main/resources/schema.sql
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/resources/schema.sql	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/resources/schema.sql	2009-11-04 10:31:04 UTC (rev 95993)
@@ -0,0 +1,42 @@
+-- Package Manager table
+-- DROP TABLE package_manager;
+CREATE TABLE package_manager (
+ 	id bigint not null GENERATED ALWAYS AS IDENTITY	CONSTRAINT PACKAGE_MANAGER_PK PRIMARY KEY,
+ 	jbossHome varchar(255) not null
+);
+-- add a unique constraint to server home
+ALTER TABLE package_manager 
+ADD CONSTRAINT jboss_server_home_uniqueness UNIQUE (jbossHome);
+
+-- Package table
+-- DROP TABLE package;
+CREATE TABLE package (
+	package_manager_id bigint not null,
+	name varchar(255) not null CONSTRAINT PACKAGE_PK PRIMARY KEY, 
+	version varchar(255) not null, 
+	foreign key (package_manager_id) references package_manager (id) 
+
+);
+
+-- Installation file
+-- DROP TABLE installation_file;
+CREATE TABLE installation_file (
+	id bigint not null GENERATED ALWAYS AS IDENTITY	CONSTRAINT INSTALLATION_FILE_PK PRIMARY KEY,
+	package_name varchar(255) not null,
+	fileName varchar(255) not null,
+	installedPath varchar(255) not null,
+	fileType varchar(255),
+	foreign key (package_name) references package (name) 
+
+);
+
+-- Package dependencies
+-- DROP TABLE package_dependency;
+CREATE TABLE package_dependency (
+	id bigint not null GENERATED ALWAYS AS IDENTITY	CONSTRAINT PACKAGE_DEPENDENCY_PK PRIMARY KEY,
+	dependent_package varchar(255) not null,
+	dependee_package varchar(255) not null,
+	foreign key (dependee_package) references package (name),
+	foreign key (dependent_package) references package(name)
+	
+);
\ No newline at end of file

Added: projects/ejb3/trunk/package-manager/src/main/resources/setup.sh
===================================================================
--- projects/ejb3/trunk/package-manager/src/main/resources/setup.sh	                        (rev 0)
+++ projects/ejb3/trunk/package-manager/src/main/resources/setup.sh	2009-11-04 10:31:04 UTC (rev 95993)
@@ -0,0 +1,94 @@
+#!/bin/sh
+### ====================================================================== ###
+##                                                                          ##
+##  JBoss Package Manager setup script                                      ##
+##                                                                          ##
+### ====================================================================== ###
+
+DIRNAME=`dirname $0`
+PROGNAME=`basename $0`
+GREP="grep"
+
+
+#
+# Helper to complain.
+#
+warn() {
+    echo "${PROGNAME}: $*"
+}
+
+#
+# Helper to puke.
+#
+die() {
+    warn $*
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false;
+darwin=false;
+linux=false;
+case "`uname`" in
+    CYGWIN*)
+        cygwin=true
+        ;;
+
+    Darwin*)
+        darwin=true
+        ;;
+        
+    Linux)
+        linux=true
+        ;;
+esac
+
+# Setup PACKAGE_MANAGER_HOME
+if [ "x$PACKAGE_MANAGER_HOME" = "x" ]; then
+    # get the full path (without any relative bits)
+    PACKAGE_MANAGER_HOME=`cd $DIRNAME/..; pwd`
+fi
+export PACKAGE_MANAGER_HOME
+
+# Setup the JVM
+if [ "x$JAVA" = "x" ]; then
+    if [ "x$JAVA_HOME" != "x" ]; then
+	JAVA="$JAVA_HOME/bin/java"
+    else
+	JAVA="java"
+    fi
+fi
+
+# Setup the classpath
+# wildcards are supported in classpath, starting Java 6
+PACKAGE_MANAGER_CLASSPATH="$PACKAGE_MANAGER_HOME/lib/*"
+
+# Setup JBoss Package Manager specific properties
+JAVA_OPTS="-Dprogram.name=$PROGNAME $JAVA_OPTS"
+
+# Sample JPDA settings for remote socket debugging
+#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"
+
+
+# Display our environment
+echo "========================================================================="
+echo ""
+echo "  JBoss Package Manager Environment"
+echo ""
+echo "  PACKAGE_MANAGER_HOME: $PACKAGE_MANAGER_HOME"
+echo ""
+echo "  JAVA: $JAVA"
+echo ""
+echo "  JAVA_OPTS: $JAVA_OPTS"
+echo ""
+echo "  CLASSPATH: $PACKAGE_MANAGER_CLASSPATH"
+echo ""
+echo "========================================================================="
+echo ""
+
+"$JAVA" $JAVA_OPTS \
+         -classpath "$PACKAGE_MANAGER_CLASSPATH" \
+         org.jboss.ejb3.packagemanager.main.Main --setup "$PACKAGE_MANAGER_HOME/script/schema.sql" \
+         "$@"
+      PACKAGE_MANAGER_STATUS=$?
+

Deleted: projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/DBUtil.java
===================================================================
--- projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/DBUtil.java	2009-11-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/DBUtil.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -1,108 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/
-package org.jboss.ejb3.packagemanager.test.common;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import org.jboss.logging.Logger;
-
-/**
- * DBUtil
- *
- * @author Jaikiran Pai
- * @version $Revision: $
- */
-public class DBUtil
-{
-
-   private static Logger logger = Logger.getLogger(DBUtil.class);
-
-   public static void runSql(Connection conn, File sqlFile) throws IOException, SQLException
-   {
-      logger.info("SQL being run from file " + sqlFile);
-      InputStream sql = new FileInputStream(sqlFile);
-
-      runSql(conn, sql);
-
-   }
-
-   public static void runSql(Connection conn, InputStream sql) throws IOException, SQLException
-   {
-
-      Reader reader = new InputStreamReader(sql);
-      BufferedReader bufferedReader = new BufferedReader(reader);
-      long lineNo = 0;
-      Statement statement = conn.createStatement();
-      try
-      {
-         StringBuffer trimmedSql = new StringBuffer();
-         for (String line = bufferedReader.readLine(); line != null; line = bufferedReader.readLine())
-         {
-            try
-            {
-               lineNo++;
-               line = line.trim();
-               //String trimmedSql = line.trim();
-               if (line.length() == 0 || line.startsWith("--") || line.startsWith("//")
-                     || line.startsWith("/*"))
-               {
-                  continue;
-               }
-               else
-               {
-                  trimmedSql.append(" ");
-                  trimmedSql.append(line);
-                  if (trimmedSql.toString().endsWith(";"))
-                  {
-                     String sqlToRun = trimmedSql.substring(0, trimmedSql.length() - 1);
-                     logger.info(sqlToRun);
-                     statement.execute(sqlToRun);
-                     trimmedSql = new StringBuffer();
-                  }
-                  
-               }
-            }
-            catch (SQLException sqle)
-            {
-               logger.error("SQLException at line number " + lineNo, sqle);
-               throw sqle;
-            }
-         }
-      }
-      finally 
-      {
-         if (statement != null)
-         {
-            statement.close();
-         }
-      }
-   }
-}

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-04 06:55:03 UTC (rev 95992)
+++ projects/ejb3/trunk/package-manager/src/test/java/org/jboss/ejb3/packagemanager/test/common/PackageManagerTestCase.java	2009-11-04 10:31:04 UTC (rev 95993)
@@ -35,6 +35,7 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.jboss.ejb3.packagemanager.util.DBUtil;
 import org.jboss.logging.Logger;
 import org.jboss.shrinkwrap.api.export.ZipExporter;
 import org.jboss.shrinkwrap.api.spec.JavaArchive;
@@ -56,6 +57,11 @@
     * Logger
     */
    private static Logger logger = Logger.getLogger(PackageManagerTestCase.class);
+   
+   /**
+    * File name of the package manager DB schema file
+    */
+   private static final String PACKAGE_MANAGER_DB_SCHEMA_FILE_NAME = "schema.sql";
 
    /**
     * Base dir
@@ -91,8 +97,8 @@
    private static void setupDatabase(File dbHome) throws IOException, SQLException
    {
       System.setProperty("derby.system.home", dbHome.getAbsolutePath());
-      InputStream sql = Thread.currentThread().getContextClassLoader().getResourceAsStream(
-            "package-manager-sql-scripts.sql");
+      InputStream sql = Thread.currentThread().getContextClassLoader().getResourceAsStream(PACKAGE_MANAGER_DB_SCHEMA_FILE_NAME);
+
       if (sql == null)
       {
          throw new RuntimeException(
@@ -256,7 +262,7 @@
       //                                            |--- common
       //                                                    |--- Dummy.class
 
-      File dummyJar = new File(targetDir, "dummy.jar");
+      File dummyJar = new File(getPerTestTargetDir(this.getClass()), "dummy.jar");
       // if it already exists then no need to recreate it
       if (dummyJar.exists())
       {
@@ -293,7 +299,7 @@
       File dummyJar = this.createDummyJar();
 
       // Now let's package the dummy.jar, package.xml into a package
-      File simplePackage = new File(targetDir, packageFileName);
+      File simplePackage = new File(getPerTestTargetDir(this.getClass()), packageFileName);
       JavaArchive pkg = JavaArchiveFactory.create(simplePackage.getName());
       pkg.addResource("dummy.jar", dummyJar);
       URL packageXmlURL = this.getResource(PackageManagerTestCase.class, "package-with-just-install-file.xml");
@@ -333,7 +339,7 @@
       File dummyJar = this.createDummyJar();
 
       // Now let's package the dummy.jar, package.xml and build.xml into a package
-      File packageWithPreInstallScript = new File(targetDir, packageFileName);
+      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");
@@ -386,7 +392,7 @@
       File dependeePackage = this.createSimplePackage("dependee-package.jar");
 
       // Now package this dependee package and also any other files in the dependent package
-      File packageWithPackagedDependency = new File(targetDir, packageFileName);
+      File packageWithPackagedDependency = new File(getPerTestTargetDir(this.getClass()), packageFileName);
       JavaArchive pkg = JavaArchiveFactory.create(packageWithPackagedDependency.getName());
       pkg.addResource("dependee-package.jar", dependeePackage);
       // package the other files




More information about the jboss-cvs-commits mailing list