You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/01/18 00:27:55 UTC

svn commit: r1232647 - in /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb: assembler/DeployerEjb.java config/ConfigurationFactory.java config/sys/AdditionalDeployments.java

Author: rmannibucau
Date: Tue Jan 17 23:27:54 2012
New Revision: 1232647

URL: http://svn.apache.org/viewvc?rev=1232647&view=rev
Log:
dumping app un/deployed through the DeployerEjb to be able to redeploy it when openejb restarts

Added:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AdditionalDeployments.java
Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java?rev=1232647&r1=1232646&r2=1232647&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java Tue Jan 17 23:27:54 2012
@@ -26,27 +26,37 @@ import org.apache.openejb.config.AppModu
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.DeploymentLoader;
 import org.apache.openejb.config.DeploymentModule;
+import org.apache.openejb.config.sys.AdditionalDeployments;
+import org.apache.openejb.config.sys.Deployments;
+import org.apache.openejb.config.sys.JaxbOpenejb;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
 
 import javax.ejb.Remote;
 import javax.ejb.Stateless;
 import javax.ejb.TransactionManagement;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.math.BigInteger;
 import java.security.SecureRandom;
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
 import java.util.TreeMap;
 
 import static javax.ejb.TransactionManagementType.BEAN;
+import static org.apache.openejb.config.ConfigurationFactory.ADDITIONAL_DEPLOYMENTS;
 
 @Stateless(name = "openejb/Deployer")
 @Remote(Deployer.class)
 @TransactionManagement(BEAN)
 public class DeployerEjb implements Deployer {
     public static final String OPENEJB_DEPLOYER_FORCED_APP_ID_PROP = "openejb.deployer.forced.appId";
+    public static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, DeployerEjb.class);
 
     private final static File uniqueFile;
 
@@ -153,6 +163,8 @@ public class DeployerEjb implements Depl
             }
             assembler.createApplication(appInfo);
 
+            saveDeployment(file, true);
+
             return appInfo;
         } catch (Throwable e) {
             // destroy the class loader for the failed application
@@ -176,6 +188,51 @@ public class DeployerEjb implements Depl
         }
     }
 
+    private synchronized void saveDeployment(final File file, boolean add) {
+        final Deployments deps = new Deployments();
+        if (file.isDirectory()) {
+            deps.setDir(file.getAbsolutePath());
+        } else {
+            deps.setJar(file.getAbsolutePath());
+        }
+
+        File config;
+        try {
+            config = SystemInstance.get().getBase().getFile(ADDITIONAL_DEPLOYMENTS, false);
+        } catch (IOException e) {
+            config = null;
+        }
+
+        // dump it
+        try {
+            final AdditionalDeployments additionalDeployments;
+            if (config.exists()) {
+                additionalDeployments = JaxbOpenejb.unmarshal(AdditionalDeployments.class, new FileInputStream(config));
+            } else {
+                additionalDeployments = new AdditionalDeployments();
+            }
+
+            if (add) {
+                additionalDeployments.getDeployments().add(deps);
+            } else {
+                Iterator<Deployments> it = additionalDeployments.getDeployments().iterator();
+                while (it.hasNext()) {
+                    final Deployments current = it.next();
+                    if (deps.getDir() != null && deps.getDir().equals(current.getDir())) {
+                        it.remove();
+                        break;
+                    } else if (deps.getJar() != null && deps.getJar().equals(current.getJar())) {
+                        it.remove();
+                        break;
+                    }
+                }
+            }
+            JaxbOpenejb.marshal(AdditionalDeployments.class, additionalDeployments, new FileOutputStream(config));
+        } catch (Exception e) {
+            LOGGER.error("can't save the added app, will not be present next time you'll start", e);
+        }
+    }
+
     private String realLocation(String rawLocation) throws Exception {
         final Class<?> clazz;
         try {
@@ -189,5 +246,6 @@ public class DeployerEjb implements Depl
 
     public void undeploy(String moduleId) throws UndeployException, NoSuchApplicationException {
         assembler.destroyApplication(moduleId);
+        saveDeployment(new File(moduleId), false);
     }
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1232647&r1=1232646&r2=1232647&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Tue Jan 17 23:27:54 2012
@@ -47,6 +47,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.TransactionServiceInfo;
 import org.apache.openejb.assembler.classic.WebAppInfo;
 import org.apache.openejb.config.sys.AbstractService;
+import org.apache.openejb.config.sys.AdditionalDeployments;
 import org.apache.openejb.config.sys.ConnectionManager;
 import org.apache.openejb.config.sys.Container;
 import org.apache.openejb.config.sys.Deployments;
@@ -76,6 +77,8 @@ import org.apache.openejb.util.URLs;
 
 import javax.ejb.embeddable.EJBContainer;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -95,7 +98,7 @@ import static org.apache.openejb.config.
 import static org.apache.openejb.config.ServiceUtils.implies;
 
 public class ConfigurationFactory implements OpenEjbConfigurationFactory {
-
+    public static final String ADDITIONAL_DEPLOYMENTS = "conf/deployments.xml";
     static final String CONFIGURATION_PROPERTY = "openejb.configuration";
     static final String CONF_FILE_PROPERTY = "openejb.conf.file";
     private static final String DEBUGGABLE_VM_HACKERY_PROPERTY = "openejb.debuggable-vm-hackery";
@@ -308,7 +311,6 @@ public class ConfigurationFactory implem
      * @throws OpenEJBException
      */
     public OpenEjbConfiguration getOpenEjbConfiguration() throws OpenEJBException {
-
         if (sys != null) {
             return sys;
         }
@@ -433,6 +435,20 @@ public class ConfigurationFactory implem
         if (openejb != null) {
             deployments.addAll(openejb.getDeployments());
         }
+        File additionalDeploymentFile;
+        try {
+            additionalDeploymentFile = SystemInstance.get().getBase().getFile(ADDITIONAL_DEPLOYMENTS, false);
+        } catch (IOException e) {
+            additionalDeploymentFile = null;
+        }
+        if (additionalDeploymentFile.exists()) {
+            try {
+                AdditionalDeployments additionalDeployments = JaxbOpenejb.unmarshal(AdditionalDeployments.class, new FileInputStream(additionalDeploymentFile));
+                deployments.addAll(additionalDeployments.getDeployments());
+            } catch (Exception e) {
+                logger.error("can't read " + ADDITIONAL_DEPLOYMENTS, e);
+            }
+        }
 
         // resolve jar locations //////////////////////////////////////  BEGIN  ///////
 

Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AdditionalDeployments.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AdditionalDeployments.java?rev=1232647&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AdditionalDeployments.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AdditionalDeployments.java Tue Jan 17 23:27:54 2012
@@ -0,0 +1,23 @@
+package org.apache.openejb.config.sys;
+
+import org.apache.openejb.config.sys.Deployments;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType
+@XmlRootElement(name = "additional-deployments")
+public class AdditionalDeployments {
+    @XmlElement(name = "deployments")
+    protected List<Deployments> deployments = new ArrayList<Deployments>();
+
+    public List<Deployments> getDeployments() {
+        return deployments;
+    }
+}