[jboss-cvs] JBossAS SVN: r73436 - in projects/ejb3/trunk/proxy/src: main/java/org/jboss/ejb3/proxy/factory/session/stateless and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri May 16 02:41:39 EDT 2008


Author: ALRubinger
Date: 2008-05-16 02:41:39 -0400 (Fri, 16 May 2008)
New Revision: 73436

Modified:
   projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/SessionProxyFactory.java
   projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/SessionProxyFactoryBase.java
   projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/stateless/StatelessSessionLocalProxyFactory.java
   projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/stateless/StatelessSessionRemoteProxyFactory.java
   projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/handler/session/stateless/StatelessLocalProxyInvocationHandler.java
   projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/handler/session/stateless/StatelessRemoteProxyInvocationHandler.java
   projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/objectfactory/session/SessionProxyObjectFactory.java
   projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/common/registry/MockLifecycleSessionProxyFactory.java
   projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/common/registry/MockSessionProxyFactory.java
Log:
[EJBTHREE-1345] Implemented Proxy Creation

Modified: projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/SessionProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/SessionProxyFactory.java	2008-05-16 06:06:28 UTC (rev 73435)
+++ projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/SessionProxyFactory.java	2008-05-16 06:41:39 UTC (rev 73436)
@@ -46,22 +46,16 @@
     * Create an EJB3 Business proxy with no 
     * specific target business interface.  The 
     * returned proxy will implement all appropriate
-    * business interfaces. 
+    * business interfaces.  Additionally, if
+    * the Home interface is bound alongside 
+    * the Default (same JNDI Name), this 
+    * Proxy will implement the Home interface as well. 
     * 
     * @return
     */
-   Object createProxyBusiness();
+   Object createProxyDefault();
 
    /**
-    * Create a Proxy for both EJB2.x Home and 
-    * Business Views, used when both the Home and Business
-    * interfaces are bound together
-    * 
-    * @return
-    */
-   Object createProxyBusinessAndHome();
-
-   /**
     * Create an EJB3 Business Proxy specific to the specified
     * target business interface name (expressed as 
     * a fully-qualified class name)

Modified: projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/SessionProxyFactoryBase.java
===================================================================
--- projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/SessionProxyFactoryBase.java	2008-05-16 06:06:28 UTC (rev 73435)
+++ projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/SessionProxyFactoryBase.java	2008-05-16 06:41:39 UTC (rev 73436)
@@ -36,9 +36,9 @@
 import org.jboss.ejb3.common.lang.ClassHelper;
 import org.jboss.ejb3.common.string.StringUtils;
 import org.jboss.ejb3.proxy.factory.ProxyFactoryBase;
+import org.jboss.ejb3.proxy.handler.session.SessionProxyInvocationHandler;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
-import org.jboss.util.NotImplementedException;
 
 /**
  * SessionProxyFactoryBase
@@ -121,32 +121,47 @@
     */
    public Object createProxyHome()
    {
-      throw new NotImplementedException("ALR");
+      // Initialize an error message; why not be pessimistic? ;)
+      String errorMessage = "Could not create Home Proxy for " + this.getMetadata().getEjbName();
+
+      try
+      {
+         // Create a new Proxy instance and return it
+         return this.getConstructorProxyHome().newInstance(this.getInvocationHandlerConstructor().newInstance());
+      }
+      catch (Throwable t)
+      {
+         // Throw a descriptive error message along with the originating Throwable 
+         throw new RuntimeException(errorMessage, t);
+      }
    }
 
    /**
     * Create an EJB3 Business proxy with no 
     * specific target business interface.  The 
     * returned proxy will implement all appropriate
-    * business interfaces. 
+    * business interfaces.  Additionally, if
+    * the Home interface is bound alongside 
+    * the Default (same JNDI Name), this 
+    * Proxy will implement the Home interface as well.
     * 
     * @return
     */
-   public Object createProxyBusiness()
+   public Object createProxyDefault()
    {
-      throw new NotImplementedException("ALR");
-   }
+      // Initialize an error message
+      String errorMessage = "Could not create the Default Proxy for " + this.getMetadata().getEjbName();
 
-   /**
-    * Create a Proxy for both EJB2.x Home and 
-    * Business Views, used when both the Home and Business
-    * interfaces are bound together
-    * 
-    * @return
-    */
-   public Object createProxyBusinessAndHome()
-   {
-      throw new NotImplementedException("ALR");
+      try
+      {
+         // Create a new Proxy instance and return it
+         return this.getConstructorProxyDefault().newInstance(this.getInvocationHandlerConstructor().newInstance());
+      }
+      catch (Throwable t)
+      {
+         // Throw a descriptive error message along with the originating Throwable 
+         throw new RuntimeException(errorMessage, t);
+      }
    }
 
    /**
@@ -154,13 +169,36 @@
     * target business interface name (expressed as 
     * a fully-qualified class name)
     * 
-    * @param id
     * @param businessInterfaceName
     * @return
     */
