[jboss-cvs] JBossAS SVN: r74386 - in projects/ejb3/trunk/core: src/main/java/org/jboss/ejb3/session and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jun 11 08:29:07 EDT 2008


Author: wolfc
Date: 2008-06-11 08:29:07 -0400 (Wed, 11 Jun 2008)
New Revision: 74386

Added:
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStateful.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStatefulBean.java
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/unit/
   projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/unit/OverriddenProxyFactoryTestCase.java
Modified:
   projects/ejb3/trunk/core/pom.xml
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/ProxyDeployer.java
   projects/ejb3/trunk/core/src/test/resources/basicbootstrap-beans.xml
   projects/ejb3/trunk/core/src/test/resources/log4j.xml
Log:
EJBTHREE-1253: fixed regression

Modified: projects/ejb3/trunk/core/pom.xml
===================================================================
--- projects/ejb3/trunk/core/pom.xml	2008-06-11 12:28:15 UTC (rev 74385)
+++ projects/ejb3/trunk/core/pom.xml	2008-06-11 12:29:07 UTC (rev 74386)
@@ -7,7 +7,7 @@
   <parent>
     <groupId>org.jboss.ejb3</groupId>
     <artifactId>jboss-ejb3-build</artifactId>
-    <version>0.13.7</version>
+    <version>0.13.8-SNAPSHOT</version>
     <relativePath>../build/pom.xml</relativePath>
   </parent>
 
@@ -458,6 +458,10 @@
       <version>${version.org.jboss.jboss-as}</version>
       <exclusions>
         <exclusion>
+          <groupId>jboss</groupId>
+          <artifactId>jboss-remoting</artifactId>
+        </exclusion>        
+        <exclusion>
           <groupId>org.jboss</groupId>
           <artifactId>jboss-metadata</artifactId>
         </exclusion>        

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/ProxyDeployer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/ProxyDeployer.java	2008-06-11 12:28:15 UTC (rev 74385)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/session/ProxyDeployer.java	2008-06-11 12:29:07 UTC (rev 74386)
@@ -23,6 +23,7 @@
 
 import java.lang.reflect.Constructor;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -61,6 +62,35 @@
       this.container = container;
    }
 
