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


Reply via email to