[jboss-cvs] JBossAS SVN: r106879 - in projects/ejb3/trunk/proxy-impl/src: main/java/org/jboss/ejb3/proxy/impl/factory/session and 9 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Jul 20 03:27:45 EDT 2010
Author: ALRubinger
Date: 2010-07-20 03:27:42 -0400 (Tue, 20 Jul 2010)
New Revision: 106879
Modified:
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/ProxyFactoryBase.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/SessionProxyFactoryBase.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceLocalProxyFactory.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceProxyFactoryBase.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceRemoteProxyFactory.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionLocalProxyFactory.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionProxyFactoryBase.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionRemoteProxyFactory.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionLocalProxyFactory.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionProxyFactoryBase.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionRemoteProxyFactory.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionLocalProxyInvocationHandler.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionProxyInvocationHandlerBase.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionRemoteProxyInvocationHandler.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/invocation/StatefulRemoteInvocation.java
projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/jndiregistrar/JndiSessionRegistrarBase.java
projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/common/container/unit/SessionContainerTestCase.java
projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/spec_3_4_5/unit/SfsbProxyEqualityTestCase.java
projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/spec_3_4_5/unit/SlsbProxyEqualityTestCase.java
projects/ejb3/trunk/proxy-impl/src/test/resources/ejb3-interceptors-aop.xml
Log:
[EJBTHRE-2132] Refit proxy-impl with capability for client-side interceptors
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/ProxyFactoryBase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/ProxyFactoryBase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/ProxyFactoryBase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -74,6 +74,11 @@
private Advisor advisor;
+ /**
+ * Name of the interceptor stack to use (overrides the default if specified)
+ */
+ private final String overrideInterceptorStackName;
+
// --------------------------------------------------------------------------------||
// Constructor --------------------------------------------------------------------||
// --------------------------------------------------------------------------------||
@@ -90,7 +95,7 @@
* @param advisor The Advisor for proxies created by this factory
*/
public ProxyFactoryBase(final String name, final String containerName, final String containerGuid,
- final ClassLoader classloader, final Advisor advisor)
+ final ClassLoader classloader, final Advisor advisor,final String overrideInterceptorStackName)
{
// Set properties
this.setName(name);
@@ -98,6 +103,7 @@
this.setContainerGuid(containerGuid);
this.setClassLoader(classloader);
this.setAdvisor(advisor);
+ this.overrideInterceptorStackName = overrideInterceptorStackName;
}
// --------------------------------------------------------------------------------||
@@ -157,9 +163,23 @@
*
* @return
*/
- protected String getInterceptorStackName()
+ private String getInterceptorStackName()
{
- return null;
+ // Initialize to default
+ final String defaultStackName = this.getDefaultInterceptorStackName();
+ assert defaultStackName != null && defaultStackName.length() > 0 : "Default interceptor stack name not provided by "
+ + this;
+ String stackName = defaultStackName;
+
+ // Override if specified
+ final String overrideName = this.overrideInterceptorStackName;
+ if (overrideName != null && overrideName.trim().length() > 0)
+ {
+ stackName = overrideName;
+ }
+
+ // Return
+ return stackName;
}
/**
@@ -182,9 +202,15 @@
AdviceStack stack = manager.getAdviceStack(stackName);
assert stack != null : "Could not find Advice Stack with name: " + stackName;
Advisor advisor = this.getAdvisor();
- Interceptor[] interceptors = stack.createInterceptors(advisor, null);
+ final Interceptor[] interceptors = stack.createInterceptors(advisor, null);
return interceptors;
}
+
+ /**
+ * Obtains the name of the default interceptor stack
+ * @return
+ */
+ protected abstract String getDefaultInterceptorStackName();
// --------------------------------------------------------------------------------||
// Lifecycle Methods --------------------------------------------------------------||
@@ -251,13 +277,14 @@
this.containerName = containerName;
}
- protected Advisor getAdvisor()
+ protected final Advisor getAdvisor()
{
return advisor;
}
- private void setAdvisor(Advisor advisor)
+ private final void setAdvisor(final Advisor advisor)
{
+ assert advisor != null : "Advisor was null";
this.advisor = advisor;
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/SessionProxyFactoryBase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/SessionProxyFactoryBase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/SessionProxyFactoryBase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -103,12 +103,15 @@
* @param classloader The ClassLoader associated with the Container's Bean Class
* for which this ProxyFactory is to generate Proxies
* @param advisor The Advisor for proxies created by this factory
+ * @param overrideInterceptorStackName The name of the client-side interceptor stack to use.
+ * If null the default will apply.
*/
public SessionProxyFactoryBase(final String name, final String containerName, final String containerGuid,
- final JBossSessionBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor)
+ final JBossSessionBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor,
+ final String overrideInterceptorStackName)
{
// Call Super
- super(name, containerName, containerGuid, classloader, advisor);
+ super(name, containerName, containerGuid, classloader, advisor, overrideInterceptorStackName);
// Set Metadata
this.setMetadata(metadata);
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceLocalProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceLocalProxyFactory.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceLocalProxyFactory.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -44,6 +44,11 @@
// --------------------------------------------------------------------------------||
private static final Logger logger = Logger.getLogger(ServiceLocalProxyFactory.class);
+
+ /**
+ * Default interceptor stack name
+ */
+ private static final String DEFAULT_STACK_NAME_LOCAL_CLIENT_INTERCEPTORS = "LocalClientInterceptors";
// --------------------------------------------------------------------------------||
// Constructor --------------------------------------------------------------------||
@@ -65,7 +70,7 @@
final JBossServiceBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor)
{
// Call Super
- super(name, containerName, containerGuid, metadata, classloader, advisor);
+ super(name, containerName, containerGuid, metadata, classloader, advisor, null);
}
// --------------------------------------------------------------------------------||
@@ -100,4 +105,14 @@
// Return
return handler;
}
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ejb3.proxy.impl.factory.ProxyFactoryBase#getDefaultInterceptorStackName()
+ */
+ @Override
+ protected String getDefaultInterceptorStackName()
+ {
+ return DEFAULT_STACK_NAME_LOCAL_CLIENT_INTERCEPTORS;
+ }
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceProxyFactoryBase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceProxyFactoryBase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceProxyFactoryBase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -76,12 +76,15 @@
* @param classloader The ClassLoader associated with the Container's Bean Class
* for which this ProxyFactory is to generate Proxies
* @param advisor The Advisor for proxies created by this factory
+ * @param overrideInterceptorStackName The name of the client-side interceptor stack to use.
+ * If null the default will apply.
*/
public ServiceProxyFactoryBase(final String name, final String containerName, final String containerGuid,
- final JBossServiceBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor)
+ final JBossServiceBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor,
+ final String overrideInterceptorStackName)
{
// Call Super
- super(name, containerName, containerGuid, classloader, advisor);
+ super(name, containerName, containerGuid, classloader, advisor, overrideInterceptorStackName);
// Set Metadata
this.setMetadata(metadata);
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceRemoteProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceRemoteProxyFactory.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/service/ServiceRemoteProxyFactory.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -44,9 +44,12 @@
// --------------------------------------------------------------------------------||
private static final Logger logger = Logger.getLogger(ServiceRemoteProxyFactory.class);
+
+ /**
+ * Default interceptor stack name
+ */
+ private static final String DEFAULT_STACK_NAME_SERVICE_CLIENT_INTERCEPTORS = "ServiceClientInterceptors";
- private static final String DEFAULT_STACK_NAME_STATELESS_SESSION_CLIENT_INTERCEPTORS = "ServiceClientInterceptors";
-
// --------------------------------------------------------------------------------||
// Instance Members ---------------------------------------------------------------||
// --------------------------------------------------------------------------------||
@@ -56,11 +59,6 @@
*/
private String url;
- /**
- * Name of the interceptor stack to use (overrides the default)
- */
- private String interceptorStackName;
-
// --------------------------------------------------------------------------------||
// Constructor --------------------------------------------------------------------||
// --------------------------------------------------------------------------------||
@@ -85,11 +83,10 @@
final Advisor advisor, final String interceptorStackName)
{
// Call Super
- super(name, containerName, containerGuid, metadata, classloader, advisor);
+ super(name, containerName, containerGuid, metadata, classloader, advisor, interceptorStackName);
// Set properties
this.setUrl(url);
- this.setInterceptorStackName(interceptorStackName);
}
// --------------------------------------------------------------------------------||
@@ -107,29 +104,6 @@
return this.getMetadata().getBusinessRemotes();
}
- /**
- * Return the name of the interceptor stack to apply to
- * proxies created by this proxy factory
- *
- * @return
- */
- @Override
- protected String getInterceptorStackName()
- {
- // Initialize to default
- String stackName = ServiceRemoteProxyFactory.DEFAULT_STACK_NAME_STATELESS_SESSION_CLIENT_INTERCEPTORS;
-
- // Override if specified
- String overrideName = this.interceptorStackName;
- if (overrideName != null && overrideName.trim().length() > 0)
- {
- stackName = overrideName;
- }
-
- // Return
- return stackName;
- }
-
// --------------------------------------------------------------------------------||
// Required Implementations -------------------------------------------------------||
// --------------------------------------------------------------------------------||
@@ -152,6 +126,16 @@
// Return
return handler;
}
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ejb3.proxy.impl.factory.ProxyFactoryBase#getDefaultInterceptorStackName()
+ */
+ @Override
+ protected String getDefaultInterceptorStackName()
+ {
+ return DEFAULT_STACK_NAME_SERVICE_CLIENT_INTERCEPTORS;
+ }
// --------------------------------------------------------------------------------||
// Accessors / Mutators -----------------------------------------------------------||
@@ -166,9 +150,4 @@
{
this.url = url;
}
-
- protected void setInterceptorStackName(String interceptorStackName)
- {
- this.interceptorStackName = interceptorStackName;
- }
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionLocalProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionLocalProxyFactory.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionLocalProxyFactory.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -45,6 +45,11 @@
// --------------------------------------------------------------------------------||
// Class Members ------------------------------------------------------------------||
// --------------------------------------------------------------------------------||
+
+ /**
+ * Default interceptor stack name
+ */
+ private static final String DEFAULT_STACK_NAME_LOCAL_CLIENT_INTERCEPTORS = "LocalClientInterceptors";
// --------------------------------------------------------------------------------||
// Constructor --------------------------------------------------------------------||
@@ -66,7 +71,7 @@
final JBossSessionBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor)
{
// Call Super
- super(name, containerName, containerGuid, metadata, classloader, advisor);
+ super(name, containerName, containerGuid, metadata, classloader, advisor, null);
}
// --------------------------------------------------------------------------------||
@@ -144,4 +149,14 @@
{
return this.createBusinessDefaultInvocationHandler();
}
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ejb3.proxy.impl.factory.ProxyFactoryBase#getDefaultInterceptorStackName()
+ */
+ @Override
+ protected String getDefaultInterceptorStackName()
+ {
+ return DEFAULT_STACK_NAME_LOCAL_CLIENT_INTERCEPTORS;
+ }
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionProxyFactoryBase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionProxyFactoryBase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionProxyFactoryBase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -78,12 +78,15 @@
* @param classloader The ClassLoader associated with the StatelessContainer
* for which this ProxyFactory is to generate Proxies
* @param advisor The Advisor for proxies created by this factory
+ * @param overrideInterceptorStackName The name of the client-side interceptor stack to use.
+ * If null the default will apply.
*/
public StatefulSessionProxyFactoryBase(final String name, final String containerName, final String containerGuid,
- final JBossSessionBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor)
+ final JBossSessionBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor,
+ final String overrideInterceptorStackName)
{
// Call Super
- super(name, containerName, containerGuid, metadata, classloader, advisor);
+ super(name, containerName, containerGuid, metadata, classloader, advisor, overrideInterceptorStackName);
}
// --------------------------------------------------------------------------------||
@@ -234,10 +237,11 @@
// Return
return proxy;
}
-
+
// --------------------------------------------------------------------------------||
// Internal Helper Methods --------------------------------------------------------||
// --------------------------------------------------------------------------------||
+
/**
* Associates the specified Proxy with the session denoted by
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionRemoteProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionRemoteProxyFactory.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateful/StatefulSessionRemoteProxyFactory.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -48,7 +48,10 @@
// --------------------------------------------------------------------------------||
private static final Logger log = Logger.getLogger(StatefulSessionRemoteProxyFactory.class);
-
+
+ /**
+ * Default interceptor stack name
+ */
private static final String DEFAULT_STACK_NAME_STATEFUL_SESSION_CLIENT_INTERCEPTORS = "StatefulSessionClientInterceptors";
// --------------------------------------------------------------------------------||
@@ -60,11 +63,6 @@
*/
private String url;
- /**
- * Name of the interceptor stack to use (overrides the default)
- */
- private String interceptorStackName;
-
// --------------------------------------------------------------------------------||
// Constructor --------------------------------------------------------------------||
// --------------------------------------------------------------------------------||
@@ -89,9 +87,8 @@
final Advisor advisor, final String interceptorStackName)
{
// Call Super
- super(name, containerName, containerGuid, metadata, classloader, advisor);
+ super(name, containerName, containerGuid, metadata, classloader, advisor,interceptorStackName);
this.setUrl(url);
- this.setInterceptorStackName(interceptorStackName);
}
// --------------------------------------------------------------------------------||
@@ -130,29 +127,6 @@
return this.getMetadata().getRemote();
}
- /**
- * Return the name of the interceptor stack to apply to
- * proxies created by this proxy factory
- *
- * @return
- */
- @Override
- protected String getInterceptorStackName()
- {
- // Initialize to default
- String stackName = StatefulSessionRemoteProxyFactory.DEFAULT_STACK_NAME_STATEFUL_SESSION_CLIENT_INTERCEPTORS;
-
- // Override if specified
- String overrideName = this.interceptorStackName;
- if (overrideName != null && overrideName.trim().length() > 0)
- {
- stackName = overrideName;
- }
-
- // Return
- return stackName;
- }
-
// --------------------------------------------------------------------------------||
// Required Implementations -------------------------------------------------------||
// --------------------------------------------------------------------------------||
@@ -193,6 +167,16 @@
{
return this.createBusinessDefaultInvocationHandler();
}
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ejb3.proxy.impl.factory.ProxyFactoryBase#getDefaultInterceptorStackName()
+ */
+ @Override
+ protected String getDefaultInterceptorStackName()
+ {
+ return DEFAULT_STACK_NAME_STATEFUL_SESSION_CLIENT_INTERCEPTORS;
+ }
// --------------------------------------------------------------------------------||
// Accessors / Mutators -----------------------------------------------------------||
@@ -207,9 +191,4 @@
{
this.url = url;
}
-
- protected void setInterceptorStackName(String interceptorStackName)
- {
- this.interceptorStackName = interceptorStackName;
- }
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionLocalProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionLocalProxyFactory.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionLocalProxyFactory.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -48,6 +48,11 @@
// --------------------------------------------------------------------------------||
private static final Logger logger = Logger.getLogger(StatelessSessionLocalProxyFactory.class);
+
+ /**
+ * Default interceptor stack name
+ */
+ private static final String DEFAULT_STACK_NAME_LOCAL_CLIENT_INTERCEPTORS = "LocalClientInterceptors";
// --------------------------------------------------------------------------------||
// Constructor --------------------------------------------------------------------||
@@ -69,7 +74,7 @@
final JBossSessionBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor)
{
// Call Super
- super(name, containerName, containerGuid, metadata, classloader, advisor);
+ super(name, containerName, containerGuid, metadata, classloader, advisor, null);
}
// --------------------------------------------------------------------------------||
@@ -147,4 +152,14 @@
{
return this.createBusinessDefaultInvocationHandler();
}
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ejb3.proxy.impl.factory.ProxyFactoryBase#getDefaultInterceptorStackName()
+ */
+ @Override
+ protected String getDefaultInterceptorStackName()
+ {
+ return DEFAULT_STACK_NAME_LOCAL_CLIENT_INTERCEPTORS;
+ }
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionProxyFactoryBase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionProxyFactoryBase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionProxyFactoryBase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -60,12 +60,14 @@
* @param classloader The ClassLoader associated with the StatelessContainer
* for which this ProxyFactory is to generate Proxies
* @param advisor The Advisor for proxies created by this factory
+ * @param overrideInterceptorStackName Name of the interceptor stack name to override the default
*/
public StatelessSessionProxyFactoryBase(final String name, final String containerName, final String containerGuid,
- final JBossSessionBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor)
+ final JBossSessionBeanMetaData metadata, final ClassLoader classloader, final Advisor advisor,
+ final String overrideInterceptorStackName)
{
// Call Super
- super(name, containerName, containerGuid, metadata, classloader, advisor);
+ super(name, containerName, containerGuid, metadata, classloader, advisor, overrideInterceptorStackName);
}
// --------------------------------------------------------------------------------||
@@ -85,4 +87,5 @@
{
return this.getReturnTypesFromCreateMethods(homeInterface, true);
}
+
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionRemoteProxyFactory.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionRemoteProxyFactory.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/factory/session/stateless/StatelessSessionRemoteProxyFactory.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -48,7 +48,10 @@
// --------------------------------------------------------------------------------||
private static final Logger logger = Logger.getLogger(StatelessSessionRemoteProxyFactory.class);
-
+
+ /**
+ * Name of the default interceptor stack
+ */
private static final String DEFAULT_STACK_NAME_STATELESS_SESSION_CLIENT_INTERCEPTORS = "StatelessSessionClientInterceptors";
// --------------------------------------------------------------------------------||
@@ -60,11 +63,6 @@
*/
private String url;
- /**
- * Name of the interceptor stack to use (overrides the default)
- */
- private String interceptorStackName;
-
// --------------------------------------------------------------------------------||
// Constructor --------------------------------------------------------------------||
// --------------------------------------------------------------------------------||
@@ -81,19 +79,18 @@
* for which this ProxyFactory is to generate Proxies
* @param url The URL to use for remoting
* @param advisor The Advisor for proxies created by this factory
- * @param interceptorStackName The name of the client-side interceptor stack to use.
+ * @param overrideInterceptorStackName The name of the client-side interceptor stack to use.
* If null the default will apply.
*/
public StatelessSessionRemoteProxyFactory(final String name, final String containerName, final String containerGuid,
final JBossSessionBeanMetaData metadata, final ClassLoader classloader, final String url,
- final Advisor advisor, final String interceptorStackName)
+ final Advisor advisor, final String overrideInterceptorStackName)
{
// Call Super
- super(name, containerName, containerGuid, metadata, classloader, advisor);
+ super(name, containerName, containerGuid, metadata, classloader, advisor, overrideInterceptorStackName);
// Set properties
this.setUrl(url);
- this.setInterceptorStackName(interceptorStackName);
}
// --------------------------------------------------------------------------------||
@@ -132,29 +129,6 @@
return this.getMetadata().getRemote();
}
- /**
- * Return the name of the interceptor stack to apply to
- * proxies created by this proxy factory
- *
- * @return
- */
- @Override
- protected String getInterceptorStackName()
- {
- // Initialize to default
- String stackName = StatelessSessionRemoteProxyFactory.DEFAULT_STACK_NAME_STATELESS_SESSION_CLIENT_INTERCEPTORS;
-
- // Override if specified
- String overrideName = this.interceptorStackName;
- if (overrideName != null && overrideName.trim().length() > 0)
- {
- stackName = overrideName;
- }
-
- // Return
- return stackName;
- }
-
// --------------------------------------------------------------------------------||
// Required Implementations -------------------------------------------------------||
// --------------------------------------------------------------------------------||
@@ -195,6 +169,16 @@
{
return this.createBusinessDefaultInvocationHandler();
}
+
+ /**
+ * {@inheritDoc}
+ * @see org.jboss.ejb3.proxy.impl.factory.ProxyFactoryBase#getDefaultInterceptorStackName()
+ */
+ @Override
+ protected String getDefaultInterceptorStackName()
+ {
+ return DEFAULT_STACK_NAME_STATELESS_SESSION_CLIENT_INTERCEPTORS;
+ }
// --------------------------------------------------------------------------------||
// Accessors / Mutators -----------------------------------------------------------||
@@ -209,9 +193,4 @@
{
this.url = url;
}
-
- protected void setInterceptorStackName(String interceptorStackName)
- {
- this.interceptorStackName = interceptorStackName;
- }
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionLocalProxyInvocationHandler.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionLocalProxyInvocationHandler.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionLocalProxyInvocationHandler.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -22,6 +22,7 @@
package org.jboss.ejb3.proxy.impl.handler.session;
import java.io.Serializable;
+import java.lang.reflect.Method;
import org.jboss.aop.advice.Interceptor;
import org.jboss.ejb3.proxy.spi.container.InvokableContext;
@@ -82,9 +83,9 @@
* @see org.jboss.ejb3.proxy.handler.session.SessionProxyInvocationHandlerBase#getContainer()
*/
@Override
- protected InvokableContext getContainer()
+ protected InvokableContext getContainer(final Method method, final Object[] args)
{
- return this.getContainerLocally();
+ return this.getContainerLocally(method,args);
}
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionProxyInvocationHandlerBase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionProxyInvocationHandlerBase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionProxyInvocationHandlerBase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -28,10 +28,15 @@
import java.util.HashSet;
import java.util.Set;
+import org.jboss.aop.Advisor;
import org.jboss.aop.advice.Interceptor;
+import org.jboss.aop.joinpoint.Invocation;
+import org.jboss.aop.joinpoint.InvocationResponse;
+import org.jboss.aop.util.MethodHashing;
import org.jboss.ejb3.common.lang.SerializableMethod;
import org.jboss.ejb3.common.registrar.spi.Ejb3Registrar;
import org.jboss.ejb3.common.registrar.spi.Ejb3RegistrarLocator;
+import org.jboss.ejb3.proxy.impl.invocation.StatefulRemoteInvocation;
import org.jboss.ejb3.proxy.impl.remoting.ProxyRemotingUtils;
import org.jboss.ejb3.proxy.spi.container.InvokableContext;
import org.jboss.logging.Logger;
@@ -164,15 +169,6 @@
return this.handleInvocationDirectly(proxy, args, method);
}
- /*
- * Obtain the Container
- */
- final InvokableContext container = this.getContainer();
-
- /*
- * Invoke
- */
-
// Adjust args if null to empty array
Object[] usedArgs = args;
if (usedArgs == null)
@@ -183,7 +179,16 @@
// Set the invoked method
final SerializableMethod invokedMethod = new SerializableMethod(method, actualClass);
+
+ /*
+ * Obtain the Container
+ */
+ final InvokableContext container = this.getContainer(invokedMethod.toMethod(), usedArgs);
+ /*
+ * Invoke
+ */
+
// Invoke
final Object result = container.invoke(proxy, invokedMethod, usedArgs);
@@ -304,7 +309,7 @@
* Session bean references to either different business interface types
* or different session beans will not be equal."
*/
-
+
// Short-circuit if we're given null
// EJBTHREE-2039
if (argument == null)
@@ -315,7 +320,7 @@
// Ensure we've got j.l.r.Proxies
assert Proxy.isProxyClass(proxy.getClass()) && Proxy.isProxyClass(argument.getClass()) : "invokeEquals handles only "
+ Proxy.class.getName();
-
+
// Get the InvocationHandlers
InvocationHandler proxyHandler = Proxy.getInvocationHandler(proxy);
InvocationHandler argumentHandler = Proxy.getInvocationHandler(argument);
@@ -405,7 +410,7 @@
*
* @return
*/
- protected InvokableContext getContainerLocally()
+ protected InvokableContext getContainerLocally(final Method method, final Object[] args)
{
// Lookup
Object obj = Ejb3RegistrarLocator.locateRegistrar().lookup(this.getContainerName());
@@ -414,10 +419,102 @@
assert obj instanceof InvokableContext : "Container retrieved from " + Ejb3Registrar.class.getSimpleName()
+ " was not of expected type " + InvokableContext.class.getName() + " but was instead " + obj;
+ final InvokableContext container = (InvokableContext) obj;
+
+ final InvokableContext proxyToContainer = (InvokableContext) Proxy.newProxyInstance(InvokableContext.class
+ .getClassLoader(), new Class<?>[]
+ {InvokableContext.class}, new LocalInvokableContextHandler(method, args, this.target, this.interceptors,
+ container));
+
// Return
- return (InvokableContext) obj;
+ return proxyToContainer;
}
+
+ /**
+ * Invocation handler to adapt interceptors to local invocations
+ * upon the container
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ */
+ private static final class LocalInvokableContextHandler implements InvocationHandler
+ {
+ private final Method realMethod;
+
+ private final Object[] realArgs;
+
+ private final Object session;
+
+ private final Interceptor[] interceptors;
+ final InvokableContext container;
+
+ LocalInvokableContextHandler(final Method realMethod, final Object[] realArgs, final Object session,
+ final Interceptor[] interceptors,final InvokableContext container)
+ {
+ assert realMethod != null : "method must be specified";
+ assert realArgs != null : "realArgs must be specified";
+ assert interceptors != null : "interceptors must be specified";
+ assert container != null : "container must be specified";
+ this.realMethod = realMethod;
+ this.realArgs = realArgs;
+ this.session = session;
+ this.interceptors = interceptors;
+ this.container = container;
+
+ }
+
+ public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable
+ {
+ final long hash = MethodHashing.calculateHash(realMethod);
+ final LocalContainerInvocation invocation = new LocalContainerInvocation(interceptors, hash, realMethod,
+ realMethod, null, session);
+ invocation.setTargetObject(container);
+ invocation.setArguments(args);
+ return invocation.invokeNext();
+ }
+
+ }
+
+ private static class LocalContainerInvocation extends StatefulRemoteInvocation{
+
+ public LocalContainerInvocation(Interceptor[] interceptors, long methodHash, Method advisedMethod,
+ Method unadvisedMethod, Advisor advisor, Object id)
+ {
+ super(interceptors, methodHash, advisedMethod, unadvisedMethod, advisor, id);
+ }
+
+ @Override
+ public Object invokeTarget() throws Throwable
+ {
+ try
+ {
+ final Method methodToInvoke =InvokableContext.class.getMethod("invoke", Object.class,
+ SerializableMethod.class, Object[].class);
+ log.info("METHOD TO INVOKE: " + methodToInvoke);
+ log.info("Target: " + getTargetObject());
+ log.info("Arguments: " + arguments);
+ return methodToInvoke.invoke(getTargetObject(), arguments);
+ }
+ catch (Throwable t)
+ {
+ throw handleErrors(getTargetObject(), getMethod(), arguments, t);
+ }
+ }
+
+ @Override
+ public Invocation copy()
+ {
+ final LocalContainerInvocation copy = new LocalContainerInvocation(this.interceptors, this.methodHash, this.advisedMethod,
+ this.unadvisedMethod, this.advisor, this.id);
+ copy.setMetaData(this.getMetaData());
+ copy.setArguments(this.getArguments());
+ copy.setTargetObject(targetObject);
+ return copy;
+ }
+
+
+
+ }
+
/**
* Creates and returns a Remoting Proxy to invoke upon the container
*
@@ -430,8 +527,8 @@
//FIXME
protected InvokableContext createRemoteProxyToContainer(String url)
{
- InvokableContext container = ProxyRemotingUtils.createRemoteProxyToContainer(this.getContainerName(), this
- .getContainerGuid(), url, this.getInterceptors(), this.getTarget());
+ InvokableContext container = ProxyRemotingUtils.createRemoteProxyToContainer(this.getContainerName(),
+ this.getContainerGuid(), url, this.getInterceptors(), this.getTarget());
return container;
}
@@ -444,7 +541,7 @@
*
* @return
*/
- protected abstract InvokableContext getContainer();
+ protected abstract InvokableContext getContainer(final Method method, final Object[] args);
// ------------------------------------------------------------------------------||
// Accessors / Mutators ---------------------------------------------------------||
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionRemoteProxyInvocationHandler.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionRemoteProxyInvocationHandler.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/handler/session/SessionRemoteProxyInvocationHandler.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -22,6 +22,7 @@
package org.jboss.ejb3.proxy.impl.handler.session;
import java.io.Serializable;
+import java.lang.reflect.Method;
import org.jboss.aop.advice.Interceptor;
import org.jboss.ejb3.proxy.spi.container.InvokableContext;
@@ -79,7 +80,7 @@
* @see org.jboss.ejb3.proxy.handler.session.SessionProxyInvocationHandlerBase#getContainer()
*/
@Override
- protected InvokableContext getContainer()
+ protected InvokableContext getContainer(final Method method, final Object[] args)
{
return this.createRemoteProxyToContainer(this.getUrl());
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/invocation/StatefulRemoteInvocation.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/invocation/StatefulRemoteInvocation.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/invocation/StatefulRemoteInvocation.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -74,6 +74,7 @@
this.unadvisedMethod, this.advisor, this.id);
copy.setMetaData(this.getMetaData());
copy.setArguments(this.getArguments());
+ copy.setTargetObject(targetObject);
return copy;
}
Modified: projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/jndiregistrar/JndiSessionRegistrarBase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/jndiregistrar/JndiSessionRegistrarBase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/main/java/org/jboss/ejb3/proxy/impl/jndiregistrar/JndiSessionRegistrarBase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -497,7 +497,7 @@
}
// If there's a local view
if (hasLocalView)
- {
+ {
// Get the default local JNDI Name
String defaultLocalJndiName = smd.getLocalJndiName();
@@ -769,6 +769,8 @@
* @param smd The metadata representing this Session EJB
* @param cl The ClassLoader for this EJB Container
* @param advisor The Advisor for proxies created by this factory
+ * @param interceptorStackName The name of the client-side interceptor stack to use.
+ * If null the default will apply.
*/
protected abstract ProxyFactory createLocalProxyFactory(final String name, final String containerName,
final String containerGuid, final JBossSessionBeanMetaData smd, final ClassLoader cl, final Advisor advisor);
Modified: projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/common/container/unit/SessionContainerTestCase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/common/container/unit/SessionContainerTestCase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/common/container/unit/SessionContainerTestCase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -23,9 +23,15 @@
import static org.junit.Assert.assertNotNull;
+import java.net.URL;
+
import javax.naming.Context;
import javax.naming.InitialContext;
+import org.jboss.aop.Advisor;
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.AspectXmlLoader;
+import org.jboss.aop.ClassAdvisor;
import org.jboss.ejb3.common.registrar.plugin.mc.Ejb3McRegistrar;
import org.jboss.ejb3.common.registrar.spi.Ejb3RegistrarLocator;
import org.jboss.ejb3.common.registrar.spi.NotBoundException;
@@ -36,6 +42,7 @@
import org.jboss.ejb3.test.proxy.impl.common.container.StatelessContainer;
import org.jboss.ejb3.test.proxy.impl.common.ejb.slsb.SimpleSLSBLocal;
import org.jboss.ejb3.test.proxy.impl.common.ejb.slsb.SimpleSLSBean;
+import org.jboss.ejb3.test.proxy.impl.spec_3_4_5.ProxyEqualityTestCaseBase;
import org.jboss.logging.Logger;
import org.junit.After;
import org.junit.AfterClass;
@@ -68,8 +75,15 @@
* Instance of logger
*/
private static Logger logger = Logger.getLogger(SessionContainerTestCase.class);
+
+ private static final String FILENAME_EJB3_INTERCEPTORS_AOP = "ejb3-interceptors-aop.xml";
/**
+ * The Advisor for these tests
+ */
+ protected static Advisor advisor = null;
+
+ /**
* Initializes the required services
*
* @throws Throwable
@@ -84,6 +98,19 @@
Ejb3RegistrarLocator.bindRegistrar(new Ejb3McRegistrar(bootstrap.getKernel()));
bootstrap.deploy(SessionContainerTestCase.class);
+
+ // Load ejb3-interceptors-aop.xml into AspectManager
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ URL url = cl.getResource(FILENAME_EJB3_INTERCEPTORS_AOP);
+ if (url == null)
+ {
+ throw new RuntimeException("Could not load " + AspectManager.class.getSimpleName()
+ + " with definitions from XML as file " + FILENAME_EJB3_INTERCEPTORS_AOP + " could not be found");
+ }
+ AspectXmlLoader.deployXML(url);
+ AspectManager manager = AspectManager.instance();
+ Advisor advisor = new ClassAdvisor(ProxyEqualityTestCaseBase.class, manager);
+ SessionContainerTestCase.advisor = advisor;
}
Modified: projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/spec_3_4_5/unit/SfsbProxyEqualityTestCase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/spec_3_4_5/unit/SfsbProxyEqualityTestCase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/spec_3_4_5/unit/SfsbProxyEqualityTestCase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -211,8 +211,8 @@
// Make a Local Proxy Factory
StatefulSessionLocalProxyFactory factory = new StatefulSessionLocalProxyFactory(
- StatefulSessionLocalProxyFactory.class.getName(), sfsb.getName(), sfsb.getName(), sfsb.getMetaData(), sfsb
- .getClassLoader(), null);
+ StatefulSessionLocalProxyFactory.class.getName(), sfsb.getName(), sfsb.getName(), sfsb.getMetaData(),
+ sfsb.getClassLoader(), ProxyEqualityTestCaseBase.advisor);
// Start
factory.start();
Modified: projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/spec_3_4_5/unit/SlsbProxyEqualityTestCase.java
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/spec_3_4_5/unit/SlsbProxyEqualityTestCase.java 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/test/java/org/jboss/ejb3/test/proxy/impl/spec_3_4_5/unit/SlsbProxyEqualityTestCase.java 2010-07-20 07:27:42 UTC (rev 106879)
@@ -151,8 +151,8 @@
// Create the Factory
StatelessSessionLocalProxyFactory factory = new StatelessSessionLocalProxyFactory(
- StatelessSessionLocalProxyFactory.class.getName(), container.getName(), container.getName(), container
- .getMetaData(), container.getClassLoader(), null);
+ StatelessSessionLocalProxyFactory.class.getName(), container.getName(), container.getName(),
+ container.getMetaData(), container.getClassLoader(), ProxyEqualityTestCaseBase.advisor);
// Start
factory.start();
Modified: projects/ejb3/trunk/proxy-impl/src/test/resources/ejb3-interceptors-aop.xml
===================================================================
--- projects/ejb3/trunk/proxy-impl/src/test/resources/ejb3-interceptors-aop.xml 2010-07-20 06:23:56 UTC (rev 106878)
+++ projects/ejb3/trunk/proxy-impl/src/test/resources/ejb3-interceptors-aop.xml 2010-07-20 07:27:42 UTC (rev 106879)
@@ -21,6 +21,9 @@
Client Interceptor Stack Definitions
-->
+ <stack name="LocalClientInterceptors">
+ <!-- None -->
+ </stack>
<stack name="ServiceClientInterceptors">
<interceptor-ref name="org.jboss.aspects.remoting.InvokeRemoteInterceptor"/>
More information about the jboss-cvs-commits
mailing list