[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