[jboss-cvs] JBossAS SVN: r104068 - in projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260: src/main/java/org/jboss/ejb3/dependency and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 16 16:24:10 EDT 2010


Author: miclark
Date: 2010-04-16 16:24:09 -0400 (Fri, 16 Apr 2010)
New Revision: 104068

Added:
   projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/src/test/java/org/jboss/ejb3/core/test/ejbthree1260/
   projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/src/test/java/org/jboss/ejb3/core/test/ejbthree1260/EjbLinkDemandMetaDataTestCase.java
Modified:
   projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/pom.xml
   projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/src/main/java/org/jboss/ejb3/dependency/EjbLinkDemandMetaData.java
Log:
JBPAPP-4122 - Backported changes to improve EjbLinkDemandMetaData performance.

Modified: projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/pom.xml
===================================================================
--- projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/pom.xml	2010-04-16 19:50:05 UTC (rev 104067)
+++ projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/pom.xml	2010-04-16 20:24:09 UTC (rev 104068)
@@ -637,6 +637,13 @@
     </dependency>
 
     <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>1.8.4</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
       <groupId>quartz</groupId>
       <artifactId>quartz</artifactId>
       <version>1.6.0</version>

Modified: projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/src/main/java/org/jboss/ejb3/dependency/EjbLinkDemandMetaData.java
===================================================================
--- projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/src/main/java/org/jboss/ejb3/dependency/EjbLinkDemandMetaData.java	2010-04-16 19:50:05 UTC (rev 104067)
+++ projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/src/main/java/org/jboss/ejb3/dependency/EjbLinkDemandMetaData.java	2010-04-16 20:24:09 UTC (rev 104068)
@@ -21,12 +21,6 @@
  */
 package org.jboss.ejb3.dependency;
 
-import java.io.Serializable;
-import java.util.Iterator;
-
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-
 import org.jboss.beans.metadata.spi.DemandMetaData;
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
@@ -35,11 +29,17 @@
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.ejb3.Ejb3Module;
 import org.jboss.ejb3.javaee.JavaEEComponent;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.util.JBossObject;
 import org.jboss.util.JBossStringBuilder;
 
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import java.io.Serializable;
+import java.util.Iterator;
+
 /**
  * Note that this one is only used for an ejb link which doesn't have a module
  * specified.
@@ -53,11 +53,31 @@
    private static final long serialVersionUID = 1L;
 
    /** The demand */
-   private ObjectName demand;
+   private final ObjectName demand;
 
    /** When the dependency is required */
-   private ControllerState whenRequired = ControllerState.DESCRIBED;
+   private final ControllerState whenRequired = ControllerState.DESCRIBED;
 
