[jboss-cvs] JBossAS SVN: r76105 - trunk/tomcat/src/main/org/jboss/web/tomcat/service.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Jul 22 11:09:29 EDT 2008
Author: emuckenhuber
Date: 2008-07-22 11:09:29 -0400 (Tue, 22 Jul 2008)
New Revision: 76105
Modified:
trunk/tomcat/src/main/org/jboss/web/tomcat/service/TomcatInjectionContainer.java
Log:
[JBAS-5673] process @PostConstruct and @PreDestroy
Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/TomcatInjectionContainer.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/TomcatInjectionContainer.java 2008-07-22 15:05:26 UTC (rev 76104)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/TomcatInjectionContainer.java 2008-07-22 15:09:29 UTC (rev 76105)
@@ -68,6 +68,7 @@
import org.jboss.jpa.resolvers.PersistenceUnitDependencyResolver;
import org.jboss.logging.Logger;
import org.jboss.metadata.javaee.spec.Environment;
+import org.jboss.metadata.javaee.spec.LifecycleCallbackMetaData;
import org.jboss.metadata.web.jboss.JBossServletsMetaData;
import org.jboss.metadata.web.jboss.JBossWebMetaData;
import org.jboss.metadata.web.spec.FilterMetaData;
@@ -280,12 +281,51 @@
public void postConstruct(Object object) throws IllegalAccessException, InvocationTargetException
{
- // ignore for now
+ if (webDD.getPostConstructs() == null)
+ return;
+
+ // @PostConstruct
+ for (LifecycleCallbackMetaData metaData : webDD.getPostConstructs())
+ {
+ try
+ {
+ Class<?> clazz = webLoader.loadClass(metaData.getClassName());
+ if (clazz.isAssignableFrom(object.getClass()))
+ {
+ // process LifecycleCallbackMetaData
+ processesLifecycleCallbackMetaData(object, metaData);
+ }
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new RuntimeException("Error invoking postConstruct method: " + metaData.getMethodName(), e);
+ }
+ }
}
public void preDestroy(Object object) throws IllegalAccessException, InvocationTargetException
{
- // ignore for now
+ if (webDD.getPreDestroys() == null)
+ return;
+
+ // @PreDestroy
+ for (LifecycleCallbackMetaData metaData : webDD.getPreDestroys())
+ {
+ try
+ {
+ //
+ Class<?> clazz = webLoader.loadClass(metaData.getClassName());
+ if (clazz.isAssignableFrom(object.getClass()))
+ {
+ // process LifecycleCallbackMetaData
+ processesLifecycleCallbackMetaData(object, metaData);
+ }
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new RuntimeException("Error invoking postConstruct method: " + metaData.getMethodName(), e);
+ }
+ }
}
/**
@@ -393,6 +433,33 @@
}
}
+ private void processesLifecycleCallbackMetaData(Object object, LifecycleCallbackMetaData lifeCycleMetaData) throws IllegalAccessException, InvocationTargetException
+ {
+ Method method = null;
+ Class<?> clazz = object.getClass();
+ // Also check superClasses for private members
+ while(clazz != null)
+ {
+ for(Method m : clazz.getDeclaredMethods())
+ {
+ if(m.getName().equals(lifeCycleMetaData.getMethodName()))
+ {
+ method = m;
+ }
+ }
+ if(method != null)
+ break;
+ clazz = clazz.getSuperclass();
+ }
+ if(method == null)
+ throw new IllegalStateException("Method: "+ lifeCycleMetaData.getMethodName() + " not found.");
+
+ Object args[] = null;
+ method.setAccessible(true);
+ // Finally invoke the method
+ method.invoke(object, args);
+ }
+
/**
* introspects EJB container to find all dependencies
* and initialize any extra metadata.
More information about the jboss-cvs-commits
mailing list