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;
+ }
+}