[jboss-cvs] JBossAS SVN: r68685 - in projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors: direct and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Jan 8 13:55:58 EST 2008
Author: wolfc
Date: 2008-01-08 13:55:58 -0500 (Tue, 08 Jan 2008)
New Revision: 68685
Modified:
projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/AbstractContainer.java
projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/ManagedObjectAdvisor.java
projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/direct/AbstractDirectContainer.java
Log:
Allow for customized life cycle
Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/AbstractContainer.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/AbstractContainer.java 2008-01-08 18:53:25 UTC (rev 68684)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/AbstractContainer.java 2008-01-08 18:55:58 UTC (rev 68685)
@@ -45,22 +45,50 @@
private ManagedObjectAdvisor<T, C> advisor;
- public AbstractContainer(String name, Domain domain, Class<? extends T> beanClass)
+ /**
+ * For a completely customized startup.
+ *
+ * Note that before construction ends advisor must be set!
+ */
+ protected AbstractContainer()
{
- assert name != null : "name is null";
- assert domain != null : "domain is null";
- assert beanClass != null : "beanClass is null";
- this.advisor = new ManagedObjectAdvisor<T, C>((C) this, name, domain, beanClass);
}
+ public AbstractContainer(String name, Domain domain, Class<? extends T> beanClass)
+ {
+ initializeAdvisor(name, domain, beanClass);
+ }
+
public AbstractContainer(String name, String domainName, Class<? extends T> beanClass)
{
this(name, getDomain(domainName), beanClass);
}
+ /**
+ * Finalize construction of the abstract container by setting the advisor.
+ *
+ * @param name the name of the advisor
+ * @param domain the domain for the advisor
+ * @param beanClass the class being advised
+ */
+ protected void initializeAdvisor(String name, Domain domain, Class<? extends T> beanClass)
+ {
+ if(this.advisor != null) throw new IllegalStateException("advisor already set to " + advisor);
+
+ assert name != null : "name is null";
+ assert domain != null : "domain is null";
+ assert beanClass != null : "beanClass is null";
+
+ // Decouple setting the advisor and initializing it, so interceptors
+ // can get it.
+ this.advisor = new ManagedObjectAdvisor<T, C>((C) this, name, domain);
+ advisor.initialize(beanClass);
+ }
+
protected final ClassAdvisor getAdvisor()
{
+ if(advisor == null) throw new IllegalStateException("advisor has not been initialized");
return advisor;
}
@@ -89,7 +117,7 @@
public Object invoke(Object target, Method method, Object arguments[]) throws Throwable
{
long methodHash = MethodHashing.calculateHash(method);
- MethodInfo info = advisor.getMethodInfo(methodHash);
+ MethodInfo info = getAdvisor().getMethodInfo(methodHash);
if(info == null)
throw new IllegalArgumentException("method " + method + " is not under advisement by " + this);
MethodInvocation invocation = new MethodInvocation(info, info.getInterceptors());
Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/ManagedObjectAdvisor.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/ManagedObjectAdvisor.java 2008-01-08 18:53:25 UTC (rev 68684)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/ManagedObjectAdvisor.java 2008-01-08 18:55:58 UTC (rev 68685)
@@ -49,21 +49,15 @@
private C container;
private InstanceAdvisorDelegate instanceAdvisorDelegate;
- protected ManagedObjectAdvisor(C container, String name, AspectManager manager, Class<?> beanClass)
+ protected ManagedObjectAdvisor(C container, String name, AspectManager manager)
{
super(name, manager);
assert container != null : "container is null";
- assert beanClass != null : "beanClass is null";
this.container = container;
// For convenience we add the ManagedObject annotation
annotations.addClassAnnotation(ManagedObject.class, new Object());
-
- // Poking starts here
- attachClass(beanClass);
-
- this.instanceAdvisorDelegate = new InstanceAdvisorDelegate(this, this);
}
private void deployAnnotationIntroduction(AnnotationIntroduction introduction)
@@ -91,6 +85,16 @@
return container;
}
+ protected void initialize(Class<?> beanClass)
+ {
+ assert beanClass != null : "beanClass is null";
+
+ // Poking starts here
+ attachClass(beanClass);
+
+ this.instanceAdvisorDelegate = new InstanceAdvisorDelegate(this, this);
+ }
+
@Override
protected void rebindClassMetaData()
{
Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/direct/AbstractDirectContainer.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/direct/AbstractDirectContainer.java 2008-01-08 18:53:25 UTC (rev 68684)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/direct/AbstractDirectContainer.java 2008-01-08 18:55:58 UTC (rev 68685)
@@ -47,6 +47,11 @@
{
private static final Logger log = Logger.getLogger(AbstractDirectContainer.class);
+ protected AbstractDirectContainer()
+ {
+
+ }
+
protected AbstractDirectContainer(String name, Domain domain, Class<? extends T> beanClass)
{
super(name, domain, beanClass);
More information about the jboss-cvs-commits
mailing list