+   // EJBTHREE-1260: speed up
+   private static final String domain;
+   private static final String serviceProperty;
+
+   static
+   {
+      try
+      {
+         ObjectName service = new ObjectName(Ejb3Module.BASE_EJB3_JMX_NAME);
+         domain = service.getDomain();
+         assert domain != null : "domain is null";
+         serviceProperty = service.getKeyProperty("service");
+         assert serviceProperty != null : "serviceProperty is null";
+      }
+      catch(MalformedObjectNameException e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
    /**
     *
     * @param component      the component which needs the enterprise bean
@@ -129,9 +149,14 @@
       {
          for(ControllerContext context : controller.getContextsByState(ControllerState.INSTALLED))
          {
+            String name = context.getName().toString();
+            if(!name.startsWith(domain))
+               continue;
+            if(!name.contains(serviceProperty))
+               continue;
             try
             {
-               ObjectName otherName = new ObjectName(context.getName().toString());
+               ObjectName otherName = new ObjectName(name);
 
                if(demand.apply(otherName))
                {

Added: projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/src/test/java/org/jboss/ejb3/core/test/ejbthree1260/EjbLinkDemandMetaDataTestCase.java
===================================================================
--- projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/src/test/java/org/jboss/ejb3/core/test/ejbthree1260/EjbLinkDemandMetaDataTestCase.java	                        (rev 0)
+++ projects/ejb3/branches/jboss-ejb3-core-1.1.18_EJBTHREE-1260/src/test/java/org/jboss/ejb3/core/test/ejbthree1260/EjbLinkDemandMetaDataTestCase.java	2010-04-16 20:24:09 UTC (rev 104068)
@@ -0,0 +1,120 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright (c) 2010, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.ejb3.core.test.ejbthree1260;
+
+import org.jboss.beans.metadata.spi.MetaDataVisitor;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.ejb3.dependency.EjbLinkDemandMetaData;
+import org.jboss.ejb3.javaee.JavaEEComponent;
+import org.jboss.ejb3.javaee.JavaEEComponentHelper;
+import org.jboss.ejb3.javaee.JavaEEModule;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.*;
+
+/**
+ * Note that this test does not test the speed of EjbLinkDemandMetaData, only
+ * its correctness.
+ * 
+ * @author <a href="cdewolf at redhat.com">Carlo de Wolf</a>
+ */
+public class EjbLinkDemandMetaDataTestCase
+{
+   private DependencyItem createDependencyItem() throws MalformedObjectNameException
+   {
+      JavaEEComponent component = mock(JavaEEComponent.class);
+      String ejbName = "Test";
+      JavaEEModule module = mock(JavaEEModule.class);
+      when(module.getApplication()).thenReturn(null);
+      String objectName = JavaEEComponentHelper.createObjectName(module, null, ejbName);
+      when(component.createObjectName(null, ejbName)).thenReturn(objectName);
+
+      EjbLinkDemandMetaData demandMetaData = new EjbLinkDemandMetaData(component, ejbName);
+
+      assertEquals(new ObjectName("jboss.j2ee:name=Test,service=EJB3,*"), demandMetaData.getDemand());
+
+      MetaDataVisitor visitor = mock(MetaDataVisitor.class);
+      KernelControllerContext context = mock(KernelControllerContext.class);
+      when(visitor.getControllerContext()).thenReturn(context);
+
+      demandMetaData.initialVisit(visitor);
+
+      ArgumentCaptor<DependencyItem> argument = ArgumentCaptor.forClass(DependencyItem.class);
+      verify(visitor).addDependency(argument.capture());
+      return argument.getValue();
+   }
+
+   @Test
+   public void testNegative() throws Exception
+   {
+      DependencyItem dependencyItem = createDependencyItem();
+      
+      JavaEEModule module = mock(JavaEEModule.class);
+      when(module.getApplication()).thenReturn(null);
+      ControllerContext installedContext = mock(ControllerContext.class);
+      String name = JavaEEComponentHelper.createObjectName(module, "SomeUnit", "Test2");
+      when(installedContext.getName()).thenReturn(name);
+      Set<ControllerContext> installedContexts = new HashSet<ControllerContext>();
+      installedContexts.add(installedContext);
+      Controller controller = mock(Controller.class);
+      when(controller.getContextsByState(ControllerState.INSTALLED)).thenReturn(installedContexts);
+
+      boolean resolved = dependencyItem.resolve(controller);
+
+      assertFalse(resolved);
+      assertFalse(dependencyItem.isResolved());
+   }
+   
+   @Test
+   public void testPositive() throws Exception
+   {
+      DependencyItem dependencyItem = createDependencyItem();
+
+      JavaEEModule module = mock(JavaEEModule.class);
+      when(module.getApplication()).thenReturn(null);
+      ControllerContext installedContext = mock(ControllerContext.class);
+      String name = JavaEEComponentHelper.createObjectName(module, "SomeUnit", "Test");
+      when(installedContext.getName()).thenReturn(name);
+      Set<ControllerContext> installedContexts = new HashSet<ControllerContext>();
+      installedContexts.add(installedContext);
+      Controller controller = mock(Controller.class);
+      when(controller.getContextsByState(ControllerState.INSTALLED)).thenReturn(installedContexts);
+      
+      boolean resolved = dependencyItem.resolve(controller);
+
+      assertTrue(resolved);
+      assertTrue(dependencyItem.isResolved());
+   }
+}




More information about the jboss-cvs-commits mailing list