-   public Object createProxyBusiness(String businessInterfaceName)
+   public Object createProxyBusiness(final String businessInterfaceName)
    {
-      throw new NotImplementedException("ALR");
+      // Initialize an error message
+      String errorMessage = "Could not create the EJB3 Business Proxy implementing \"" + businessInterfaceName
+            + "\" for " + this.getMetadata().getEjbName();
+
+      try
+      {
+         // Ensure businessInterfaceName is specified
+         assert businessInterfaceName != null && !businessInterfaceName.equals("") : "Required business interface type name was not specified";
+
+         // Obtain the correct business proxy constructor
+         Constructor<?> constructor = this.getConstructorsProxySpecificBusinessInterface().get(
+               businessInterfaceName.trim());
+
+         // Ensure the constructor was found
+         assert constructor != null : "No business proxy constructor for \"" + businessInterfaceName
+               + "\" was found; not created at start() properly?  Bad value bound as RefAddr in JNDI?";
+
+         // Create a new Proxy instance and return it
+         return constructor.newInstance(this.getInvocationHandlerConstructor().newInstance(businessInterfaceName));
+      }
+      catch (Throwable t)
+      {
+         // Throw a descriptive error message along with the originating Throwable 
+         throw new RuntimeException(errorMessage, t);
+      }
    }
 
    /**
@@ -170,7 +208,19 @@
     */
    public Object createProxyEjb2x()
    {
-      throw new NotImplementedException("ALR");
+      // Initialize an error message
+      String errorMessage = "Could not create the EJB2.x Proxy for " + this.getMetadata().getEjbName();
+
+      try
+      {
+         // Create a new Proxy instance and return it
+         return this.getConstructorProxyEjb2x().newInstance(this.getInvocationHandlerConstructor().newInstance());
+      }
+      catch (Throwable t)
+      {
+         // Throw a descriptive error message along with the originating Throwable 
+         throw new RuntimeException(errorMessage, t);
+      }
    }
 
    // --------------------------------------------------------------------------------||
@@ -512,6 +562,14 @@
     */
    protected abstract Set<Class<?>> getReturnTypesFromCreateMethods(Class<?> homeInterface);
 
+   /**
+    * Returns the Constructor of the SessionProxyInvocationHandler to be used in 
+    * instanciating new handlers to specify in Proxy Creation
+    * 
+    * @return
+    */
+   protected abstract Constructor<? extends SessionProxyInvocationHandler> getInvocationHandlerConstructor();
+
    // --------------------------------------------------------------------------------||
    // Accessors / Mutators -----------------------------------------------------------||
    // --------------------------------------------------------------------------------||

Modified: projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/stateless/StatelessSessionLocalProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/stateless/StatelessSessionLocalProxyFactory.java	2008-05-16 06:06:28 UTC (rev 73435)
+++ projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/stateless/StatelessSessionLocalProxyFactory.java	2008-05-16 06:41:39 UTC (rev 73436)
@@ -21,9 +21,12 @@
  */
 package org.jboss.ejb3.proxy.factory.session.stateless;
 
+import java.lang.reflect.Constructor;
 import java.util.Set;
 
 import org.jboss.ejb3.proxy.factory.session.SessionProxyFactory;
+import org.jboss.ejb3.proxy.handler.session.SessionProxyInvocationHandler;
+import org.jboss.ejb3.proxy.handler.session.stateless.StatelessLocalProxyInvocationHandler;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
 
@@ -96,6 +99,27 @@
       return this.getMetadata().getLocal();
    }
 
+   /**
+    * Returns the Constructor of the SessionProxyInvocationHandler to be used in 
+    * instanciating new handlers to specify in Proxy Creation
+    * 
+    * @return
+    */
+   @Override
+   protected Constructor<? extends SessionProxyInvocationHandler> getInvocationHandlerConstructor()
+   {
+      try
+      {
+         return StatelessLocalProxyInvocationHandler.class.getConstructor(new Class[]
+         {String.class});
+      }
+      catch (NoSuchMethodException e)
+      {
+         throw new RuntimeException("Could not find Constructor with one String argument for "
+               + StatelessLocalProxyInvocationHandler.class.getName(), e);
+      }
+   }
+
    // --------------------------------------------------------------------------------||
    // Lifecycle Methods --------------------------------------------------------------||
    // --------------------------------------------------------------------------------||

Modified: projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/stateless/StatelessSessionRemoteProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/stateless/StatelessSessionRemoteProxyFactory.java	2008-05-16 06:06:28 UTC (rev 73435)
+++ projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/factory/session/stateless/StatelessSessionRemoteProxyFactory.java	2008-05-16 06:41:39 UTC (rev 73436)
@@ -21,9 +21,12 @@
  */
 package org.jboss.ejb3.proxy.factory.session.stateless;
 
+import java.lang.reflect.Constructor;
 import java.util.Set;
 
 import org.jboss.ejb3.proxy.factory.session.SessionProxyFactory;
+import org.jboss.ejb3.proxy.handler.session.SessionProxyInvocationHandler;
+import org.jboss.ejb3.proxy.handler.session.stateless.StatelessRemoteProxyInvocationHandler;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
 
