[jboss-cvs] JBossAS SVN: r82705 - in projects/ejb3/trunk: core/src/main/java/org/jboss/ejb3/service and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 8 10:40:19 EST 2009


Author: ALRubinger
Date: 2009-01-08 10:40:18 -0500 (Thu, 08 Jan 2009)
New Revision: 82705

Modified:
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/DependencyPolicy.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/JmxDependencyPolicy.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/MCDependencyPolicy.java
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java
   projects/ejb3/trunk/testsuite/src/test/java/org/jboss/ejb3/test/interceptormetadata/MockDependencyPolicy.java
Log:
[EJBTHREE-1530] Fix the demands chain in ServiceContainer.registerManagementInterface to take into account the executing container (through which all true demands will be implicitly satisfied).  Required extending DependencyPolicy to be cloned.

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/DependencyPolicy.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/DependencyPolicy.java	2009-01-08 15:37:09 UTC (rev 82704)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/DependencyPolicy.java	2009-01-08 15:40:18 UTC (rev 82705)
@@ -32,4 +32,6 @@
 {
    public void addDependency(String dependency);
    public void addDatasource(String jndiName);
+   public DependencyPolicy clone();
+   
 }

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/JmxDependencyPolicy.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/JmxDependencyPolicy.java	2009-01-08 15:37:09 UTC (rev 82704)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/JmxDependencyPolicy.java	2009-01-08 15:40:18 UTC (rev 82705)
@@ -23,6 +23,7 @@
 
 import java.util.Collection;
 import java.util.HashSet;
+
 import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 
@@ -51,12 +52,12 @@
       dependencies.add(on);
    }
 
-   public Collection getDependencies()
+   public Collection<ObjectName> getDependencies()
    {
       return dependencies;
    }
 
-   public Collection getDependencies(Collection currentDependencies)
+   public Collection<ObjectName> getDependencies(Collection<ObjectName> currentDependencies)
    {
       dependencies.addAll(currentDependencies);
       return dependencies;
@@ -86,5 +87,15 @@
          throw new RuntimeException(e);
       }
    }
+   
+   public DependencyPolicy clone()
+   {
+      DependencyPolicy policy = new JmxDependencyPolicy();
+      for (ObjectName dependency : this.getDependencies())
+      {
+         policy.addDependency(dependency.getCanonicalName());
+      }
+      return policy;
+   }
 
 }

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/MCDependencyPolicy.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/MCDependencyPolicy.java	2009-01-08 15:37:09 UTC (rev 82704)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/MCDependencyPolicy.java	2009-01-08 15:40:18 UTC (rev 82705)
@@ -153,4 +153,13 @@
    {
       return supplies;
    }
+   
+   public DependencyPolicy clone()
+   {
+      MCDependencyPolicy clone = new MCDependencyPolicy(this.component);
+      clone.supplies.addAll(this.supplies);
+      clone.demands.addAll(this.demands);
+      clone.dependencies.addAll(this.dependencies);
+      return clone;
+   }
 }

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java	2009-01-08 15:37:09 UTC (rev 82704)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/service/ServiceContainer.java	2009-01-08 15:40:18 UTC (rev 82705)
@@ -56,6 +56,7 @@
 import org.jboss.ejb.AllowedOperationsAssociation;
 import org.jboss.ejb.AllowedOperationsFlags;
 import org.jboss.ejb3.BeanContext;
+import org.jboss.ejb3.DependencyPolicy;
 import org.jboss.ejb3.Ejb3Deployment;
 import org.jboss.ejb3.Ejb3Registry;
 import org.jboss.ejb3.annotation.LocalBinding;
@@ -246,6 +247,10 @@
 
       // EJBTHREE-655: fire up an instance for use as MBean delegate
       singleton = super.construct();
+      
+      registerManagementInterface();
+      
+      invokeOptionalMethod(METHOD_NAME_LIFECYCLE_CALLBACK_CREATE);
    }
 
    @Override
@@ -302,9 +307,6 @@
 
          injectDependencies(beanContext);
 
-         // TODO: EJBTHREE-655: shouldn't happen here, but in create
-         registerManagementInterface();
-
          TimerServiceFactory.getInstance().restoreTimerService(timerService);
          invokeOptionalMethod(METHOD_NAME_LIFECYCLE_CALLBACK_START);
       }
@@ -580,14 +582,6 @@
       }
    }
 
