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/06/20 21:39:20 UTC

svn commit: r1352279 - in /openejb/trunk/openejb/container/openejb-core/src: main/java/org/apache/openejb/assembler/classic/ main/java/org/apache/openejb/config/ main/java/org/apache/openejb/config/sys/ main/java/org/apache/openejb/util/ test/java/org/...

Author: rmannibucau
Date: Wed Jun 20 19:39:20 2012
New Revision: 1352279

URL: http://svn.apache.org/viewvc?rev=1352279&view=rev
Log:
TOMEE-247 InitHooks replaced by ServerObservers and using CDI like API

Added:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServerObservers.java
      - copied, changed from r1352193, openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java
Removed:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java
Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationFactory.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/HooksTest.java

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=1352279&r1=1352278&r2=1352279&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 Wed Jun 20 19:39:20 2012
@@ -119,6 +119,8 @@ import org.apache.openejb.monitoring.Dyn
 import org.apache.openejb.assembler.monitoring.JMXContainer;
 import org.apache.openejb.monitoring.LocalMBeanServer;
 import org.apache.openejb.monitoring.ObjectNameBuilder;
+import org.apache.openejb.observer.ObserverManager;
+import org.apache.openejb.observer.event.DestroyingEvent;
 import org.apache.openejb.persistence.JtaEntityManagerRegistry;
 import org.apache.openejb.persistence.PersistenceClassLoaderHandler;
 import org.apache.openejb.resource.GeronimoConnectionManagerFactory;
@@ -1087,8 +1089,13 @@ public class Assembler extends Assembler
             destroyResource(binding.getName(), binding.getClassName(), object);
         }
 
-        configFactory.destroy();
+        final ObserverManager mgr = SystemInstance.get().getComponent(ObserverManager.class);
+        if (mgr != null) {
+            mgr.fireEvent(new DestroyingEvent());
+            mgr.clean();
+        }
 
+        SystemInstance.get().removeComponent(ObserverManager.class);
         SystemInstance.get().removeComponent(OpenEjbConfiguration.class);
         SystemInstance.get().removeComponent(JtaEntityManagerRegistry.class);
         SystemInstance.get().removeComponent(TransactionSynchronizationRegistry.class);
@@ -1944,5 +1951,4 @@ public class Assembler extends Assembler
             return thread;
         }
     }
-
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationFactory.java?rev=1352279&r1=1352278&r2=1352279&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationFactory.java Wed Jun 20 19:39:20 2012
@@ -26,8 +26,6 @@ public interface OpenEjbConfigurationFac
 
     public OpenEjbConfiguration getOpenEjbConfiguration() throws OpenEJBException;
 
