[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