[jboss-cvs] JBossAS SVN: r75256 - in projects/jpa/trunk/deployers/src: main/java/org/jboss/jpa/deployment and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jul 1 07:53:42 EDT 2008


Author: wolfc
Date: 2008-07-01 07:53:42 -0400 (Tue, 01 Jul 2008)
New Revision: 75256

Added:
   projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/AbstractDeploymentVisitor.java
   projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/PersistenceUnitDeployer.java
   projects/jpa/trunk/deployers/src/test/java/org/jboss/jpa/deployers/test/common/SimpleClassLoaderDeployer.java
Modified:
   projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/PersistenceDeployer.java
   projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployment/PersistenceDeployment.java
   projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployment/PersistenceUnitDeployment.java
   projects/jpa/trunk/deployers/src/test/java/org/jboss/jpa/deployers/test/deployment/DeploymentTestCase.java
   projects/jpa/trunk/deployers/src/test/resources/org/jboss/jpa/deployers/test/common/MainDeployer-beans.xml
   projects/jpa/trunk/deployers/src/test/resources/org/jboss/jpa/deployers/test/deployment/DeploymentTestCase.xml
Log:
Changed PersistenceDeployer to be a ComponentDeployer

Added: projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/AbstractDeploymentVisitor.java
===================================================================
--- projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/AbstractDeploymentVisitor.java	                        (rev 0)
+++ projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/AbstractDeploymentVisitor.java	2008-07-01 11:53:42 UTC (rev 75256)
@@ -0,0 +1,126 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.jpa.deployers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.helpers.DeploymentVisitor;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.logging.Logger;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public abstract class AbstractDeploymentVisitor<T, C> implements DeploymentVisitor<T>
+{
+   private static final Logger log = Logger.getLogger(AbstractDeploymentVisitor.class);
+   
+   /**
+    * Add component.
+    *
+    * @param unit the deployment unit
+    * @param componentMD the component metadata
+    */
+   protected void addComponent(DeploymentUnit unit, C componentMD)
+   {
+      String name = getName(componentMD);
+      DeploymentUnit component = unit.addComponent(name);
+      // TODO: determine proper component meta data class
+      component.addAttachment(componentMD.getClass().getName(), componentMD);
+   }
+
+   public void deploy(DeploymentUnit unit, T deployment) throws DeploymentException
+   {
+      List<C> components = getComponents(deployment);
+      if (components != null && components.isEmpty() == false)
+      {
+         List<C> visited = new ArrayList<C>();
+         try
+         {
+            for (C component : components)
+            {
+               addComponent(unit, component);
+               visited.add(component);
+            }
+         }
+         catch (Throwable t)
+         {
+            for (int i = visited.size()-1; i >= 0; --i)
+            {
+               safeRemoveComponent(unit, visited.get(i));
+            }
+            throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + unit.getName(), t);
+         }
+      }
+   }
+
+   protected abstract List<C> getComponents(T deployment);
+   
+   protected abstract String getName(C component);
+   
+   /**
+    * Remove bean component.
+    *
+    * @param unit the deployment unit
+    * @param component the component metadata
+    */
+
+   protected void removeComponent(DeploymentUnit unit, C component)
+   {
+      String name = getName(component);
+      unit.removeComponent(name);
+   }
+
+   /**
+    * Ignore all error during component removal.
+    *
+    * @param unit the deployment unit
+    * @param component the component metadata
+    */
+   protected void safeRemoveComponent(DeploymentUnit unit, C component)
+   {
+      try
+      {
+         removeComponent(unit, component);
+      }
+      catch (Throwable ignored)
+      {
+         log.warn("Error during component removal: " + unit.getName(), ignored);
+      }
+   }
+
+   public void undeploy(DeploymentUnit unit, T deployment)
+   {
+      List<C> components = getComponents(deployment);
+      if (components != null && components.isEmpty() == false)
+      {
+         for (C component : components)
+         {
+            safeRemoveComponent(unit, component);
+         }
+      }
+   }
+
+}

