[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