[jboss-cvs] JBossAS SVN: r77053 - trunk/server/src/main/org/jboss/deployment.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Aug 14 05:36:46 EDT 2008


Author: ALRubinger
Date: 2008-08-14 05:36:45 -0400 (Thu, 14 Aug 2008)
New Revision: 77053

Modified:
   trunk/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java
Log:
[EJBTHREE-1455] Use the default Proxy when ejb-ref is EJB2.x Component interface

Modified: trunk/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java	2008-08-14 09:10:10 UTC (rev 77052)
+++ trunk/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java	2008-08-14 09:36:45 UTC (rev 77053)
@@ -881,13 +881,41 @@
                unresolvedRefs.add(cdmd.getComponentID()+":"+ref);
             else
             {
-               cdmd.addDependency(target);
+               
                // Need to look at the local jndi name
                String localInterface = ref.getLocal();
                JBossEnterpriseBeanMetaData md = target.getBeanMetaData();
-               JBossMetaData ejbMarMd = md.getEnterpriseBeansMetaData().getEjbJarMetaData();
+               
+               /*
+                * If for a Session bean we've got a reference to an EJB2.x
+                * Local Component interface, stop processing because these
+                * are not bound in JNDI (only accessible via LocalHome.create()
+                */
+               
+               // Session EJB?
+               boolean useDefaultProxy = false;
+               if(md.isSession())
+               {
+                  // Cast
+                  JBossSessionBeanMetaData smd = (JBossSessionBeanMetaData)md;
+                  
+                  // Get the name of the Component Local Interface
+                  String ejb2xLocalInterface = smd.getLocal();
+                  
+                  // If the ejb-ref is to a EJB2.x Local Component Interface
+                  if(localInterface.equals(ejb2xLocalInterface))
+                  {
+                     // Use the default proxy
+                     useDefaultProxy = true;
+                  }
+               }
+                
+               // Get ejb-jar Metadata
+               JBossMetaData ejbJarMd = md.getEnterpriseBeansMetaData().getEjbJarMetaData();
+               
+               // Resolve a local JNDI Name based on Spec type
                String localJndiName = null;
-               if (ejbMarMd.isEJB3x())
+               if (ejbJarMd.isEJB3x() && !useDefaultProxy)
                {
                   localJndiName = md.determineResolvedJndiName(localInterface);
                }
@@ -895,8 +923,17 @@
                {
                   localJndiName = md.determineLocalJndiName();
                }
-               if(localJndiName != null)
+
+               // If we've got a resolved JNDI Name 
+               if (localJndiName != null)
+               {
+                  // Set it and forget it! 
+                  // http://en.wikipedia.org/wiki/Ron_Popeil
                   ref.setResolvedJndiName(localJndiName);
+               }
+               
+               // Add the dependency
+               cdmd.addDependency(target);
             }
          }
          else
@@ -976,24 +1013,60 @@
                unresolvedRefs.add(cdmd.getComponentID()+":"+ref);
             else
             {
-               cdmd.addDependency(target);
-               // Determine the jndi name for the reference interface
-               String iface = getInterface(ref);
-               //LegacyEjb3JndiPolicy policy = new LegacyEjb3JndiPolicy();
-               String businessInterface = ref.getRemote();
+               
+               // Obtain remote interface name
+               String remoteInterface = ref.getRemote();
+               
+               // Get Metadata
                JBossEnterpriseBeanMetaData md = target.getBeanMetaData();
+               
+               /*
+                * If for a Session bean we've got a reference to an EJB2.x
+                * Remote Component interface, stop processing because these
+                * are not bound in JNDI (only accessible via Home.create()
+                */
+               
+               // Session EJB?
+               boolean useDefaultProxy = false;
+               if(md.isSession())
+               {
+                  // Cast
+                  JBossSessionBeanMetaData smd = (JBossSessionBeanMetaData)md;
+                  
+                  // Get the name of the Component Remote Interface
+                  String ejb2xRemoteInterface = smd.getRemote();
+                  
+                  // If the ejb-ref is to a EJB2.x Remote Component Interface
+                  if(remoteInterface.equals(ejb2xRemoteInterface))
+                  {
+                     // Use the default proxy
+                     useDefaultProxy = true;
+                  }
+               }
+               
+               // Get ejb-jar metadata
                JBossMetaData ejbMarMd = md.getEnterpriseBeansMetaData().getEjbJarMetaData();
+               
+               // Resolve a JNDI name
                String containerJndiName = null;
-               if (ejbMarMd.isEJB3x())
+               if (ejbMarMd.isEJB3x() && !useDefaultProxy)
                {
-                  containerJndiName = md.determineResolvedJndiName(businessInterface);
+                  containerJndiName = md.determineResolvedJndiName(remoteInterface);
                }
                else
                {
                   containerJndiName = md.determineJndiName();
                }
+               
+               // If we've got a resolved name
                if(containerJndiName != null)
+               {
+                  // Set it
                   ref.setResolvedJndiName(containerJndiName);
+               }
+               
+               // Add the dependency
+               cdmd.addDependency(target);
             }
          }
          else




More information about the jboss-cvs-commits mailing list