-//   @Deprecated
-//   public InvocationResponse dynamicInvoke(Object target, Invocation invocation) throws Throwable
-//   {
-//      log.warn("This call to dynamicInvoke(Object target, Invocation invocation) is "
-//            + "@Deprecated, should be using dynamicInvoke(Invocation invocation)");
-//      return this.dynamicInvoke(invocation);
-//   }
-
    protected void initBeanContext() throws RuntimeException
    {
       if (beanContext == null)
@@ -700,15 +694,15 @@
    {
       try
       {
-         Management annotation = (Management) resolveAnnotation(Management.class);
+         Management annotation = this.getAnnotation(Management.class);
 
-         Class intf = null;
+         Class<?> intf = null;
          if (annotation != null)
             intf = annotation.value();
 
          if (intf == null)
          {
-            Class[] interfaces = this.getBeanClass().getInterfaces();
+            Class<?>[] interfaces = this.getBeanClass().getInterfaces();
             int interfaceIndex = 0;
             while (intf == null && interfaceIndex < interfaces.length)
             {
@@ -718,47 +712,64 @@
                   ++interfaceIndex;
             }
          }
+         
+         /*
+          * Construct a DependencyPolicy for the MBean which will also 
+          * define a demand upon this container
+          */
+         DependencyPolicy containerPolicy = this.getDependencyPolicy();
+         DependencyPolicy newPolicy = containerPolicy.clone();
+         String cName = this.getObjectName().getCanonicalName();
+         newPolicy.addDependency(cName);
+         
+         // Find MBean Server if not specified
+         if (mbeanServer == null)
+         {
+            try
+            {
+               mbeanServer = org.jboss.mx.util.MBeanServerLocator.locateJBoss();
+            }
+            catch (IllegalStateException ise)
+            {
+               // Not found; ignore for now and we'll catch this later when we absolutely need MBean server
+               log.warn(ise);
+            }
+         }
+         
+         /*
+          * Construct the ObjectName
+          */
+         Service service = this.getAnnotation(Service.class);
+         String objname = service.objectName();
+         delegateObjectName = (objname == null || objname.equals("")) ? new ObjectName(getObjectName()
+               .getCanonicalName()
+               + ",type=ManagementInterface") : new ObjectName(objname);
 
+         // For @Management
          if (intf != null)
          {
             if (mbeanServer == null)
-               mbeanServer = org.jboss.mx.util.MBeanServerLocator.locateJBoss();
-
-            if (mbeanServer == null)
                throw new RuntimeException("There is a @Management interface on " + ejbName
                      + " but the MBeanServer has not been initialized for it");
 
-            Service service = (Service) resolveAnnotation(Service.class);
-
-            String objname = service.objectName();
-            delegateObjectName = (objname == null || objname.equals("")) ? new ObjectName(getObjectName()
-                  .getCanonicalName()
-                  + ",type=ManagementInterface") : new ObjectName(service.objectName());
-
             delegate = new ServiceMBeanDelegate(mbeanServer, this, intf, delegateObjectName);
-
-            getDeployment().getKernelAbstraction().installMBean(delegateObjectName, getDependencyPolicy(), delegate);
+            
+            getDeployment().getKernelAbstraction().installMBean(delegateObjectName, newPolicy, delegate);
          }
+         // XMBeans
          else
          {
-            Service service = (Service) resolveAnnotation(Service.class);
             if (service.xmbean().length() > 0)
             {
-               if (mbeanServer == null)
-                  mbeanServer = org.jboss.mx.util.MBeanServerLocator.locateJBoss();
 
                if (mbeanServer == null)
                   throw new RuntimeException(ejbName
                         + "is defined as an XMBean, but the MBeanServer has not been initialized for it");
 
-               String objname = service.objectName();
-               delegateObjectName = (objname == null || objname.equals("")) ? new ObjectName(getObjectName()
-                     .getCanonicalName()
-                     + ",type=ManagementInterface") : new ObjectName(service.objectName());
 
                delegate = new ServiceMBeanDelegate(mbeanServer, this, service.xmbean(), delegateObjectName);
 
-               getDeployment().getKernelAbstraction().installMBean(delegateObjectName, getDependencyPolicy(), delegate);
+               getDeployment().getKernelAbstraction().installMBean(delegateObjectName, newPolicy, delegate);
             }
          }
 

Modified: projects/ejb3/trunk/testsuite/src/test/java/org/jboss/ejb3/test/interceptormetadata/MockDependencyPolicy.java
===================================================================
--- projects/ejb3/trunk/testsuite/src/test/java/org/jboss/ejb3/test/interceptormetadata/MockDependencyPolicy.java	2009-01-08 15:37:09 UTC (rev 82704)
+++ projects/ejb3/trunk/testsuite/src/test/java/org/jboss/ejb3/test/interceptormetadata/MockDependencyPolicy.java	2009-01-08 15:40:18 UTC (rev 82705)
@@ -47,5 +47,10 @@
    {
       throw new RuntimeException("NYI");
    }
+   
+   public MockDependencyPolicy clone()
+   {
+      return new MockDependencyPolicy();
+   }
 
 }




More information about the jboss-cvs-commits mailing list