-    void destroy();
-
     /*
      * Not used yet.
      * Will be used in the future to give the ability to load and reload container systems

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=1352279&r1=1352278&r2=1352279&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 Wed Jun 20 19:39:20 2012
@@ -19,8 +19,6 @@ package org.apache.openejb.config;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -35,8 +33,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
 import javax.ejb.embeddable.EJBContainer;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.Vendor;
@@ -74,13 +70,13 @@ import org.apache.openejb.config.sys.Add
 import org.apache.openejb.config.sys.ConnectionManager;
 import org.apache.openejb.config.sys.Container;
 import org.apache.openejb.config.sys.Deployments;
-import org.apache.openejb.config.sys.InitHooks;
 import org.apache.openejb.config.sys.JaxbOpenejb;
 import org.apache.openejb.config.sys.JndiProvider;
 import org.apache.openejb.config.sys.Openejb;
 import org.apache.openejb.config.sys.ProxyFactory;
 import org.apache.openejb.config.sys.Resource;
 import org.apache.openejb.config.sys.SecurityService;
+import org.apache.openejb.config.sys.ServerObservers;
 import org.apache.openejb.config.sys.ServiceProvider;
 import org.apache.openejb.config.sys.TransactionManager;
 import org.apache.openejb.jee.Application;
@@ -96,6 +92,8 @@ import org.apache.openejb.loader.FileUti
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.Options;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.observer.event.ConfigurationReadEvent;
+import org.apache.openejb.observer.ObserverManager;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
@@ -391,7 +389,7 @@ public class ConfigurationFactory implem
 
         loadPropertiesDeclaredConfiguration(openejb);
 
-        initHook();
+        initObservers();
 
         sys = new OpenEjbConfiguration();
         sys.containerSystem = new ContainerSystemInfo();
@@ -499,26 +497,7 @@ public class ConfigurationFactory implem
         return finished;
     }
 
-    @Override
-    public void destroy() {
-        for (Object o : instantiatedHooks) {
-            if (o instanceof Runnable) {
-                continue;
-            }
-
-            for (Method mtd : o.getClass().getMethods()) {
-                if (mtd.getAnnotation(PreDestroy.class) != null) {
-                    try {
-                        mtd.invoke(o);
-                    } catch (Exception e) {
-                        logger.error("can't call method " + mtd.toGenericString() + ": " + e.getMessage());
-                    }
-                }
-            }
-        }
-    }
-
-    private void initHook() {
+    private void initObservers() {
         if (openejb == null) {
             return;
         }
@@ -528,7 +507,13 @@ public class ConfigurationFactory implem
             return;
         }
 
-        for (InitHooks hook : openejb.getHooks()) {
+        ObserverManager mgr = SystemInstance.get().getComponent(ObserverManager.class);
+        if (mgr == null) {
+            mgr = new ObserverManager();
+            SystemInstance.get().setComponent(ObserverManager.class, mgr);
+        }
+
+        for (ServerObservers hook : openejb.getServerObservers()) {
             String name = hook.getName();
             if (KNOWN_HOOKS.containsKey(name)) { // aliases
                 name = KNOWN_HOOKS.get(name);
@@ -538,25 +523,13 @@ public class ConfigurationFactory implem
                 final Class<?> clazz = loader.loadClass(name);
                 final Object instance = clazz.newInstance();
 
-                instantiatedHooks.add(instance);
-
-                if (instance instanceof Runnable) {
-                    ((Runnable) instance).run();
-                } else {
-                    for (Method mtd : instance.getClass().getMethods()) {
-                        if (!Object.class.equals(mtd.getDeclaringClass()) && mtd.getAnnotation(PostConstruct.class) != null) {
-                            try {
-                                mtd.invoke(instance);
-                            } catch (Exception e) {
-                                logger.error("can't call method " + mtd.toGenericString() + ": " + e.getMessage());
-                            }
-                        }
-                    }
-                }
+                mgr.addObserver(instance);
             } catch (Exception e) {
                 logger.error("can't instantiate hook '" + hook.getName() + "'", e);
             }
         }
+
+        mgr.fireEvent(new ConfigurationReadEvent());
     }
 
     private List<String> getDeclaredApps() {
@@ -709,8 +682,8 @@ public class ConfigurationFactory implem
                     }
                     deployments.setClasspath(new URLClassLoader(urls.toArray(new URL[urls.size()])));
                 }
-            } else if (object instanceof InitHooks) {
-                final InitHooks hook = (InitHooks) object;
+            } else if (object instanceof ServerObservers) {
+                final ServerObservers hook = (ServerObservers) object;
                 hook.setName(map.remove("name"));
             }
 
@@ -1415,5 +1388,4 @@ public class ConfigurationFactory implem
             return null;
         }
     }
-
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java?rev=1352279&r1=1352278&r2=1352279&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java Wed Jun 20 19:39:20 2012
@@ -121,8 +121,8 @@ public abstract class JaxbOpenejb {
             return (T) createServicesJar();
         } else if (type.equals("TransactionManager")) {
             return (T) createTransactionManager();
-        } else if (type.equals("InitHooks")) {
-            return (T) createInitHooks();
+        } else if (type.equals("ServerObservers")) {
+            return (T) createServerObservers();
         }
         throw new IllegalArgumentException("Unknown type " + type);
     }
@@ -380,8 +380,8 @@ public abstract class JaxbOpenejb {
         return new Deployments();
     }
 
-    public static InitHooks createInitHooks() {
-        return new InitHooks();
+    public static ServerObservers createServerObservers() {
+        return new ServerObservers();
     }
 
     public static JndiProvider createJndiProvider() {

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java?rev=1352279&r1=1352278&r2=1352279&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java Wed Jun 20 19:39:20 2012
@@ -51,7 +51,7 @@ import java.util.List;
  * </pre>
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "", propOrder = {"container", "jndiProvider", "securityService", "transactionManager", "connectionManager", "proxyFactory", "connector", "resource", "deployments", "hooks"})
+@XmlType(name = "", propOrder = {"container", "jndiProvider", "securityService", "transactionManager", "connectionManager", "proxyFactory", "connector", "resource", "deployments", "serverObservers"})
 @XmlRootElement(name = "openejb")
 public class Openejb {
 
@@ -73,8 +73,8 @@ public class Openejb {
     protected List<Resource> resource;
     @XmlElement(name = "Deployments")
     protected List<Deployments> deployments;
-    @XmlElement(name = "InitHooks")
-    protected List<InitHooks> hooks;
+    @XmlElement(name = "ServerObservers")
+    protected List<ServerObservers> serverObservers;
 
     /**
      * Gets the value of the container property.
@@ -305,11 +305,11 @@ public class Openejb {
         return this.deployments;
     }
 
-    public List<InitHooks> getHooks() {
-        if (hooks == null) {
-            hooks = new ArrayList<InitHooks>();
+    public List<ServerObservers> getServerObservers() {
+        if (serverObservers == null) {
+            serverObservers = new ArrayList<ServerObservers>();
         }
-        return this.hooks;
+        return this.serverObservers;
     }
 
     public void add(Object service) {
@@ -331,8 +331,8 @@ public class Openejb {
             setSecurityService((SecurityService) service);
         } else if (service instanceof Deployments) {
             getDeployments().add((Deployments) service);
-        } else if (service instanceof InitHooks) {
-            getHooks().add((InitHooks) service);
+        } else if (service instanceof ServerObservers) {
+            getServerObservers().add((ServerObservers) service);
         }
     }
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java?rev=1352279&r1=1352278&r2=1352279&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java Wed Jun 20 19:39:20 2012
@@ -22,7 +22,6 @@ import java.io.FileNotFoundException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.config.Service;
 import org.apache.openejb.loader.SystemInstance;
 import org.xml.sax.Attributes;
@@ -127,7 +126,7 @@ class SaxOpenejb extends DefaultHandler 
             else if (localName.equals("Connector")) push(new ResourceElement());
             else if (localName.equals("Deployments")) push(new DeploymentsElement());
             else if (localName.equals("Import")) push(new ImportElement());
-            else if (localName.equals("InitHooks")) push(new InitHooksElement());
+            else if (localName.equals("ServerObservers")) push(new ServerObserversElement());
             else throw new IllegalStateException("Unsupported Element: " + localName);
             get().startElement(uri, localName, qName, attributes);
         }
@@ -290,17 +289,17 @@ class SaxOpenejb extends DefaultHandler 
         }
     }
 
-    private class InitHooksElement extends DefaultHandler {
-        private final InitHooks initHooks = new InitHooks();
+    private class ServerObserversElement extends DefaultHandler {
+        private final ServerObservers observer = new ServerObservers();
 
         @Override
         public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-            initHooks.setName(attributes.getValue("name"));
+            observer.setName(attributes.getValue("name"));
         }
 
         @Override
         public void endElement(String uri, String localName, String qName) throws SAXException {
-            openejb.getHooks().add(initHooks);
+            openejb.getServerObservers().add(observer);
         }
     }
 

Copied: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServerObservers.java (from r1352193, openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServerObservers.java?p2=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServerObservers.java&p1=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java&r1=1352193&r2=1352279&rev=1352279&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/InitHooks.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServerObservers.java Wed Jun 20 19:39:20 2012
@@ -25,8 +25,8 @@ import javax.xml.bind.annotation.XmlType
 
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "")
-@XmlRootElement(name = "InitHooks")
-public class InitHooks {
+@XmlRootElement(name = "ServerObservers")
+public class ServerObservers {
 
     @XmlAttribute
     protected String name;

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java?rev=1352279&r1=1352278&r2=1352279&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java Wed Jun 20 19:39:20 2012
@@ -17,14 +17,14 @@
 package org.apache.openejb.util;
 
 import java.net.MalformedURLException;
-import java.util.HashMap;
-import java.util.Map;
+import java.net.URL;
+import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.observer.Observes;
+import org.apache.openejb.observer.event.ConfigurationReadEvent;
 
-import java.net.URL;
-
-public class UpdateChecker implements Runnable {
+public class UpdateChecker {
     private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB_STARTUP, UpdateChecker.class);
 
     private static final String SKIP_CHECK = "openejb.version.check";
@@ -38,8 +38,7 @@ public class UpdateChecker implements Ru
     private static final String UNDEFINED = "undefined";
     private static String LATEST = "undefined";
 
-    @Override
-    public void run() {
+    public void check(@Observes ConfigurationReadEvent event) {
         if (isSkipped()) {
             return;
         }
@@ -164,10 +163,4 @@ public class UpdateChecker implements Ru
     public static boolean isSkipped() {
         return System.getProperty(SKIP_CHECK) == null;
     }
-
-    public static void main(String[] args) {
-        UpdateChecker checker = new UpdateChecker();
-        checker.run();
-        System.out.println(UpdateChecker.message());
-    }
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/HooksTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/HooksTest.java?rev=1352279&r1=1352278&r2=1352279&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/HooksTest.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/HooksTest.java Wed Jun 20 19:39:20 2012
@@ -1,10 +1,13 @@
 package org.apache.openejb.config;
 
 import java.util.Properties;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.observer.ObserverManager;
+import org.apache.openejb.observer.Observes;
+import org.apache.openejb.observer.event.ConfigurationReadEvent;
+import org.apache.openejb.observer.event.DestroyingEvent;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -16,8 +19,7 @@ public class HooksTest {
     @BeforeClass
     public static void init() {
         SystemInstance.get().getProperties().putAll(new Properties() {{
-            setProperty("run", "new://InitHooks?name=" + HookRun.class.getName());
-            setProperty("lifecycle", "new://InitHooks?name=" + HookLifecycle.class.getName());
+            setProperty("lifecycle", "new://ServerObservers?name=" + HookLifecycle.class.getName());
         }});
     }
 
@@ -29,34 +31,22 @@ public class HooksTest {
     @Test
     public void check() throws OpenEJBException {
         final ConfigurationFactory cf = new ConfigurationFactory();
-        cf.getOpenEjbConfiguration();
-        assertTrue(HookRun.ok);
+        cf.getOpenEjbConfiguration(); // load observers
         assertTrue(HookLifecycle.start);
         assertFalse(HookLifecycle.stop);
-        cf.destroy();
+        SystemInstance.get().getComponent(ObserverManager.class).fireEvent(new DestroyingEvent());
         assertTrue(HookLifecycle.stop);
     }
 
-    public static class HookRun implements Runnable {
-        private static boolean ok = false;
-
-        @Override
-        public void run() {
-            ok = true;
-        }
-    }
-
     public static class HookLifecycle {
         private static boolean start = false;
         private static boolean stop = false;
 
-        @PostConstruct
-        public void start() {
+        public void start(@Observes ConfigurationReadEvent notUsed) {
             start = true;
         }
 
-        @PreDestroy
-        public void stop() {
+        public void stop(@Observes DestroyingEvent notUsed) {
             stop = true;
         }
     }