You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by Romain Manni-Bucau <rm...@gmail.com> on 2012/07/21 08:52:02 UTC
Re: Fwd: svn commit: r1363775 - in /openejb/trunk/openejb:
container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/
tomee/tomee-catalina/ tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/
tomee/tomee-catalina/src/main/ja
I used tomcat clustering as base (thanks Andy again). It means session
clustering is generally here. Then resources can be in resources.xml. Then
you need to use openejb/tomee deployer (autodeployed app are ignored since
i thought you can copy the file everywhere in this mode). Then the node
getting this deploy/undeploy command will propagate it (a lot of tests
still needed). A master is not mandatory but i think will often be done in
pratice. About config you need to take care of it (my work was about
deploymen) and keep in mind full clusterijg has often a lot of drawbacks
compared to advantages.
- Romain
Le 21 juil. 2012 07:56, "Enrico Olivelli" <eo...@gmail.com> a écrit :
> this sounds very interesting !
> Have you got some design doc about this cluster deployment feature ?
>
> the app have to be managed only on one TomEE in the cluster
> (deploy/undeploy....) ?
> in GF there is the concept of DAS, a Node in the cluster which does
> configuration things and coordinates deployment on the other nodes
>
> The admin have to configure many things....
> - Resources (Datasources, Queues....) have to be configured cluster-wide
> - Tomcat session replication must be configured
> - OpenEJB cluster features must be configured
> - Quartz configuration must be the same (except from the scheduler local
> instance id) and it must use a datasource
> - Embedded ActiveMQ configuration will not be trivial (need to configure
> as master/slaver, use a shared datasource, client url to use MUST use
> failover or discovery.....) or the useer have tto use an external activemq
> - JPA issues ??
> - Configuration of Reverse-Proxy/Load balancers (maybe this is a Tomcat
> problem)
>
> - Enrico
>
>
>
>
>
>
> Il 20/07/2012 15:52, Romain Manni-Bucau ha scritto:
>
>> just pushed some cluster deployment feature. It still needs a lot of
>> improvement but i pushed it more for the idea.
>>
>> 1) currently it needs an app deploy through our deployer
>> (appinfo.autodeploy = false) -> here some work to do, the autodeploy
>> boolean should be true when tomcat manage the app or tomee manage it from
>> apps/ or a deployment defines in tomee.xml
>> 2) assembler deploy/undeploy events are observed and then a
>> deploy/undeploy
>> tomcat message cluster is sent to the cluster
>> 3) other listeneing member do the same
>>
>> it doesn't loop because we test if the app is already deployed.
>>
>> currently the filesystem should be the same
>>
>> here the todo we can discuss on:
>> 1) autodeploy boolean
>> 2) do we serialize the app to be able to deploy it even on remote hosts
>> 3) others
>>
>> any comments are welcomed of course ;)
>>
>> - Romain
>>
>>
>> ---------- Forwarded message ----------
>> From: <rm...@apache.org>
>> Date: 2012/7/20
>> Subject: svn commit: r1363775 - in /openejb/trunk/openejb:
>> container/openejb-core/src/**main/java/org/apache/openejb/**
>> assembler/classic/
>> tomee/tomee-catalina/
>> tomee/tomee-catalina/src/main/**java/org/apache/tomee/**catalina/
>> tomee/tomee-catalina/src/main/**java/org/apac...
>> To: commits@openejb.apache.org
>>
>>
>> Author: rmannibucau
>> Date: Fri Jul 20 13:47:29 2012
>> New Revision: 1363775
>>
>> URL: http://svn.apache.org/viewvc?**rev=1363775&view=rev<http://svn.apache.org/viewvc?rev=1363775&view=rev>
>> Log:
>> TOMEE-334 basic clustering deployment through tomcat cluster
>>
>> Added:
>>
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/
>>
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/ClusterObserver.java
>>
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/DeployMessage.java
>>
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/TomEEClusterListener.**java
>>
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/UndeployMessage.java
>> Modified:
>>
>> openejb/trunk/openejb/**container/openejb-core/src/**
>> main/java/org/apache/openejb/**assembler/classic/AppInfo.java
>>
>> openejb/trunk/openejb/**container/openejb-core/src/**
>> main/java/org/apache/openejb/**assembler/classic/Assembler.**java
>> openejb/trunk/openejb/tomee/**tomee-catalina/pom.xml
>>
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**TomcatWebAppBuilder.java
>>
>> Modified:
>> openejb/trunk/openejb/**container/openejb-core/src/**
>> main/java/org/apache/openejb/**assembler/classic/AppInfo.java
>> URL:
>> http://svn.apache.org/viewvc/**openejb/trunk/openejb/**
>> container/openejb-core/src/**main/java/org/apache/openejb/**
>> assembler/classic/AppInfo.**java?rev=1363775&r1=1363774&**
>> r2=1363775&view=diff<http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java?rev=1363775&r1=1363774&r2=1363775&view=diff>
>> ==============================**==============================**
>> ==================
>> ---
>> openejb/trunk/openejb/**container/openejb-core/src/**
>> main/java/org/apache/openejb/**assembler/classic/AppInfo.java
>> (original)
>> +++
>> openejb/trunk/openejb/**container/openejb-core/src/**
>> main/java/org/apache/openejb/**assembler/classic/AppInfo.java
>> Fri Jul 20 13:47:29 2012
>> @@ -28,6 +28,7 @@ import java.util.TreeSet;
>> public class AppInfo extends InfoObject {
>> public String appId;
>> public String path;
>> + public boolean autoDeploy = true;
>> public boolean standaloneModule;
>> public final List<ClientInfo> clients = new ArrayList<ClientInfo>();
>> public final List<EjbJarInfo> ejbJars = new ArrayList<EjbJarInfo>();
>>
>> Modified:
>> openejb/trunk/openejb/**container/openejb-core/src/**
>> main/java/org/apache/openejb/**assembler/classic/Assembler.**java
>> URL:
>> http://svn.apache.org/viewvc/**openejb/trunk/openejb/**
>> container/openejb-core/src/**main/java/org/apache/openejb/**
>> assembler/classic/Assembler.**java?rev=1363775&r1=1363774&**
>> r2=1363775&view=diff<http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1363775&r1=1363774&r2=1363775&view=diff>
>> ==============================**==============================**
>> ==================
>> ---
>> openejb/trunk/openejb/**container/openejb-core/src/**
>> main/java/org/apache/openejb/**assembler/classic/Assembler.**java
>> (original)
>> +++
>> openejb/trunk/openejb/**container/openejb-core/src/**
>> main/java/org/apache/openejb/**assembler/classic/Assembler.**java
>> Fri Jul 20 13:47:29 2012
>> @@ -121,6 +121,7 @@ import org.apache.openejb.javaagent.**Agen
>> import org.apache.openejb.jpa.**integration.MakeTxLookup;
>> import org.apache.openejb.loader.**JarLocation;
>> import org.apache.openejb.loader.**Options;
>> +import org.apache.openejb.loader.**ProvisioningUtil;
>> import org.apache.openejb.loader.**SystemInstance;
>> import org.apache.openejb.monitoring.**DynamicMBeanWrapper;
>> import org.apache.openejb.assembler.**monitoring.JMXContainer;
>> @@ -419,6 +420,10 @@ public class Assembler extends Assembler
>> }
>> }
>>
>> + public boolean isDeployed(final String path) {
>> + return
>> deployedApplications.**containsKey(ProvisioningUtil.**
>> realLocation(path));
>> + }
>> +
>> public Collection<AppInfo> getDeployedApplications() {
>> return new ArrayList<AppInfo>(**deployedApplications.values())*
>> *;
>> }
>>
>> Modified: openejb/trunk/openejb/tomee/**tomee-catalina/pom.xml
>> URL:
>> http://svn.apache.org/viewvc/**openejb/trunk/openejb/tomee/**
>> tomee-catalina/pom.xml?rev=**1363775&r1=1363774&r2=1363775&**view=diff<http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/pom.xml?rev=1363775&r1=1363774&r2=1363775&view=diff>
>> ==============================**==============================**
>> ==================
>> --- openejb/trunk/openejb/tomee/**tomee-catalina/pom.xml (original)
>> +++ openejb/trunk/openejb/tomee/**tomee-catalina/pom.xml Fri Jul 20
>> 13:47:29
>> 2012
>> @@ -86,6 +86,12 @@
>> <version>${tomcat.version}</**version>
>> <scope>provided</scope>
>> </dependency>
>> + <dependency>
>> + <groupId>org.apache.tomcat</**groupId>
>> + <artifactId>tomcat-catalina-**ha</artifactId>
>> + <version>${tomcat.version}</**version>
>> + <scope>provided</scope>
>> + </dependency>
>> </dependencies>
>> </project>
>>
>>
>> Modified:
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**TomcatWebAppBuilder.java
>> URL:
>> http://svn.apache.org/viewvc/**openejb/trunk/openejb/tomee/**
>> tomee-catalina/src/main/java/**org/apache/tomee/catalina/**
>> TomcatWebAppBuilder.java?rev=**1363775&r1=1363774&r2=1363775&**view=diff<http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1363775&r1=1363774&r2=1363775&view=diff>
>> ==============================**==============================**
>> ==================
>> ---
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**TomcatWebAppBuilder.java
>> (original)
>> +++
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**TomcatWebAppBuilder.java
>> Fri Jul 20 13:47:29 2012
>> @@ -16,9 +16,7 @@
>> */
>> package org.apache.tomee.catalina;
>>
>> -import java.util.ArrayList;
>> -import java.util.Collection;
>> -import java.util.List;
>> +import org.apache.catalina.Cluster;
>> import org.apache.catalina.Container;
>> import org.apache.catalina.Engine;
>> import org.apache.catalina.Host;
>> @@ -43,19 +41,31 @@ import org.apache.catalina.deploy.**Contex
>> import org.apache.catalina.deploy.**ContextResourceLink;
>> import org.apache.catalina.deploy.**ContextTransaction;
>> import org.apache.catalina.deploy.**NamingResources;
>> +import org.apache.catalina.ha.**CatalinaCluster;
>> import org.apache.catalina.loader.**WebappClassLoader;
>> import org.apache.catalina.loader.**WebappLoader;
>> import org.apache.catalina.startup.**Constants;
>> import org.apache.catalina.startup.**ContextConfig;
>> import org.apache.catalina.startup.**HostConfig;
>> import org.apache.catalina.startup.**RealmRuleSet;
>> +import org.apache.catalina.tribes.**Member;
>> import org.apache.naming.**ContextAccessController;
>> import org.apache.naming.**ContextBindings;
>> import org.apache.openejb.AppContext;
>> import org.apache.openejb.**BeanContext;
>> import org.apache.openejb.Injection;
>> import org.apache.openejb.**OpenEJBException;
>> -import org.apache.openejb.assembler.**classic.*;
>> +import org.apache.openejb.assembler.**classic.AppInfo;
>> +import org.apache.openejb.assembler.**classic.Assembler;
>> +import org.apache.openejb.assembler.**classic.ClassListInfo;
>> +import org.apache.openejb.assembler.**classic.ConnectorInfo;
>> +import org.apache.openejb.assembler.**classic.**
>> DeploymentExceptionManager;
>> +import org.apache.openejb.assembler.**classic.EjbJarInfo;
>> +import org.apache.openejb.assembler.**classic.InjectionBuilder;
>> +import org.apache.openejb.assembler.**classic.JndiEncBuilder;
>> +import org.apache.openejb.assembler.**classic.ServletInfo;
>> +import org.apache.openejb.assembler.**classic.WebAppBuilder;
>> +import org.apache.openejb.assembler.**classic.WebAppInfo;
>> import org.apache.openejb.cdi.**CdiBuilder;
>> import org.apache.openejb.config.**AppModule;
>> import org.apache.openejb.config.**ConfigurationFactory;
>> @@ -74,6 +84,8 @@ import org.apache.openejb.util.**LogCatego
>> import org.apache.openejb.util.**Logger;
>> import org.apache.tomcat.**InstanceManager;
>> import org.apache.tomcat.util.**digester.Digester;
>> +import org.apache.tomee.catalina.**cluster.ClusterObserver;
>> +import org.apache.tomee.catalina.**cluster.TomEEClusterListener;
>> import org.apache.tomee.catalina.**event.AfterApplicationCreated;
>> import org.apache.tomee.common.**LegacyAnnotationProcessor;
>> import org.apache.tomee.common.**TomcatVersion;
>> @@ -99,9 +111,12 @@ import java.io.File;
>> import java.io.IOException;
>> import java.io.InputStream;
>> import java.lang.reflect.Field;
>> +import java.util.ArrayList;
>> +import java.util.Collection;
>> import java.util.HashMap;
>> import java.util.HashSet;
>> import java.util.Iterator;
>> +import java.util.List;
>> import java.util.Map;
>> import java.util.Set;
>> import java.util.TreeMap;
>> @@ -178,6 +193,8 @@ public class TomcatWebAppBuilder impleme
>>
>> private String defaultHost = "localhost";
>>
>> + private Set<CatalinaCluster> clusters = new
>> HashSet<CatalinaCluster>();
>> +
>> /**
>> * Creates a new web application builder
>> * instance.
>> @@ -195,11 +212,13 @@ public class TomcatWebAppBuilder impleme
>> for (final Service service : standardServer.findServices()) {
>> if (service.getContainer() instanceof Engine) {
>> final Engine engine = (Engine) service.getContainer();
>> + manageCluster(engine.**getCluster());
>> defaultHost = engine.getDefaultHost();
>> addTomEERealm(engine);
>> for (final Container engineChild :
>> engine.findChildren()) {
>> if (engineChild instanceof StandardHost) {
>> final StandardHost host = (StandardHost)
>> engineChild;
>> + manageCluster(host.getCluster(**));
>> addTomEERealm(host);
>> hosts.put(host.getName(), host);
>> for (final LifecycleListener listener :
>> host.findLifecycleListeners()) {
>> @@ -213,10 +232,24 @@ public class TomcatWebAppBuilder impleme
>> }
>> }
>>
>> + SystemInstance.get().**addObserver(new
>> ClusterObserver(clusters));
>> +
>> configurationFactory = new ConfigurationFactory();
>> deploymentLoader = new DeploymentLoader();
>> }
>>
>> + private void manageCluster(final Cluster cluster) {
>> + if (cluster == null) {
>> + return;
>> + }
>> +
>> + if (cluster instanceof CatalinaCluster) {
>> + final CatalinaCluster haCluster = (CatalinaCluster) cluster;
>> + haCluster.addClusterListener(**new TomEEClusterListener());
>> + clusters.add(haCluster);
>> + }
>> + }
>> +
>> private void addTomEERealm(final Engine engine) {
>> final Realm realm = engine.getRealm();
>> if (realm != null && !(realm instanceof TomEERealm)
>> @@ -388,6 +421,7 @@ public class TomcatWebAppBuilder impleme
>>
>> // TODO: instead of storing deployers, we could just
>> lookup the right hostconfig for the server.
>> final HostConfig deployer = deployers.get(host);
>> + appInfo.autoDeploy = false;
>> if (isReady(deployer)) { // if not ready using directly
>> host to avoid a NPE
>> // host isn't set until we call deployer.manageApp,
>> so
>> pass it
>> // ?? host is set through an event and it can be
>> null
>> here :(
>>
>> Added:
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/ClusterObserver.java
>> URL:
>> http://svn.apache.org/viewvc/**openejb/trunk/openejb/tomee/**
>> tomee-catalina/src/main/java/**org/apache/tomee/catalina/**
>> cluster/ClusterObserver.java?**rev=1363775&view=auto<http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cluster/ClusterObserver.java?rev=1363775&view=auto>
>> ==============================**==============================**
>> ==================
>> ---
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/ClusterObserver.java
>> (added)
>> +++
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/ClusterObserver.java
>> Fri Jul 20 13:47:29 2012
>> @@ -0,0 +1,38 @@
>> +package org.apache.tomee.catalina.**cluster;
>> +
>> +import org.apache.catalina.ha.**CatalinaCluster;
>> +import org.apache.catalina.ha.**ClusterMessage;
>> +import org.apache.openejb.assembler.**classic.AppInfo;
>> +import
>> org.apache.openejb.assembler.**classic.event.**
>> AssemblerAfterApplicationCreat**ed;
>> +import
>> org.apache.openejb.assembler.**classic.event.**
>> AssemblerBeforeApplicationDest**royed;
>> +import org.apache.openejb.observer.**Observes;
>> +
>> +import java.io.File;
>> +import java.util.Set;
>> +
>> +public class ClusterObserver {
>> + private final Set<CatalinaCluster> clusters;
>> +
>> + public ClusterObserver(final Set<CatalinaCluster> clusters) {
>> + this.clusters = clusters;
>> + }
>> +
>> + public void deploy(@Observes final AssemblerAfterApplicationCreat**
>> ed
>> app) {
>> + final AppInfo appInfo = app.getApp();
>> + send(new UndeployMessage(appInfo.path), appInfo);
>> + }
>> +
>> + public void undeploy(@Observes final
>> AssemblerBeforeApplicationDest**royed app) {
>> + final AppInfo appInfo = app.getApp();
>> + send(new DeployMessage(appInfo.path), appInfo);
>> + }
>> +
>> + private void send(final ClusterMessage message, final AppInfo app) {
>> + for (CatalinaCluster cluster : clusters) {
>> + final String path = app.path;
>> + if (new File(path).exists() && !app.autoDeploy) {
>> + cluster.send(message);
>> + }
>> + }
>> + }
>> +}
>>
>> Added:
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/DeployMessage.java
>> URL:
>> http://svn.apache.org/viewvc/**openejb/trunk/openejb/tomee/**
>> tomee-catalina/src/main/java/**org/apache/tomee/catalina/**
>> cluster/DeployMessage.java?**rev=1363775&view=auto<http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cluster/DeployMessage.java?rev=1363775&view=auto>
>> ==============================**==============================**
>> ==================
>> ---
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/DeployMessage.java
>> (added)
>> +++
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/DeployMessage.java
>> Fri Jul 20 13:47:29 2012
>> @@ -0,0 +1,16 @@
>> +package org.apache.tomee.catalina.**cluster;
>> +
>> +import org.apache.catalina.ha.**ClusterMessageBase;
>> +
>> +// TODO: serialize file in byte[] to be able to send it over the network?
>> +public class DeployMessage extends ClusterMessageBase {
>> + private String file;
>> +
>> + public DeployMessage(final String path) {
>> + file = path;
>> + }
>> +
>> + public String getFile() {
>> + return file;
>> + }
>> +}
>>
>> Added:
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/TomEEClusterListener.**java
>> URL:
>> http://svn.apache.org/viewvc/**openejb/trunk/openejb/tomee/**
>> tomee-catalina/src/main/java/**org/apache/tomee/catalina/**
>> cluster/TomEEClusterListener.**java?rev=1363775&view=auto<http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cluster/TomEEClusterListener.java?rev=1363775&view=auto>
>> ==============================**==============================**
>> ==================
>> ---
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/TomEEClusterListener.**java
>> (added)
>> +++
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/TomEEClusterListener.**java
>> Fri Jul 20 13:47:29 2012
>> @@ -0,0 +1,77 @@
>> +package org.apache.tomee.catalina.**cluster;
>> +
>> +import org.apache.catalina.ha.**ClusterListener;
>> +import org.apache.catalina.ha.**ClusterMessage;
>> +import org.apache.openejb.**NoSuchApplicationException;
>> +import org.apache.openejb.**OpenEJBException;
>> +import org.apache.openejb.**UndeployException;
>> +import org.apache.openejb.assembler.**Deployer;
>> +import org.apache.openejb.assembler.**classic.Assembler;
>> +import org.apache.openejb.core.**LocalInitialContextFactory;
>> +import org.apache.openejb.loader.**SystemInstance;
>> +import org.apache.openejb.util.**LogCategory;
>> +import org.apache.openejb.util.**Logger;
>> +
>> +import javax.naming.Context;
>> +import javax.naming.InitialContext;
>> +import javax.naming.NamingException;
>> +import java.io.File;
>> +import java.util.Properties;
>> +
>> +public class TomEEClusterListener extends ClusterListener {
>> + private static final Logger LOGGER =
>> Logger.getInstance(**LogCategory.OPENEJB, TomEEClusterListener.class);
>> + private static final Properties IC_PROPS = new Properties();
>> +
>> + static {
>> + IC_PROPS.setProperty(Context.**INITIAL_CONTEXT_FACTORY,
>> LocalInitialContextFactory.**class.getName());
>> + }
>> +
>> + @Override
>> + public void messageReceived(final ClusterMessage clusterMessage) {
>> + final Class<?> type = clusterMessage.getClass();
>> +
>> + if (DeployMessage.class.equals(**type)) {
>> + final DeployMessage msg = (DeployMessage) clusterMessage;
>> + final String file = msg.getFile();
>> + final boolean alreadyDeployed =
>> SystemInstance.get().**getComponent(Assembler.class).**isDeployed(file);
>> + final File ioFile = new File(file);
>> + if (ioFile.exists() && !alreadyDeployed) {
>> + try {
>> + deployer().deploy(file);
>> + } catch (OpenEJBException e) {
>> + LOGGER.warning("can't deploy: " + ioFile.getPath(),
>> e);
>> + } catch (NamingException e) {
>> + LOGGER.warning("can't find deployer", e);
>> + }
>> + } else if (!alreadyDeployed) {
>> + LOGGER.warning("file is remote, can't deploy it: " +
>> ioFile.getPath());
>> + } else {
>> + LOGGER.info("application already deployed: " + file);
>> + }
>> + } else if (UndeployMessage.class.equals(**type)) {
>> + final String file = ((UndeployMessage)
>> clusterMessage).getFile();
>> + if
>> (SystemInstance.get().**getComponent(Assembler.class).**isDeployed(file))
>> {
>> + try {
>> + deployer().undeploy(file);
>> + } catch (UndeployException e) {
>> + LOGGER.error("can't undeploy app", e);
>> + } catch (NoSuchApplicationException e) {
>> + LOGGER.warning("no app toi deploy", e);
>> + } catch (NamingException e) {
>> + LOGGER.warning("can't find deployer", e);
>> + }
>> + }
>> + } else {
>> + LOGGER.warning("message type not supported: " + type);
>> + }
>> + }
>> +
>> + private Deployer deployer() throws NamingException {
>> + return (Deployer) new
>> InitialContext(IC_PROPS).**lookup("openejb/**DeployerBusinessRemote");
>> + }
>> +
>> + @Override
>> + public boolean accept(final ClusterMessage clusterMessage) {
>> + return DeployMessage.class.equals(**clusterMessage.getClass())
>> ||
>> UndeployMessage.class.equals(**clusterMessage.getClass());
>> + }
>> +}
>>
>> Added:
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/UndeployMessage.java
>> URL:
>> http://svn.apache.org/viewvc/**openejb/trunk/openejb/tomee/**
>> tomee-catalina/src/main/java/**org/apache/tomee/catalina/**
>> cluster/UndeployMessage.java?**rev=1363775&view=auto<http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cluster/UndeployMessage.java?rev=1363775&view=auto>
>> ==============================**==============================**
>> ==================
>> ---
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/UndeployMessage.java
>> (added)
>> +++
>> openejb/trunk/openejb/tomee/**tomee-catalina/src/main/java/**
>> org/apache/tomee/catalina/**cluster/UndeployMessage.java
>> Fri Jul 20 13:47:29 2012
>> @@ -0,0 +1,15 @@
>> +package org.apache.tomee.catalina.**cluster;
>> +
>> +import org.apache.catalina.ha.**ClusterMessageBase;
>> +
>> +public class UndeployMessage extends ClusterMessageBase {
>> + private String file;
>> +
>> + public UndeployMessage(final String path) {
>> + file = path;
>> + }
>> +
>> + public String getFile() {
>> + return file;
>> + }
>> +}
>>
>>
>