Modified: projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/PersistenceDeployer.java
===================================================================
--- projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/PersistenceDeployer.java	2008-07-01 11:32:57 UTC (rev 75255)
+++ projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/PersistenceDeployer.java	2008-07-01 11:53:42 UTC (rev 75256)
@@ -21,36 +21,67 @@
  */
 package org.jboss.jpa.deployers;
 
-import org.jboss.beans.metadata.spi.BeanMetaData;
-import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
-import org.jboss.deployers.spi.DeploymentException;
-import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer;
-import org.jboss.deployers.structure.spi.DeploymentUnit;
-import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
-import org.jboss.jpa.deployment.PersistenceDeployment;
+import java.util.Collections;
+import java.util.List;
+
+import org.jboss.deployers.spi.deployer.helpers.AbstractComponentDeployer;
+import org.jboss.logging.Logger;
 import org.jboss.metadata.jpa.spec.PersistenceMetaData;
+import org.jboss.metadata.jpa.spec.PersistenceUnitMetaData;
 
 /**
  * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
  * @version $Revision: $
  */
-public class PersistenceDeployer extends AbstractSimpleRealDeployer<PersistenceMetaData>
+public class PersistenceDeployer extends AbstractComponentDeployer<PersistenceMetaData, PersistenceUnitMetaData>
 {
+   private static final Logger log = Logger.getLogger(PersistenceDeployer.class);
+   
    public PersistenceDeployer()
    {
-      super(PersistenceMetaData.class);
-      addOutput(BeanMetaData.class);
+      setComponentVisitor(new PersistenceUnitDeploymentVisitor());
+      setDeploymentVisitor(new PersistenceDeploymentVisitor());
    }
 
-   @Override
-   public void deploy(DeploymentUnit unit, PersistenceMetaData deployment) throws DeploymentException
+   private static class PersistenceDeploymentVisitor extends AbstractDeploymentVisitor<PersistenceMetaData, PersistenceUnitMetaData>
    {
-      PersistenceDeployment bean = new PersistenceDeployment((VFSDeploymentUnit) unit, null, deployment);
-      BeanMetaDataBuilder bmdb = BeanMetaDataBuilder.createBuilder("PersistenceDeployment", PersistenceDeployment.class.getName());
-      bmdb.setConstructorValue(bean);
-//      AbstractBeanMetaData bmd = new AbstractBeanMetaData("PersistenceDeployment", PersistenceDeployment.class.getName());
-//      AbstractConstructorMetaData constructor = new AbstractConstructorMetaData();
-//      constructor.setValueObject(bean);
-      unit.addAttachment(BeanMetaData.class, bmdb.getBeanMetaData());
+      public Class<PersistenceMetaData> getVisitorType()
+      {
+         return PersistenceMetaData.class;
+      }
+
+      @Override
+      protected List<PersistenceUnitMetaData> getComponents(PersistenceMetaData deployment)
+      {
+         return deployment.getPersistenceUnits();
+      }
+
+      @Override
+      protected String getName(PersistenceUnitMetaData component)
+      {
+         // TODO: fix me
+         return component.getName();
+      }
    }
+   
+   private static class PersistenceUnitDeploymentVisitor extends AbstractDeploymentVisitor<PersistenceUnitMetaData, PersistenceUnitMetaData>
+   {
+      public Class<PersistenceUnitMetaData> getVisitorType()
+      {
+         return PersistenceUnitMetaData.class;
+      }
+
+      @Override
+      protected List<PersistenceUnitMetaData> getComponents(PersistenceUnitMetaData deployment)
+      {
+         return Collections.singletonList(deployment);
+      }
+
+      @Override
+      protected String getName(PersistenceUnitMetaData component)
+      {
+         // TODO: fix me
+         return component.getName();
+      }
+   }
 }

