[jboss-cvs] JBossAS SVN: r89667 - in projects/reloaded/trunk/injection/src: main/java/org/jboss/reloaded/injection/annotation and 6 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Jun 2 09:41:02 EDT 2009
Author: wolfc
Date: 2009-06-02 09:41:02 -0400 (Tue, 02 Jun 2009)
New Revision: 89667
Added:
projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/
projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/
projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanJarCreator.java
projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanProcessor.java
projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/
projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/LifecycleBean.java
projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/
projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/LifecycleTestCase.java
Modified:
projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactory.java
projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactoryBuilder.java
projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/metadata/ManagedBeanMetaData.java
projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/common/AbstractInjectionTestCase.java
Log:
RELOADED-8: lifecycle and annotation meta data creation
Modified: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactory.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactory.java 2009-06-02 13:27:23 UTC (rev 89666)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactory.java 2009-06-02 13:41:02 UTC (rev 89667)
@@ -22,9 +22,12 @@
package org.jboss.reloaded.injection;
import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -48,9 +51,11 @@
private Class<T> beanClass;
private Map<String, Binder> binders = new HashMap<String, Binder>();
private Map<Class<?>, Set<Injector<T>>> injectors = new HashMap<Class<?>, Set<Injector<T>>>();
+ private List<Method> postConstructs = new ArrayList<Method>();
+ private List<Method> preDestroys = new ArrayList<Method>();
+
+ private Context enc;
- private Context enc;
-
public ManagedBeanFactory(String name, Class<T> beanClass)
{
this.name = name;
@@ -82,7 +87,11 @@
injector.inject(bean);
}
- // TODO: lifecycle
+ for(Method postConstruct : postConstructs)
+ {
+ postConstruct.invoke(instance);
+ }
+
return bean;
}
catch (InstantiationException e)
@@ -95,11 +104,35 @@
}
}
- public void destroyBean(ManagedBeanInstance<T> bean)
+ public void destroyBean(ManagedBeanInstance<T> bean) throws Exception
{
- throw new RuntimeException("NYI");
+ try
+ {
+ T instance = bean.getBean();
+ for(Method preDestroy : preDestroys)
+ {
+ preDestroy.invoke(instance);
+ }
+ }
+ catch(IllegalAccessException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (IllegalArgumentException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (InvocationTargetException e)
+ {
+ throw handleThrowable(e.getCause());
+ }
}
+ protected Class<T> getBeanClass()
+ {
+ return beanClass;
+ }
+
protected Map<String, Binder> getBinders()
{
return binders;
@@ -134,6 +167,16 @@
}
}
+ protected void setPostConstructs(List<Method> postConstructs)
+ {
+ this.postConstructs = postConstructs;
+ }
+
+ protected void setPreDestroys(List<Method> preDestroys)
+ {
+ this.preDestroys = preDestroys;
+ }
+
protected void setupComponentContext()
{
ENCFactory.pushContextId(name);
Modified: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactoryBuilder.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactoryBuilder.java 2009-06-02 13:27:23 UTC (rev 89666)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/ManagedBeanFactoryBuilder.java 2009-06-02 13:41:02 UTC (rev 89667)
@@ -24,7 +24,9 @@
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import javax.naming.Context;
@@ -36,6 +38,8 @@
import org.jboss.metadata.javaee.spec.Environment;
import org.jboss.metadata.javaee.spec.EnvironmentEntriesMetaData;
import org.jboss.metadata.javaee.spec.EnvironmentEntryMetaData;
+import org.jboss.metadata.javaee.spec.LifecycleCallbackMetaData;
+import org.jboss.metadata.javaee.spec.LifecycleCallbacksMetaData;
import org.jboss.metadata.javaee.spec.MessageDestinationReferencesMetaData;
import org.jboss.metadata.javaee.spec.PersistenceContextReferenceMetaData;
import org.jboss.metadata.javaee.spec.PersistenceContextReferencesMetaData;
@@ -83,6 +87,8 @@
if(env == null)
return builder.getBeanMetaData();
+ // TODO: make dynamically extensible
+
if(env instanceof Environment)
process(builder, container, deploymentUnit, (Environment) env);
@@ -96,9 +102,8 @@
// TODO: JBoss specific stuff
- // TODO: lifecycle
- //process(builder, container, deploymentUnit, env.getPostConstructs());
- //process(builder, container, deploymentUnit, env.getPreDestroys());
+ processPostConstructs(builder, container, deploymentUnit, env.getPostConstructs());
+ processPreDestroys(builder, container, deploymentUnit, env.getPreDestroys());
return builder.getBeanMetaData();
}
@@ -182,6 +187,21 @@
throw new RuntimeException("<injection-target> could not be found: " + injectionTarget.getName() + "." + target.getInjectionTargetName());
}
+ private static final Method findMethod(Class<?> cls, String methodName)
+ {
+ if(cls == null || cls == Object.class)
+ return null;
+
+ Method methods[] = cls.getDeclaredMethods();
+ for(Method method : methods)
+ {
+ if(method.getName().equals(methodName) && method.getParameterTypes().length == 0)
+ return method;
+ }
+
+ return findMethod(cls.getSuperclass(), methodName);
+ }
+
protected <T> void injectionTargets(ClassLoader loader, String jndiName, final ManagedBeanFactory<T> container, Collection<ResourceInjectionTargetMetaData> targets)
{
if(targets == null)
@@ -217,6 +237,17 @@
return new ManagedBeanFactory<T>(name, beanClass);
}
+ /**
+ * This method is to please coverage tools.
+ */
+ private static final boolean isEmpty(Collection<?> c)
+ {
+ return c == null || c.isEmpty();
+ }
+
+ /**
+ * This method is to please coverage tools.
+ */
private static final boolean isEmpty(String s)
{
// can't use s.isEmpty, that's Java 6
@@ -225,7 +256,7 @@
protected void process(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, Collection<? extends AbstractEJBReferenceMetaData> ejbReferences)
{
- if(ejbReferences == null)
+ if(ejbReferences == null || ejbReferences.isEmpty())
return;
if(ejbReferenceResolver == null)
@@ -294,7 +325,7 @@
protected void process(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, PersistenceContextReferencesMetaData persistenceContextRefs)
{
- if(persistenceContextRefs == null)
+ if(isEmpty(persistenceContextRefs))
return;
if(persistenceUnitDependencyResolver == null)
@@ -310,7 +341,7 @@
protected void process(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, PersistenceUnitReferencesMetaData persistenceUnitRefs)
{
- if(persistenceUnitRefs == null)
+ if(isEmpty(persistenceUnitRefs))
return;
// TODO Auto-generated method stub
@@ -335,5 +366,74 @@
throw new RuntimeException("NYI");
}
+ protected void processLifecycleCallbacks(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, LifecycleCallbacksMetaData lifecycleCallbacks, List<Method> callbacks)
+ {
+ for(LifecycleCallbackMetaData callback : lifecycleCallbacks)
+ {
+ String className = callback.getClassName();
+ String methodName = callback.getMethodName();
+
+ Class<?> cls = null;
+ if(isEmpty(className))
+ {
+ cls = container.getBeanClass();
+ Method method = findMethod(cls, methodName);
+ if(method == null)
+ throw new RuntimeException("Can't find method " + methodName + " in " + cls + " as specified in " + callback);
+ callbacks.add(method);
+ }
+ else
+ {
+ try
+ {
+ cls = deploymentUnit.getClassLoader().loadClass(className);
+ }
+ catch(ClassNotFoundException e)
+ {
+ throw new RuntimeException("Can't load class " + className + " specified in " + callback, e);
+ }
+
+ try
+ {
+ Method method = cls.getDeclaredMethod(methodName);
+ callbacks.add(method);
+ }
+ catch (SecurityException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new RuntimeException("Can't find method " + methodName + " in " + cls + " as specified in " + callback, e);
+ }
+ }
+ }
+ // TODO: EJB 3.0 12.4.1: if overridden, do not invoke
+ // TODO: sort super first
+ }
+ protected void processPostConstructs(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, LifecycleCallbacksMetaData lifecycleCallbacks)
+ {
+ if(isEmpty(lifecycleCallbacks))
+ return;
+
+ List<Method> postConstructs = new ArrayList<Method>();
+
+ processLifecycleCallbacks(builder, container, deploymentUnit, lifecycleCallbacks, postConstructs);
+
+ container.setPostConstructs(postConstructs);
+ }
+
+ protected void processPreDestroys(BeanMetaDataBuilder builder, ManagedBeanFactory<?> container, DeploymentUnit deploymentUnit, LifecycleCallbacksMetaData lifecycleCallbacks)
+ {
+ if(isEmpty(lifecycleCallbacks))
+ return;
+
+ List<Method> preDestroys = new ArrayList<Method>();
+
+ processLifecycleCallbacks(builder, container, deploymentUnit, lifecycleCallbacks, preDestroys);
+
+ container.setPreDestroys(preDestroys);
+ }
+
}
Added: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanJarCreator.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanJarCreator.java (rev 0)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanJarCreator.java 2009-06-02 13:41:02 UTC (rev 89667)
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.injection.annotation.creator;
+
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collection;
+
+import org.jboss.metadata.annotation.creator.AbstractCreator;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.reloaded.injection.metadata.ManagedBeanJarMetaData;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class ManagedBeanJarCreator extends AbstractCreator<ManagedBeanJarMetaData>
+{
+ public ManagedBeanJarCreator(AnnotationFinder<AnnotatedElement> finder)
+ {
+ super(finder);
+
+ addProcessor(new ManagedBeanProcessor(finder));
+ }
+
+ @Override
+ public ManagedBeanJarMetaData create(Collection<Class<?>> classes)
+ {
+ if(classes == null || classes.isEmpty())
+ return null;
+
+ ManagedBeanJarMetaData jarMetaData = new ManagedBeanJarMetaData();
+
+ processMetaData(classes, jarMetaData);
+
+ return jarMetaData;
+ }
+
+ @Override
+ protected boolean validateClass(Class<?> clazz)
+ {
+ return true;
+ }
+}
Added: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanProcessor.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanProcessor.java (rev 0)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/annotation/creator/ManagedBeanProcessor.java 2009-06-02 13:41:02 UTC (rev 89667)
@@ -0,0 +1,90 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.injection.annotation.creator;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.jboss.metadata.annotation.creator.Processor;
+import org.jboss.metadata.annotation.creator.ProcessorUtils;
+import org.jboss.metadata.annotation.creator.jboss.AbstractComponentProcessor;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.ejb.jboss.JBossEnvironmentRefsGroupMetaData;
+import org.jboss.reloaded.injection.metadata.ManagedBeanJarMetaData;
+import org.jboss.reloaded.injection.metadata.ManagedBeanMetaData;
+import org.jboss.reloaded.injection.test.common.ManagedBean;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class ManagedBeanProcessor extends AbstractComponentProcessor<ManagedBeanMetaData>
+ implements Processor<ManagedBeanJarMetaData, Class<?>>
+{
+ public ManagedBeanProcessor(AnnotationFinder<AnnotatedElement> finder)
+ {
+ super(finder);
+ }
+
+ protected ManagedBeanMetaData create(Class<?> beanClass)
+ {
+ ManagedBean annotation = finder.getAnnotation(beanClass, ManagedBean.class);
+ if(annotation == null)
+ return null;
+
+ ManagedBeanMetaData beanMetaData = new ManagedBeanMetaData();
+ String name = annotation.value();
+ if(name == null || name.length() == 0)
+ name = beanClass.getSimpleName();
+ beanMetaData.setBeanClass(beanClass.getName());
+ beanMetaData.setName(name);
+ return beanMetaData;
+ }
+
+ public Collection<Class<? extends Annotation>> getAnnotationTypes()
+ {
+ return ProcessorUtils.createAnnotationSet(ManagedBean.class);
+ }
+
+ public void process(ManagedBeanJarMetaData metaData, Class<?> beanClass)
+ {
+ ManagedBeanMetaData beanMetaData = create(beanClass);
+ if(beanMetaData == null)
+ return;
+
+ List<ManagedBeanMetaData> beans = metaData.getManagedBeans();
+ if(beans == null)
+ {
+ beans = new ArrayList<ManagedBeanMetaData>();
+ metaData.setManagedBeans(beans);
+ }
+ beans.add(beanMetaData);
+
+ JBossEnvironmentRefsGroupMetaData env = new JBossEnvironmentRefsGroupMetaData();
+ beanMetaData.setJndiEnvironmentRefsGroup(env);
+ super.process(env, beanClass);
+ }
+
+}
Modified: projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/metadata/ManagedBeanMetaData.java
===================================================================
--- projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/metadata/ManagedBeanMetaData.java 2009-06-02 13:27:23 UTC (rev 89666)
+++ projects/reloaded/trunk/injection/src/main/java/org/jboss/reloaded/injection/metadata/ManagedBeanMetaData.java 2009-06-02 13:41:02 UTC (rev 89667)
@@ -24,8 +24,8 @@
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
+import org.jboss.metadata.ejb.jboss.JBossEnvironmentRefsGroupMetaData;
import org.jboss.metadata.javaee.spec.Environment;
-import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
import org.jboss.metadata.javaee.support.NamedMetaDataWithDescriptionGroup;
/**
@@ -40,7 +40,7 @@
private String beanClass;
- private EnvironmentRefsGroupMetaData environment;
+ private JBossEnvironmentRefsGroupMetaData environment;
public String getBeanClass()
{
@@ -53,7 +53,7 @@
return environment;
}
- public EnvironmentRefsGroupMetaData getJndiEnvironmentRefsGroup()
+ public JBossEnvironmentRefsGroupMetaData getJndiEnvironmentRefsGroup()
{
return environment;
}
@@ -63,7 +63,7 @@
this.beanClass = beanClass;
}
- public void setJndiEnvironmentRefsGroup(EnvironmentRefsGroupMetaData env)
+ public void setJndiEnvironmentRefsGroup(JBossEnvironmentRefsGroupMetaData env)
{
this.environment = env;
}
Modified: projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/common/AbstractInjectionTestCase.java
===================================================================
--- projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/common/AbstractInjectionTestCase.java 2009-06-02 13:27:23 UTC (rev 89666)
+++ projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/common/AbstractInjectionTestCase.java 2009-06-02 13:41:02 UTC (rev 89667)
@@ -22,7 +22,9 @@
package org.jboss.reloaded.injection.test.common;
import java.io.IOException;
+import java.lang.reflect.AnnotatedElement;
import java.net.URL;
+import java.util.Arrays;
import org.jboss.bootstrap.spi.lifecycle.LifecycleState;
import org.jboss.bootstrap.spi.mc.config.MCServerConfig;
@@ -38,6 +40,10 @@
import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory;
import org.jboss.kernel.spi.dependency.KernelController;
import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.annotation.finder.DefaultAnnotationFinder;
+import org.jboss.reloaded.injection.annotation.creator.ManagedBeanJarCreator;
+import org.jboss.reloaded.injection.metadata.ManagedBeanJarMetaData;
import org.jboss.virtual.VFS;
import org.jboss.virtual.VirtualFile;
import org.junit.AfterClass;
@@ -156,4 +162,25 @@
throw new IllegalStateException("Bean not found " + name + " at state " + state + " in controller " + controller);
return context;
}
+
+ protected static ManagedBeanJarMetaData managedBeans(Class<?>... managedBeans)
+ {
+ AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
+ ManagedBeanJarCreator creator = new ManagedBeanJarCreator(finder);
+ return creator.create(Arrays.asList(managedBeans));
+ }
+
+ /*
+ protected static WebBeanDiscoveryEnvironment webBeans(Class<?>... webBeans)
+ {
+ final Collection<Class<?>> c = Arrays.asList(webBeans);
+ return new WebBeanDiscoveryEnvironment() {
+ @Override
+ public Iterable<Class<?>> getWebBeanClasses()
+ {
+ return c;
+ }
+ };
+ }
+ */
}
Added: projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/LifecycleBean.java
===================================================================
--- projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/LifecycleBean.java (rev 0)
+++ projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/LifecycleBean.java 2009-06-02 13:41:02 UTC (rev 89667)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.injection.test.lifecycle;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.jboss.reloaded.injection.test.common.ManagedBean;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at ManagedBean
+public class LifecycleBean
+{
+ // exposed for unit test
+ public int postConstructs;
+ public int preDestroys;
+
+ @PostConstruct
+ public void postConstruct()
+ {
+ postConstructs++;
+ }
+
+ @PreDestroy
+ public void preDestroy()
+ {
+ preDestroys++;
+ }
+}
Added: projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/LifecycleTestCase.java
===================================================================
--- projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/LifecycleTestCase.java (rev 0)
+++ projects/reloaded/trunk/injection/src/test/java/org/jboss/reloaded/injection/test/lifecycle/unit/LifecycleTestCase.java 2009-06-02 13:41:02 UTC (rev 89667)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.reloaded.injection.test.lifecycle.unit;
+
+import static org.junit.Assert.assertEquals;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.reloaded.injection.ManagedBeanFactory;
+import org.jboss.reloaded.injection.ManagedBeanInstance;
+import org.jboss.reloaded.injection.metadata.ManagedBeanJarMetaData;
+import org.jboss.reloaded.injection.test.common.AbstractInjectionTestCase;
+import org.jboss.reloaded.injection.test.lifecycle.LifecycleBean;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class LifecycleTestCase extends AbstractInjectionTestCase
+{
+ @BeforeClass
+ public static void beforeClass() throws Exception
+ {
+ AbstractInjectionTestCase.beforeClass();
+
+ deploy(deployment("lifecycle", ManagedBeanJarMetaData.class, managedBeans(LifecycleBean.class)));
+ //deploy(deployment("lifecycle", WebBeanDiscoveryEnvironment.class, webBeans(LifecycleBean.class)));
+ }
+
+ @Test
+ public void testPostConstruct() throws Exception
+ {
+ ManagedBeanFactory<LifecycleBean> container = getBean("jboss:service=ManagedBean,name=LifecycleBean", ControllerState.INSTALLED, ManagedBeanFactory.class);
+
+ ManagedBeanInstance<LifecycleBean> bean = container.createBean();
+
+ int postConstructs = bean.getBean().postConstructs;
+ assertEquals(1, postConstructs);
+ }
+
+
+ @Test
+ public void testPreDestroy() throws Exception
+ {
+ ManagedBeanFactory<LifecycleBean> container = getBean("jboss:service=ManagedBean,name=LifecycleBean", ControllerState.INSTALLED, ManagedBeanFactory.class);
+
+ ManagedBeanInstance<LifecycleBean> bean = container.createBean();
+
+ container.destroyBean(bean);
+
+ int preDestroys = bean.getBean().preDestroys;
+ assertEquals(1, preDestroys);
+ }
+}
More information about the jboss-cvs-commits
mailing list