[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