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