@@ -96,6 +99,27 @@
       return this.getMetadata().getRemote();
    }
 
+   /**
+    * Returns the Constructor of the SessionProxyInvocationHandler to be used in 
+    * instanciating new handlers to specify in Proxy Creation
+    * 
+    * @return
+    */
+   @Override
+   protected Constructor<? extends SessionProxyInvocationHandler> getInvocationHandlerConstructor()
+   {
+      try
+      {
+         return StatelessRemoteProxyInvocationHandler.class.getConstructor(new Class[]
+         {String.class});
+      }
+      catch (NoSuchMethodException e)
+      {
+         throw new RuntimeException("Could not find Constructor with one String argument for "
+               + StatelessRemoteProxyInvocationHandler.class.getName(), e);
+      }
+   }
+
    // --------------------------------------------------------------------------------||
    // Lifecycle Methods --------------------------------------------------------------||
    // --------------------------------------------------------------------------------||

Modified: projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/handler/session/stateless/StatelessLocalProxyInvocationHandler.java
===================================================================
--- projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/handler/session/stateless/StatelessLocalProxyInvocationHandler.java	2008-05-16 06:06:28 UTC (rev 73435)
+++ projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/handler/session/stateless/StatelessLocalProxyInvocationHandler.java	2008-05-16 06:41:39 UTC (rev 73436)
@@ -48,7 +48,7 @@
     *   marking this invocation hander as specific to a given
     *   EJB3 Business Interface
     */
-   protected StatelessLocalProxyInvocationHandler(String businessInterfaceType)
+   public StatelessLocalProxyInvocationHandler(String businessInterfaceType)
    {
       super(businessInterfaceType);
    }

Modified: projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/handler/session/stateless/StatelessRemoteProxyInvocationHandler.java
===================================================================
--- projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/handler/session/stateless/StatelessRemoteProxyInvocationHandler.java	2008-05-16 06:06:28 UTC (rev 73435)
+++ projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/handler/session/stateless/StatelessRemoteProxyInvocationHandler.java	2008-05-16 06:41:39 UTC (rev 73436)
@@ -48,7 +48,7 @@
     *   marking this invocation hander as specific to a given
     *   EJB3 Business Interface
     */
-   protected StatelessRemoteProxyInvocationHandler(String businessInterfaceType)
+   public StatelessRemoteProxyInvocationHandler(String businessInterfaceType)
    {
       super(businessInterfaceType);
    }

Modified: projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/objectfactory/session/SessionProxyObjectFactory.java
===================================================================
--- projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/objectfactory/session/SessionProxyObjectFactory.java	2008-05-16 06:06:28 UTC (rev 73435)
+++ projects/ejb3/trunk/proxy/src/main/java/org/jboss/ejb3/proxy/objectfactory/session/SessionProxyObjectFactory.java	2008-05-16 06:41:39 UTC (rev 73436)
@@ -115,7 +115,7 @@
       // If home and business are bound together
       if (hasHome && hasBusiness)
       {
-         proxy = factory.createProxyBusinessAndHome();
+         proxy = factory.createProxyDefault();
          log.debug("Created Proxy " + proxy + " for both EJB2.x and EJB3 Business Interfaces.");
       }
       // If bound to home only
@@ -155,7 +155,7 @@
          else
          {
             // Use a general-purpose proxy for all business interfaces
-            proxy = factory.createProxyBusiness();
+            proxy = factory.createProxyDefault();
             log.debug("Created Proxy " + proxy + " for EJB3 Business Interfaces: " + businessInterfaces);
          }
       }

Modified: projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/common/registry/MockLifecycleSessionProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/common/registry/MockLifecycleSessionProxyFactory.java	2008-05-16 06:06:28 UTC (rev 73435)
+++ projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/common/registry/MockLifecycleSessionProxyFactory.java	2008-05-16 06:41:39 UTC (rev 73436)
@@ -102,7 +102,7 @@
    /* (non-Javadoc)
     * @see org.jboss.ejb3.proxy.factory.session.SessionProxyFactory#createProxyBusiness()
     */
-   public Object createProxyBusiness()
+   public Object createProxyDefault()
    {
       // TODO Auto-generated method stub
       return null;

Modified: projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/common/registry/MockSessionProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/common/registry/MockSessionProxyFactory.java	2008-05-16 06:06:28 UTC (rev 73435)
+++ projects/ejb3/trunk/proxy/src/test/java/org/jboss/ejb3/test/proxy/common/registry/MockSessionProxyFactory.java	2008-05-16 06:41:39 UTC (rev 73436)
@@ -38,7 +38,7 @@
    /* (non-Javadoc)
     * @see org.jboss.ejb3.proxy.factory.session.SessionProxyFactory#createProxyBusiness()
     */
-   public Object createProxyBusiness()
+   public Object createProxyDefault()
    {
       // TODO Auto-generated method stub
       return null;




More information about the jboss-cvs-commits mailing list