Added: projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/PersistenceUnitDeployer.java
===================================================================
--- projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/PersistenceUnitDeployer.java	                        (rev 0)
+++ projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployers/PersistenceUnitDeployer.java	2008-07-01 11:53:42 UTC (rev 75256)
@@ -0,0 +1,80 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.jpa.deployers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.naming.InitialContext;
+
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;
+import org.jboss.jpa.deployment.PersistenceDeployment;
+import org.jboss.jpa.deployment.PersistenceUnitDeployment;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.jpa.spec.PersistenceUnitMetaData;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class PersistenceUnitDeployer extends AbstractSimpleRealDeployer<PersistenceUnitMetaData>
+{
+   private static final Logger log = Logger.getLogger(PersistenceUnitDeployer.class);
+   
+   public PersistenceUnitDeployer()
+   {
+      super(PersistenceUnitMetaData.class);
+      
+      // We want to process the components created by PersistenceDeployer, this seems to be the only way to get there.
+      setComponentsOnly(true);
+      
+      addOutput(BeanMetaData.class);
+   }
+
+   @Override
+   public void deploy(DeploymentUnit unit, PersistenceUnitMetaData metaData) throws DeploymentException
+   {
+      log.debug("deploy " + metaData);
+      
+      InitialContext initialContext = null;
+      PersistenceDeployment persistenceDeployment = null;
+      List<String> explicitEntityClasses = new ArrayList<String>();
+      String ear = null;
+      String jar = null;
+      boolean isScoped = false;
+      VFSDeploymentUnit deploymentUnit = (VFSDeploymentUnit) unit.getParent();
+      PersistenceUnitDeployment pu = new PersistenceUnitDeployment(initialContext, persistenceDeployment, explicitEntityClasses, metaData, ear, jar, isScoped, deploymentUnit);
+      
+      String name = "ToDo";
+      AbstractBeanMetaData beanMetaData = new AbstractBeanMetaData(name, PersistenceUnitDeployment.class.getName());
+      BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(beanMetaData);
+      builder.setConstructorValue(pu);
+      
+      unit.addAttachment(BeanMetaData.class, builder.getBeanMetaData());
+   }
+}

Modified: projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployment/PersistenceDeployment.java
===================================================================
--- projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployment/PersistenceDeployment.java	2008-07-01 11:32:57 UTC (rev 75255)
+++ projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployment/PersistenceDeployment.java	2008-07-01 11:53:42 UTC (rev 75256)
@@ -216,7 +216,7 @@
 //            cache_prefix = SecondLevelCacheUtil.createCacheRegionPrefix(earShortName, jarName, metaData.getName());
 //            properties.put(SecondLevelCacheUtil.HIBERNATE_CACHE_REGION_PREFIX, cache_prefix);
 //         }
-         PersistenceUnitDeployment deployment = new PersistenceUnitDeployment(initialContext, this, explicitEntityClasses, metaData, earName, unit.getSimpleName(), isScoped);
+         PersistenceUnitDeployment deployment = new PersistenceUnitDeployment(initialContext, this, explicitEntityClasses, metaData, earName, unit.getSimpleName(), isScoped, getDeploymentUnit());
          PersistenceUnitRegistry.register(deployment);
          persistenceUnitDeployments.add(deployment);
       }

Modified: projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployment/PersistenceUnitDeployment.java
===================================================================
--- projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployment/PersistenceUnitDeployment.java	2008-07-01 11:32:57 UTC (rev 75255)
+++ projects/jpa/trunk/deployers/src/main/java/org/jboss/jpa/deployment/PersistenceUnitDeployment.java	2008-07-01 11:53:42 UTC (rev 75256)
@@ -65,14 +65,14 @@
    protected PersistenceDeployment deployment;
    protected boolean scoped;
 
