Author: rmannibucau
Date: Wed Jun 20 18:37:50 2012
New Revision: 1352256
URL: http://svn.apache.org/viewvc?rev=1352256&view=rev
Log:
TOMEE-247 allow to use postcontruct and predestroy annotations on hooks
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
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=1352256&r1=1352255&r2=1352256&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 18:37:50 2012
@@ -1087,6 +1087,8 @@ public class Assembler extends Assembler
destroyResource(binding.getName(), binding.getClassName(), object);
}
+ configFactory.destroy();
+
SystemInstance.get().removeComponent(OpenEjbConfiguration.class);
SystemInstance.get().removeComponent(JtaEntityManagerRegistry.class);
SystemInstance.get().removeComponent(TransactionSynchronizationRegistry.class);
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=1352256&r1=1352255&r2=1352256&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 18:37:50 2012
@@ -26,6 +26,8 @@ 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
@@ -33,5 +35,4 @@ public interface OpenEjbConfigurationFac
public ContainerSystemInfo getContainerSystemInformation()throws
OpenEJBException;
*/
-
}
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=1352256&r1=1352255&r2=1352256&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 18:37:50 2012
@@ -19,6 +19,8 @@ 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;
@@ -33,6 +35,8 @@ 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;
@@ -121,6 +125,8 @@ public class ConfigurationFactory implem
private static final String IGNORE_DEFAULT_VALUES_PROP =
"IgnoreDefaultValues";
+ private final List<Object> instantiatedHooks = new ArrayList<Object>();
+
private String configLocation;
private OpenEjbConfiguration sys;
private Openejb openejb;
@@ -493,6 +499,25 @@ 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() {
if (openejb == null) {
return;
@@ -511,10 +536,25 @@ public class ConfigurationFactory implem
try {
final Class<?> clazz = loader.loadClass(name);
- final Runnable instance = (Runnable) clazz.newInstance();
- instance.run();
+ final Object instance = clazz.newInstance();
+
+ instantiatedHooks.add(instance);
+
+ if (instance instanceof Runnable) {
+ ((Runnable) instance).run();
+ } else {
+ for (Method mtd : instance.getClass().getMethods()) {
+ if (mtd.getAnnotation(PostConstruct.class) != null) {
+ try {
+ mtd.invoke(instance);
+ } catch (Exception e) {
+ logger.error("can't call method " +
mtd.toGenericString() + ": " + e.getMessage());
+ }
+ }
+ }
+ }
} catch (Exception e) {
- logger.error("can't run hook '" + hook.getName() + "'", e);
+ logger.error("can't instantiate hook '" + hook.getName() +
"'", e);
}
}
}