Author: jlmonteiro
Date: Tue May 13 07:20:53 2014
New Revision: 1594149

URL: http://svn.apache.org/r1594149
Log:
Caching MDB proxy

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1594149&r1=1594148&r2=1594149&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Tue May 13 07:20:53 2014
@@ -1066,7 +1066,7 @@ public class Assembler extends Assembler
                 }
 
                 // if local bean or mdb generate proxy class now to avoid 
bottleneck on classloader later
-                if (beanContext.isLocalbean() || 
beanContext.getComponentType().isMessageDriven()) {
+                if (beanContext.isLocalbean() && 
!beanContext.getComponentType().isMessageDriven()) {
                     final List<Class> interfaces = new ArrayList<Class>(3);
                     interfaces.add(Serializable.class);
                     interfaces.add(IntraVmProxy.class);

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java?rev=1594149&r1=1594148&r2=1594149&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java
 Tue May 13 07:20:53 2014
@@ -41,6 +41,7 @@ public class EndpointFactory implements 
     private final Class[] interfaces;
     private final XAResourceWrapper xaResourceWrapper;
     protected final List<ObjectName> jmxNames = new ArrayList<ObjectName>();
+    private final Class<?> proxy;
 
     public EndpointFactory(final ActivationSpec activationSpec, final 
MdbContainer container, final BeanContext beanContext, final MdbInstanceFactory 
instanceFactory, final XAResourceWrapper xaResourceWrapper) {
         this.activationSpec = activationSpec;
@@ -50,6 +51,14 @@ public class EndpointFactory implements 
         classLoader = container.getMessageListenerInterface().getClassLoader();
         interfaces = new Class[]{container.getMessageListenerInterface(), 
MessageEndpoint.class};
         this.xaResourceWrapper = xaResourceWrapper;
+
+        final BeanContext.ProxyClass proxyClass = 
beanContext.get(BeanContext.ProxyClass.class);
+        if (proxyClass == null) {
+            proxy = 
LocalBeanProxyFactory.createProxy(beanContext.getBeanClass(), 
beanContext.getClassLoader(), interfaces);
+            beanContext.set(BeanContext.ProxyClass.class, new 
BeanContext.ProxyClass(proxy));
+        } else {
+            proxy = proxyClass.getProxy();
+        }
     }
 
     public ActivationSpec getActivationSpec() {
@@ -67,7 +76,7 @@ public class EndpointFactory implements 
         }
         final EndpointHandler endpointHandler = new EndpointHandler(container, 
beanContext, instanceFactory, xaResource);
         try {
-            return (MessageEndpoint) 
LocalBeanProxyFactory.constructProxy(beanContext.get(BeanContext.ProxyClass.class).getProxy(),
 endpointHandler);
+            return (MessageEndpoint) 
LocalBeanProxyFactory.constructProxy(proxy, endpointHandler);
         } catch (final InternalError e) { // should be useless
             //try to create the proxy with tccl once again.
             try {


Reply via email to