Author: covener
Date: Wed Sep 29 00:29:29 2010
New Revision: 1002428

URL: http://svn.apache.org/viewvc?rev=1002428&view=rev
Log:
[OWB-463] allow EJB proxies to also be created as subclasses of EJB 
implementation 
classes for @LocalBean EJBs, instead of as proxies that only extend a given
@Local interface.  

Prevents java.lang.IncompatibleClassChangeError when calling 
ProxyFactory.setInterfaces() with an EJB implemenation class as
the argument.


Modified:
    
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbDefinitionUtility.java

Modified: 
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbDefinitionUtility.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbDefinitionUtility.java?rev=1002428&r1=1002427&r2=1002428&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbDefinitionUtility.java
 (original)
+++ 
openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbDefinitionUtility.java
 Wed Sep 29 00:29:29 2010
@@ -47,6 +47,15 @@ public final class EjbDefinitionUtility
         creator.defineApiType();
     }
     
+    /**
+     * 
+     * @param <T> EJB bean implementation class
+     * @param bean The Enterprise bean to create a proxy for
+     * @param iface The @Local interface the proxy should implement or the 
+     *              @Localbean class the proxy should extend.
+     * @param creationalContext 
+     * @return
+     */
     @SuppressWarnings({"unchecked"})
     public static <T> T defineEjbBeanProxy(BaseEjbBean<T> bean, Class<?> 
iface, CreationalContext<?> creationalContext)
     {
@@ -57,7 +66,16 @@ public final class EjbDefinitionUtility
             if(clazz == null)
             {
                 ProxyFactory factory = new ProxyFactory();
-                factory.setInterfaces(new Class[]{iface});
+                if (iface.isInterface())
+                {
+                    factory.setInterfaces(new Class[]{iface});
+                }
+                else 
+                {
+                    // @LocalBean no-interface local view requested
+                    factory.setSuperclass(iface);
+                }
+                
                 clazz = 
JavassistProxyFactory.getInstance().defineEjbBeanProxyClass(bean, iface, 
factory);
             }
             


Reply via email to