+   private static <T> Constructor<T> getConstructor(Class<T> cls, Class<?> ... parameterTypes) throws SecurityException, NoSuchMethodException
+   {
+      try
+      {
+         return cls.getConstructor(parameterTypes);
+      }
+      catch(NoSuchMethodException e)
+      {
+         log.warn("Class " + cls + " does not have a proper constructor with parameters " + Arrays.toString(parameterTypes) + ", will try to find one");
+         
+         Constructor<T> constructors[] = cls.getConstructors();
+         for(Constructor<T> constructor : constructors)
+         {
+            if(parameterTypes.length != constructor.getParameterTypes().length)
+               continue;
+            
+            int i = 0;
+            for(; i < parameterTypes.length; i++)
+            {
+               if(!constructor.getParameterTypes()[i].isAssignableFrom(parameterTypes[i]))
+                  break;
+            }
+            if(i == parameterTypes.length)
+               return constructor;
+         }
+         throw e;
+      }
+   }
+   
    public Map<Object, ProxyFactory> getProxyFactories()
    {
       return proxyFactories;
@@ -89,7 +119,7 @@
             else
             {
                Class<? extends RemoteProxyFactory> remoteFactoryClass = container.getDeployment().getRemoteProxyFactoryRegistry().getProxyFactoryClass(binding.factory());
-               Constructor<? extends RemoteProxyFactory> constructor = remoteFactoryClass.getConstructor(SessionContainer.class, RemoteBinding.class);
+               Constructor<? extends RemoteProxyFactory> constructor = getConstructor(remoteFactoryClass, container.getClass(), RemoteBinding.class);
                factory = constructor.newInstance(container, binding);
             }
             factory.start();

Added: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStateful.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStateful.java	                        (rev 0)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStateful.java	2008-06-11 12:29:07 UTC (rev 74386)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.regression.ejbthree1253;
+
+import javax.ejb.Remote;
+
+/**
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at Remote
+public interface MyStateful
+{
+   String sayHi();
+   
+   void setName(String name);
+}


Property changes on: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStateful.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStatefulBean.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStatefulBean.java	                        (rev 0)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStatefulBean.java	2008-06-11 12:29:07 UTC (rev 74386)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.regression.ejbthree1253;
+
+import javax.ejb.Stateful;
+
+import org.jboss.ejb3.annotation.RemoteBinding;
+import org.jboss.ejb3.annotation.defaults.RemoteBindingDefaults;
+
+/**
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at Stateful
+ at RemoteBinding(factory = RemoteBindingDefaults.PROXY_FACTORY_STATEFUL_REMOTE)
+public class MyStatefulBean implements MyStateful
+{
+   private String name;
+   
+   public String sayHi()
+   {
+      if(name == null)
+         throw new IllegalStateException("name is null");
+      
+      return "Hi " + name;
+   }
+
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+}


Property changes on: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/MyStatefulBean.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/unit/OverriddenProxyFactoryTestCase.java
===================================================================
--- projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/unit/OverriddenProxyFactoryTestCase.java	                        (rev 0)
+++ projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/unit/OverriddenProxyFactoryTestCase.java	2008-06-11 12:29:07 UTC (rev 74386)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.regression.ejbthree1253.unit;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Hashtable;
+
+import javax.naming.InitialContext;
+
+import org.jboss.aop.Domain;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.ejb3.Ejb3Deployment;
+import org.jboss.ejb3.Ejb3Registry;
+import org.jboss.ejb3.cache.persistence.PersistenceManagerFactoryRegistry;
+import org.jboss.ejb3.core.test.common.AbstractEJB3TestCase;
+import org.jboss.ejb3.core.test.regression.ejbthree1253.MyStateful;
+import org.jboss.ejb3.core.test.regression.ejbthree1253.MyStatefulBean;
+import org.jboss.ejb3.proxy.factory.RemoteProxyFactoryRegistry;
+import org.jboss.ejb3.stateful.StatefulContainer;
+import org.jboss.ejb3.test.cachepassivation.MockDeploymentUnit;
+import org.jboss.ejb3.test.cachepassivation.MockEjb3Deployment;
+import org.jboss.ejb3.test.common.MetaDataHelper;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class OverriddenProxyFactoryTestCase extends AbstractEJB3TestCase
+{
+   @Test
+   public void test1() throws Throwable
+   {
+      ClassLoader cl = Thread.currentThread().getContextClassLoader();
+      System.out.println(cl.getResource("jndi.properties"));
+      String beanClassname = MyStatefulBean.class.getName();
+      String ejbName = MyStatefulBean.class.getSimpleName();
+      Domain domain = getDomain("Stateful Bean");
+      Hashtable<?,?> ctxProperties = null;
+      Ejb3Deployment deployment = new MockEjb3Deployment(new MockDeploymentUnit(), null);
+      deployment.setPersistenceManagerFactoryRegistry(getBootstrap().lookup("EJB3PersistenceManagerFactoryRegistry", PersistenceManagerFactoryRegistry.class));
+      deployment.setRemoteProxyFactoryRegistry(getBootstrap().lookup("EJB3RemoteProxyFactoryRegistry", RemoteProxyFactoryRegistry.class));
+      JBossSessionBeanMetaData beanMetaData = MetaDataHelper.getMetadataFromBeanImplClass(MyStatefulBean.class);
+      StatefulContainer container = new StatefulContainer(cl, beanClassname, ejbName, domain, ctxProperties, deployment, beanMetaData);
+      
+      // TODO: wickedness
+      container.instantiated();
+      
+      // A container does not register itself
+      Ejb3Registry.register(container);
+      
+      // Register the Container in ObjectStore (MC)
+      String containerName = container.getName();
+      AbstractBeanMetaData bmd = new AbstractBeanMetaData(containerName, StatefulContainer.class.getName());
+      KernelControllerContext context = getBootstrap().getKernel().getController().install(bmd, container);
+      if(context.getError() != null)
+         throw context.getError();
+//      Ejb3RegistrarLocator.locateRegistrar().bind(containerName, container);
+
+      
+      InitialContext ctx = new InitialContext();
+      System.out.println("ctx = " + ctx);
+      //System.out.println("  " + container.getInitialContext().list("MyStatelessBean").next());
+      MyStateful bean = (MyStateful) ctx.lookup("MyStatefulBean/remote");
+      
+      bean.setName("Me");
+      String actual = bean.sayHi();
+      assertEquals("Hi Me", actual);
+      
+      getBootstrap().getKernel().getController().uninstall(containerName);
+      Ejb3Registry.unregister(container);
+   }
+}


Property changes on: projects/ejb3/trunk/core/src/test/java/org/jboss/ejb3/core/test/regression/ejbthree1253/unit/OverriddenProxyFactoryTestCase.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: projects/ejb3/trunk/core/src/test/resources/basicbootstrap-beans.xml
===================================================================
--- projects/ejb3/trunk/core/src/test/resources/basicbootstrap-beans.xml	2008-06-11 12:28:15 UTC (rev 74385)
+++ projects/ejb3/trunk/core/src/test/resources/basicbootstrap-beans.xml	2008-06-11 12:29:07 UTC (rev 74386)
@@ -114,4 +114,85 @@
   <!-- JNDI Registrar Configuration -->
   <bean name="org.jboss.ejb3.JndiContext"
     class="javax.naming.InitialContext" />
+    
+   <!-- Remoting Proxy Factory Registry -->
+   <bean name="EJB3RemoteProxyFactoryRegistry" class="org.jboss.ejb3.proxy.factory.RemoteProxyFactoryRegistry">
+      <property name="factories">
+         <!-- Define each of the registered factories -->
+         <map class="java.util.HashMap" keyClass="java.lang.String"
+            valueClass="java.lang.Class">
+            <!-- RemoteProxyFactory -->
+            <entry>
+               <key>RemoteProxyFactory</key>
+               <value>org.jboss.ejb3.proxy.factory.RemoteProxyFactory</value>
+            </entry>
+            <!-- IORFactory -->
+            <!-- Only available in AS 
+            <entry>
+               <key>IORFactory</key>
+               <value>org.jboss.ejb3.iiop.IORFactory</value>
+            </entry>
+            -->
+            <!-- ServiceRemoteProxyFactory -->
+            <entry>
+               <key>ServiceRemoteProxyFactory</key>
+               <value>org.jboss.ejb3.proxy.factory.service.ServiceRemoteProxyFactory</value>
+            </entry>
+            <!-- StatefulClusterProxyFactory -->
+            <entry>
+               <key>StatefulClusterProxyFactory</key>
+               <value>org.jboss.ejb3.proxy.factory.stateful.StatefulClusterProxyFactory</value>
+            </entry>
+            <!-- StatefulRemoteProxyFactory -->
+            <entry>
+               <key>StatefulRemoteProxyFactory</key>
+               <value>org.jboss.ejb3.proxy.factory.stateful.StatefulRemoteProxyFactory</value>
+            </entry>
+            <!-- StatelessClusterProxyFactory -->
+            <entry>
+               <key>StatelessClusterProxyFactory</key>
+               <value>org.jboss.ejb3.proxy.factory.stateless.StatelessClusterProxyFactory</value>
+            </entry>
+            <!-- StatelessRemoteProxyFactory -->
+            <entry>
+               <key>StatelessRemoteProxyFactory</key>
+               <value>org.jboss.ejb3.proxy.factory.stateless.StatelessRemoteProxyFactory</value>
+            </entry>            
+         </map>
+      </property>
+   </bean>
+   
+   <!-- EJB3 Persistence Manager Factory Registry -->
+   <bean name="EJB3PersistenceManagerFactoryRegistry" class="org.jboss.ejb3.cache.persistence.PersistenceManagerFactoryRegistry">
+      <property name="factories">
+         <!-- Define each of the registered factories -->
+         <map class="java.util.HashMap" keyClass="java.lang.String"
+            valueClass="java.lang.Class">
+            <!-- StatefulSessionFilePersistenceManager -->
+            <entry>
+               <key>StatefulSessionFilePersistenceManager</key>
+               <!-- A dummy persistence manager which doesn't rely on the jboss mbean -->
+               <value>org.jboss.ejb3.test.cachepassivation.MyStatefulSessionFilePersistenceManagerFactory</value>
+            </entry>
+         </map>
+      </property>
+   </bean>
+   
+   <!-- REMOTING -->
+      
+   <bean name="ServerConfiguration" class="org.jboss.remoting.ServerConfiguration">
+      <property name="invocationHandlers">
+         <map keyClass="java.lang.String" valueClass="java.lang.String">
+            <entry>
+               <key>AOP</key>
+               <value>org.jboss.aspects.remoting.AOPRemotingInvocationHandler</value>
+            </entry>
+         </map>
+      </property>
+   </bean>
+   
+   <bean name="Connector" class="org.jboss.remoting.transport.Connector">
+      <property name="invokerLocator">socket://0.0.0.0:3873</property>
+      <property name="serverConfiguration"><inject bean="ServerConfiguration"/></property>
+   </bean>
 </deployment>
\ No newline at end of file

Modified: projects/ejb3/trunk/core/src/test/resources/log4j.xml
===================================================================
--- projects/ejb3/trunk/core/src/test/resources/log4j.xml	2008-06-11 12:28:15 UTC (rev 74385)
+++ projects/ejb3/trunk/core/src/test/resources/log4j.xml	2008-06-11 12:29:07 UTC (rev 74386)
@@ -61,7 +61,7 @@
 
   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
     <param name="Target" value="System.out"/>
-    <param name="Threshold" value="DEBUG"/>
+    <param name="Threshold" value="WARN"/>
 
     <layout class="org.apache.log4j.PatternLayout">
       <!-- The default pattern: Date Priority [Category] Message\n -->




More information about the jboss-cvs-commits mailing list