-   public PersistenceUnitDeployment(InitialContext initialContext, PersistenceDeployment deployment, List<String> explicitEntityClasses, PersistenceUnitMetaData metadata, String ear, String jar, boolean isScoped)
+   public PersistenceUnitDeployment(InitialContext initialContext, PersistenceDeployment deployment, List<String> explicitEntityClasses, PersistenceUnitMetaData metadata, String ear, String jar, boolean isScoped, VFSDeploymentUnit deploymentUnit)
    {
       //super(new SimpleJavaEEModule((deployment.getEar() != null ? deployment.getEar().getShortName() : null), deployment.getDeploymentUnit().getShortName()));
       
       this.scoped = isScoped;
       this.deployment = deployment;
       this.initialContext = initialContext;
-      this.di = deployment.getDeploymentUnit();
+      this.di = deploymentUnit;
       this.explicitEntityClasses = explicitEntityClasses;
       this.metaData = metadata;
       kernelName = "persistence.units:";

Added: projects/jpa/trunk/deployers/src/test/java/org/jboss/jpa/deployers/test/common/SimpleClassLoaderDeployer.java
===================================================================
--- projects/jpa/trunk/deployers/src/test/java/org/jboss/jpa/deployers/test/common/SimpleClassLoaderDeployer.java	                        (rev 0)
+++ projects/jpa/trunk/deployers/src/test/java/org/jboss/jpa/deployers/test/common/SimpleClassLoaderDeployer.java	2008-07-01 11:53:42 UTC (rev 75256)
@@ -0,0 +1,40 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.jpa.deployers.test.common;
+
+import org.jboss.deployers.spi.deployer.helpers.AbstractTopLevelClassLoaderDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+
+/**
+ * TODO: Consilidate with org.jboss.ejb3.test.tx.common.SimpleClassLoaderDeployer
+ * 
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class SimpleClassLoaderDeployer extends AbstractTopLevelClassLoaderDeployer
+{
+   @Override
+   protected ClassLoader createTopLevelClassLoader(DeploymentUnit unit) throws Exception
+   {
+      return Thread.currentThread().getContextClassLoader();
+   }
+}

Modified: projects/jpa/trunk/deployers/src/test/java/org/jboss/jpa/deployers/test/deployment/DeploymentTestCase.java
===================================================================
--- projects/jpa/trunk/deployers/src/test/java/org/jboss/jpa/deployers/test/deployment/DeploymentTestCase.java	2008-07-01 11:32:57 UTC (rev 75255)
+++ projects/jpa/trunk/deployers/src/test/java/org/jboss/jpa/deployers/test/deployment/DeploymentTestCase.java	2008-07-01 11:53:42 UTC (rev 75256)
@@ -54,5 +54,10 @@
       VirtualFile file = VFS.getRoot(url);
       VFSDeployment deployment = VFSDeploymentFactory.getInstance().createVFSDeployment(file);
       delegate.getMainDeployer().deploy(deployment);
+      delegate.getMainDeployer().checkComplete(deployment);
+      
+      // TODO:
+      
+      delegate.getMainDeployer().undeploy(deployment);
    }
 }

Modified: projects/jpa/trunk/deployers/src/test/resources/org/jboss/jpa/deployers/test/common/MainDeployer-beans.xml
===================================================================
--- projects/jpa/trunk/deployers/src/test/resources/org/jboss/jpa/deployers/test/common/MainDeployer-beans.xml	2008-07-01 11:32:57 UTC (rev 75255)
+++ projects/jpa/trunk/deployers/src/test/resources/org/jboss/jpa/deployers/test/common/MainDeployer-beans.xml	2008-07-01 11:53:42 UTC (rev 75256)
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <deployment xmlns="urn:jboss:bean-deployer:2.0">
-
+   <bean name="SimpleClassLoaderDeployer" class="org.jboss.jpa.deployers.test.common.SimpleClassLoaderDeployer"/>
+   
    <!-- The MainDeployer -->
    <bean name="MainDeployer" class="org.jboss.deployers.plugins.main.MainDeployerImpl">
       <property name="structuralDeployers"><inject bean="StructuralDeployers"/></property>

Modified: projects/jpa/trunk/deployers/src/test/resources/org/jboss/jpa/deployers/test/deployment/DeploymentTestCase.xml
===================================================================
--- projects/jpa/trunk/deployers/src/test/resources/org/jboss/jpa/deployers/test/deployment/DeploymentTestCase.xml	2008-07-01 11:32:57 UTC (rev 75255)
+++ projects/jpa/trunk/deployers/src/test/resources/org/jboss/jpa/deployers/test/deployment/DeploymentTestCase.xml	2008-07-01 11:53:42 UTC (rev 75256)
@@ -3,4 +3,5 @@
    <bean name="PersistenceParsingDeployer" class="org.jboss.jpa.deployers.PersistenceParsingDeployer"/>
 
    <bean name="PersistenceDeployer" class="org.jboss.jpa.deployers.PersistenceDeployer"/>
+   <bean name="PersistenceUnitDeployer" class="org.jboss.jpa.deployers.PersistenceUnitDeployer"/>
 </deployment>




More information about the jboss-cvs-commits mailing list