You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2011/06/18 22:15:30 UTC

svn commit: r1137242 - in /openejb/trunk/openejb3/container: openejb-core/src/main/java/org/apache/openejb/assembler/classic/ openejb-spring/src/main/java/org/apache/openejb/spring/ openejb-spring/src/test/java/org/apache/openejb/spring/

Author: rmannibucau
Date: Sat Jun 18 20:15:29 2011
New Revision: 1137242

URL: http://svn.apache.org/viewvc?rev=1137242&view=rev
Log:
adding a key by template strategy to avoid to loose template (useful for spring for example)

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
    openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
    openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=1137242&r1=1137241&r2=1137242&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java Sat Jun 18 20:15:29 2011
@@ -18,6 +18,7 @@ package org.apache.openejb.assembler.cla
 
 import static org.apache.openejb.util.Classes.packageName;
 
+import java.util.TreeMap;
 import javax.ejb.embeddable.EJBContainer;
 import javax.naming.NamingException;
 import javax.naming.Reference;
@@ -56,6 +57,7 @@ import java.lang.reflect.Constructor;
  */
 public class JndiBuilder {
 
+    public static final String DEFAULT_NAME_KEY = "default";
 
     final boolean embeddedEjbContainerApi;
 
@@ -165,7 +167,8 @@ public class JndiBuilder {
 
         public void begin(BeanContext beanContext);
 
-        public String getName(Class interfce, Interface type);
+        public String getName(Class interfce, String key, Interface type);
+        public Map<String, String> getNames(Class interfce, Interface type);
 
         public void end();
     }
@@ -174,6 +177,7 @@ public class JndiBuilder {
 
     public static class TemplatedStrategy implements JndiNameStrategy {
         private static final String JNDINAME_FORMAT = "openejb.jndiname.format";
+        private static final String KEYS = "default,local,global,app";
         private org.apache.openejb.util.StringTemplate template;
         private HashMap<String, EnterpriseBeanInfo> beanInfos;
 
@@ -181,7 +185,7 @@ public class JndiBuilder {
         private BeanContext bean;
         
         // Set in begin()
-        private Map<String, StringTemplate> templates;
+        private HashMap<String, Map<String, StringTemplate>> templates;
 
         private String format;
         private Map<String, String> appContext;
@@ -234,18 +238,27 @@ public class JndiBuilder {
             }
         }
 
+        private Map<String, StringTemplate> addTemplate(Map<String, StringTemplate> map, String key, StringTemplate template) {
+            Map<String, StringTemplate> m = map;
+            if (m == null) {
+                m = new TreeMap<String, StringTemplate> ();
+            }
+            m.put(key, template);
+            return m;
+        }
+
         public void begin(BeanContext bean) {
             this.bean = bean;
             
             EnterpriseBeanInfo beanInfo = beanInfos.get(bean.getDeploymentID());
 
-            templates = new HashMap<String, StringTemplate>();
-            templates.put("", template);
+            templates = new HashMap<String, Map<String, StringTemplate>>();
+            templates.put("", addTemplate(null, "default", template));
 
             for (JndiNameInfo nameInfo : beanInfo.jndiNamess) {
                 String intrface = nameInfo.intrface;
                 if (intrface == null) intrface = "";
-                templates.put(intrface, new StringTemplate(nameInfo.name));
+                templates.put(intrface, addTemplate(templates.get(intrface), getType(nameInfo.name), new StringTemplate(nameInfo.name)));
             }
             beanInfo.jndiNames.clear();
             beanInfo.jndiNamess.clear();
@@ -260,11 +273,23 @@ public class JndiBuilder {
             this.beanContext.put("deploymentId", bean.getDeploymentID().toString());
         }
 
+        private static String getType(String name) {
+            int start = 0;
+            if (name.charAt(0) == '/') {
+                start = 1;
+            }
+            int end = name.substring(start).indexOf('/');
+            if (end < 0) {
+                return DEFAULT_NAME_KEY;
+            }
+            return name.substring(start, end);
+        }
+
         public void end() {
         }
 
-        public String getName(Class interfce, Interface type) {
-            StringTemplate template = templates.get(interfce.getName());
+        public String getName(Class interfce, String key, Interface type) {
+            Map<String, StringTemplate> template = templates.get(interfce.getName());
             if (template == null) template = templates.get(type.getAnnotationName());
             if (template == null) template = templates.get("");
 
@@ -279,7 +304,18 @@ public class JndiBuilder {
             contextData.put("interfaceClass.simpleName", interfce.getSimpleName());
             contextData.put("interfaceClass.packageName", packageName(interfce));
 
-            return template.apply(contextData);
+            if (template.containsKey(key)) {
+                return template.get(key).apply(contextData);
+            }
+            return template.get(DEFAULT_NAME_KEY).apply(contextData);
+        }
+
+        @Override public Map<String, String> getNames(Class interfce, Interface type) {
+            Map<String, String> names = new HashMap<String, String>();
+            for (String key : KEYS.split(",")) {
+                names.put(key, getName(interfce, key, type));
+            }
+            return names;
         }
     }
 
@@ -293,7 +329,7 @@ public class JndiBuilder {
         public void end() {
         }
 
-        public String getName(Class interfce, Interface type) {
+        public String getName(Class interfce, String key, Interface type) {
             String id = beanContext.getDeploymentID() + "";
             if (id.charAt(0) == '/') {
                 id = id.substring(1);
@@ -311,6 +347,12 @@ public class JndiBuilder {
             }
             return id;
         }
+
+        @Override public Map<String, String> getNames(Class interfce, Interface type) {
+            Map<String, String> names = new HashMap<String, String>();
+            names.put("", getName(interfce, DEFAULT_NAME_KEY, type));
+            return names;
+        }
     }
 
     public void bind(EjbJarInfo ejbJarInfo, BeanContext bean, EnterpriseBeanInfo beanInfo, JndiNameStrategy strategy) {
@@ -350,7 +392,7 @@ public class JndiBuilder {
                 String internalName = "openejb/Deployment/" + format(bean.getDeploymentID(), beanClass.getName(), InterfaceType.BUSINESS_LOCALBEAN_HOME);
                 bind(internalName, ref, bindings, beanInfo, beanClass);
 
-                String name = strategy.getName(beanClass, JndiNameStrategy.Interface.LOCALBEAN);
+                String name = strategy.getName(beanClass, DEFAULT_NAME_KEY, JndiNameStrategy.Interface.LOCALBEAN);
                 bind("openejb/local/" + name, ref, bindings, beanInfo, beanClass);
                 bindJava(bean, beanClass, ref, bindings, beanInfo);
 
@@ -375,7 +417,7 @@ public class JndiBuilder {
                 String internalName = "openejb/Deployment/" + format(bean.getDeploymentID(), interfce.getName(), InterfaceType.BUSINESS_LOCAL);
                 bind(internalName, ref, bindings, beanInfo, interfce);
 
-                String externalName = "openejb/local/" + strategy.getName(interfce, JndiNameStrategy.Interface.BUSINESS_LOCAL);
+                String externalName = "openejb/local/" + strategy.getName(interfce, DEFAULT_NAME_KEY, JndiNameStrategy.Interface.BUSINESS_LOCAL);
                 bind(externalName, ref, bindings, beanInfo, interfce);
                 bindJava(bean, interfce, ref, bindings, beanInfo);
                 
@@ -401,7 +443,7 @@ public class JndiBuilder {
                 String internalName = "openejb/Deployment/" + format(bean.getDeploymentID(), interfce.getName(), InterfaceType.BUSINESS_REMOTE);
                 bind(internalName, ref, bindings, beanInfo, interfce);
 
-                String name = strategy.getName(interfce, JndiNameStrategy.Interface.BUSINESS_REMOTE);
+                String name = strategy.getName(interfce, DEFAULT_NAME_KEY, JndiNameStrategy.Interface.BUSINESS_REMOTE);
                 bind("openejb/local/" + name, ref, bindings, beanInfo, interfce);
                 bind("openejb/remote/" + name, ref, bindings, beanInfo, interfce);
                 bindJava(bean, interfce, ref, bindings, beanInfo);
@@ -418,7 +460,7 @@ public class JndiBuilder {
 
                 ObjectReference ref = new ObjectReference(bean.getEJBLocalHome());
 
-                String name = strategy.getName(bean.getLocalHomeInterface(), JndiNameStrategy.Interface.LOCAL_HOME);
+                String name = strategy.getName(bean.getLocalHomeInterface(), DEFAULT_NAME_KEY, JndiNameStrategy.Interface.LOCAL_HOME);
                 bind("openejb/local/" + name, ref, bindings, beanInfo, localHomeInterface);
                 
                 optionalBind(bindings, ref, "openejb/Deployment/" + format(bean.getDeploymentID(), localHomeInterface.getName(), InterfaceType.EJB_LOCAL_HOME));
@@ -442,7 +484,7 @@ public class JndiBuilder {
 
                 ObjectReference ref = new ObjectReference(bean.getEJBHome());
 
-                String name = strategy.getName(homeInterface, JndiNameStrategy.Interface.REMOTE_HOME);
+                String name = strategy.getName(homeInterface, DEFAULT_NAME_KEY, JndiNameStrategy.Interface.REMOTE_HOME);
                 bind("openejb/local/" + name, ref, bindings, beanInfo, homeInterface);
                 bind("openejb/remote/" + name, ref, bindings, beanInfo, homeInterface);
                 

Modified: openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java?rev=1137242&r1=1137241&r2=1137242&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java (original)
+++ openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java Sat Jun 18 20:15:29 2011
@@ -36,6 +36,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
 import org.apache.openejb.assembler.classic.JndiBuilder;
 import org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy;
+import org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy.Interface;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
@@ -120,7 +121,7 @@ public abstract class AbstractApplicatio
                             if (!applicationContext.containsBean(beanName)) {
                                 EJB ejb = entry.getValue();
                                 applicationContext.getBeanFactory().registerSingleton(beanName, ejb);
-                                logger.info("Exported EJB " + deployment.getEjbName() + " with interface " + entry.getValue().getInterface().getName() + " to Spring bean " + entry.getKey());
+                                logger.info("Exported EJB " + deployment.getEjbName() + " with interface " + ejb.getInterface().getName() + " to Spring bean " + entry.getKey());
                             }
                         }
                     }
@@ -142,25 +143,29 @@ public abstract class AbstractApplicatio
 
         Class remoteHome = deployment.getHomeInterface();
         if (remoteHome != null) {
-            String externalName = strategy.getName(remoteHome, JndiNameStrategy.Interface.REMOTE_HOME);
-            bindings.put(externalName, new EJB(deployment, remoteHome));
+            for (Map.Entry<String, String> entry : strategy.getNames(remoteHome, JndiNameStrategy.Interface.REMOTE_HOME).entrySet()) {
+                bindings.put(entry.getValue(), new EJB(deployment, remoteHome));
+            }
         }
 
 
         Class localHome = deployment.getLocalHomeInterface();
         if (localHome != null) {
-            String externalName = strategy.getName(localHome, JndiNameStrategy.Interface.LOCAL_HOME);
-            bindings.put(externalName, new EJB(deployment, remoteHome));
+            for (Map.Entry<String, String> entry : strategy.getNames(localHome, Interface.LOCAL_HOME).entrySet()) {
+                bindings.put(entry.getValue(), new EJB(deployment, localHome));
+            }
         }
 
         for (Class businessLocal : deployment.getBusinessLocalInterfaces()) {
-            String externalName = strategy.getName(businessLocal, JndiNameStrategy.Interface.BUSINESS_LOCAL);
-            bindings.put(externalName, new EJB(deployment, businessLocal));
+            for (Map.Entry<String, String> entry : strategy.getNames(businessLocal, Interface.BUSINESS_LOCAL).entrySet()) {
+                bindings.put(entry.getValue(), new EJB(deployment, businessLocal));
+            }
         }
 
         for (Class businessRemote : deployment.getBusinessRemoteInterfaces()) {
-            String externalName = strategy.getName(businessRemote, JndiNameStrategy.Interface.BUSINESS_REMOTE);
-            bindings.put(externalName, new EJB(deployment, businessRemote));
+            for (Map.Entry<String, String> entry : strategy.getNames(businessRemote, Interface.BUSINESS_REMOTE).entrySet()) {
+                bindings.put(entry.getValue(), new EJB(deployment, businessRemote));
+            }
         }
 
 //        if (MessageListener.class.equals(deployment.getMdbInterface())) {

Modified: openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java?rev=1137242&r1=1137241&r2=1137242&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java (original)
+++ openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java Sat Jun 18 20:15:29 2011
@@ -20,7 +20,7 @@ package org.apache.openejb.spring;
 import javax.ejb.EJB;
 
 public class EchoReverseBean {
-    @EJB
+    @EJB(name = "EchoBeanLocal")
     public Echo echo;
 
     public Echo getEcho() {



Re: svn commit: r1137242 - in /openejb/trunk/openejb3/container: openejb-core/src/main/java/org/apache/openejb/assembler/classic/ openejb-spring/src/main/java/org/apache/openejb/spring/ openejb-spring/src/test/java/org/apache/openejb/spring/

Posted by Romain Manni-Bucau <rm...@gmail.com>.
That's what i saw but i wonder how you can have a non default map. Normally
i fixed it in openejb (i hope i didnt forget a line) that's whu i asked if
geronimo was using the method directly.

- Romain

Le 20 juin 2011 03:50, "Shawn Jiang" <ge...@gmail.com> a écrit :
> Our tck automation is blocked so that I just added a quick fix to refactor
> the code logic to make geronimo pass.
>
> I have not looked into the root cause. The failure scenario in geronimo
> is like this:
>
> 1, Get a non default Map<string, StringTemplate> from templates.
> 2, The non default Map<string,StringTemplate> does not have a "default"
> key.
> 3, This will result in NPE.
>
> On Mon, Jun 20, 2011 at 12:55 AM, Romain Manni-Bucau
> <rm...@gmail.com>wrote:
>
>> Hi Shawn,
>>
>> with tests i was never in the case you fixed so for me it changes nothing
>> but it means my fix was not really good, did you check why it was not
>> working?
>>
>> Is geronimo useing these API?
>>
>> - Romain
>>
>> 2011/6/19 Shawn Jiang <ge...@gmail.com>
>>
>> > Hi Romain,
>> >
>> > This revision blocked geronimo server from starting.
>> >
>> > I commited a quick fix with r1137371. Please take a look to see if my
>> > fix
>> > has any impact to you.
>> >
>> > On Sun, Jun 19, 2011 at 4:15 AM, <rm...@apache.org> wrote:
>> >
>> > > Author: rmannibucau
>> > > Date: Sat Jun 18 20:15:29 2011
>> > > New Revision: 1137242
>> > >
>> > > URL: http://svn.apache.org/viewvc?rev=1137242&view=rev
>> > > Log:
>> > > adding a key by template strategy to avoid to loose template (useful
>> for
>> > > spring for example)
>> > >
>> > > Modified:
>> > >
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
>> > >
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
>> > >
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
>> > >
>> > > Modified:
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
>> > > URL:
>> > >
>> >
>>
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=1137242&r1=1137241&r2=1137242&view=diff
>> > >
>> > >
>> >
>>
==============================================================================
>> > > ---
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
>> > > (original)
>> > > +++
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
>> > > Sat Jun 18 20:15:29 2011
>> > > @@ -18,6 +18,7 @@ package org.apache.openejb.assembler.cla
>> > >
>> > > import static org.apache.openejb.util.Classes.packageName;
>> > >
>> > > +import java.util.TreeMap;
>> > > import javax.ejb.embeddable.EJBContainer;
>> > > import javax.naming.NamingException;
>> > > import javax.naming.Reference;
>> > > @@ -56,6 +57,7 @@ import java.lang.reflect.Constructor;
>> > > */
>> > > public class JndiBuilder {
>> > >
>> > > + public static final String DEFAULT_NAME_KEY = "default";
>> > >
>> > > final boolean embeddedEjbContainerApi;
>> > >
>> > > @@ -165,7 +167,8 @@ public class JndiBuilder {
>> > >
>> > > public void begin(BeanContext beanContext);
>> > >
>> > > - public String getName(Class interfce, Interface type);
>> > > + public String getName(Class interfce, String key, Interface
>> > type);
>> > > + public Map<String, String> getNames(Class interfce, Interface
>> > > type);
>> > >
>> > > public void end();
>> > > }
>> > > @@ -174,6 +177,7 @@ public class JndiBuilder {
>> > >
>> > > public static class TemplatedStrategy implements JndiNameStrategy {
>> > > private static final String JNDINAME_FORMAT =
>> > > "openejb.jndiname.format";
>> > > + private static final String KEYS = "default,local,global,app";
>> > > private org.apache.openejb.util.StringTemplate template;
>> > > private HashMap<String, EnterpriseBeanInfo> beanInfos;
>> > >
>> > > @@ -181,7 +185,7 @@ public class JndiBuilder {
>> > > private BeanContext bean;
>> > >
>> > > // Set in begin()
>> > > - private Map<String, StringTemplate> templates;
>> > > + private HashMap<String, Map<String, StringTemplate>>
>> templates;
>> > >
>> > > private String format;
>> > > private Map<String, String> appContext;
>> > > @@ -234,18 +238,27 @@ public class JndiBuilder {
>> > > }
>> > > }
>> > >
>> > > + private Map<String, StringTemplate> addTemplate(Map<String,
>> > > StringTemplate> map, String key, StringTemplate template) {
>> > > + Map<String, StringTemplate> m = map;
>> > > + if (m == null) {
>> > > + m = new TreeMap<String, StringTemplate> ();
>> > > + }
>> > > + m.put(key, template);
>> > > + return m;
>> > > + }
>> > > +
>> > > public void begin(BeanContext bean) {
>> > > this.bean = bean;
>> > >
>> > > EnterpriseBeanInfo beanInfo =
>> > > beanInfos.get(bean.getDeploymentID());
>> > >
>> > > - templates = new HashMap<String, StringTemplate>();
>> > > - templates.put("", template);
>> > > + templates = new HashMap<String, Map<String,
>> > > StringTemplate>>();
>> > > + templates.put("", addTemplate(null, "default", template));
>> > >
>> > > for (JndiNameInfo nameInfo : beanInfo.jndiNamess) {
>> > > String intrface = nameInfo.intrface;
>> > > if (intrface == null) intrface = "";
>> > > - templates.put(intrface, new
>> > > StringTemplate(nameInfo.name));
>> > > + templates.put(intrface,
>> > > addTemplate(templates.get(intrface), getType(nameInfo.name), new
>> > > StringTemplate(nameInfo.name)));
>> > > }
>> > > beanInfo.jndiNames.clear();
>> > > beanInfo.jndiNamess.clear();
>> > > @@ -260,11 +273,23 @@ public class JndiBuilder {
>> > > this.beanContext.put("deploymentId",
>> > > bean.getDeploymentID().toString());
>> > > }
>> > >
>> > > + private static String getType(String name) {
>> > > + int start = 0;
>> > > + if (name.charAt(0) == '/') {
>> > > + start = 1;
>> > > + }
>> > > + int end = name.substring(start).indexOf('/');
>> > > + if (end < 0) {
>> > > + return DEFAULT_NAME_KEY;
>> > > + }
>> > > + return name.substring(start, end);
>> > > + }
>> > > +
>> > > public void end() {
>> > > }
>> > >
>> > > - public String getName(Class interfce, Interface type) {
>> > > - StringTemplate template =
>> templates.get(interfce.getName());
>> > > + public String getName(Class interfce, String key, Interface
>> > type)
>> > > {
>> > > + Map<String, StringTemplate> template =
>> > > templates.get(interfce.getName());
>> > > if (template == null) template =
>> > > templates.get(type.getAnnotationName());
>> > > if (template == null) template = templates.get("");
>> > >
>> > > @@ -279,7 +304,18 @@ public class JndiBuilder {
>> > > contextData.put("interfaceClass.simpleName",
>> > > interfce.getSimpleName());
>> > > contextData.put("interfaceClass.packageName",
>> > > packageName(interfce));
>> > >
>> > > - return template.apply(contextData);
>> > > + if (template.containsKey(key)) {
>> > > + return template.get(key).apply(contextData);
>> > > + }
>> > > + return template.get(DEFAULT_NAME_KEY).apply(contextData);
>> > > + }
>> > > +
>> > > + @Override public Map<String, String> getNames(Class interfce,
>> > > Interface type) {
>> > > + Map<String, String> names = new HashMap<String, String>();
>> > > + for (String key : KEYS.split(",")) {
>> > > + names.put(key, getName(interfce, key, type));
>> > > + }
>> > > + return names;
>> > > }
>> > > }
>> > >
>> > > @@ -293,7 +329,7 @@ public class JndiBuilder {
>> > > public void end() {
>> > > }
>> > >
>> > > - public String getName(Class interfce, Interface type) {
>> > > + public String getName(Class interfce, String key, Interface
>> > type)
>> > > {
>> > > String id = beanContext.getDeploymentID() + "";
>> > > if (id.charAt(0) == '/') {
>> > > id = id.substring(1);
>> > > @@ -311,6 +347,12 @@ public class JndiBuilder {
>> > > }
>> > > return id;
>> > > }
>> > > +
>> > > + @Override public Map<String, String> getNames(Class interfce,
>> > > Interface type) {
>> > > + Map<String, String> names = new HashMap<String, String>();
>> > > + names.put("", getName(interfce, DEFAULT_NAME_KEY, type));
>> > > + return names;
>> > > + }
>> > > }
>> > >
>> > > public void bind(EjbJarInfo ejbJarInfo, BeanContext bean,
>> > > EnterpriseBeanInfo beanInfo, JndiNameStrategy strategy) {
>> > > @@ -350,7 +392,7 @@ public class JndiBuilder {
>> > > String internalName = "openejb/Deployment/" +
>> > > format(bean.getDeploymentID(), beanClass.getName(),
>> > > InterfaceType.BUSINESS_LOCALBEAN_HOME);
>> > > bind(internalName, ref, bindings, beanInfo, beanClass);
>> > >
>> > > - String name = strategy.getName(beanClass,
>> > > JndiNameStrategy.Interface.LOCALBEAN);
>> > > + String name = strategy.getName(beanClass,
>> > > DEFAULT_NAME_KEY, JndiNameStrategy.Interface.LOCALBEAN);
>> > > bind("openejb/local/" + name, ref, bindings, beanInfo,
>> > > beanClass);
>> > > bindJava(bean, beanClass, ref, bindings, beanInfo);
>> > >
>> > > @@ -375,7 +417,7 @@ public class JndiBuilder {
>> > > String internalName = "openejb/Deployment/" +
>> > > format(bean.getDeploymentID(), interfce.getName(),
>> > > InterfaceType.BUSINESS_LOCAL);
>> > > bind(internalName, ref, bindings, beanInfo, interfce);
>> > >
>> > > - String externalName = "openejb/local/" +
>> > > strategy.getName(interfce,
JndiNameStrategy.Interface.BUSINESS_LOCAL);
>> > > + String externalName = "openejb/local/" +
>> > > strategy.getName(interfce, DEFAULT_NAME_KEY,
>> > > JndiNameStrategy.Interface.BUSINESS_LOCAL);
>> > > bind(externalName, ref, bindings, beanInfo, interfce);
>> > > bindJava(bean, interfce, ref, bindings, beanInfo);
>> > >
>> > > @@ -401,7 +443,7 @@ public class JndiBuilder {
>> > > String internalName = "openejb/Deployment/" +
>> > > format(bean.getDeploymentID(), interfce.getName(),
>> > > InterfaceType.BUSINESS_REMOTE);
>> > > bind(internalName, ref, bindings, beanInfo, interfce);
>> > >
>> > > - String name = strategy.getName(interfce,
>> > > JndiNameStrategy.Interface.BUSINESS_REMOTE);
>> > > + String name = strategy.getName(interfce,
>> > DEFAULT_NAME_KEY,
>> > > JndiNameStrategy.Interface.BUSINESS_REMOTE);
>> > > bind("openejb/local/" + name, ref, bindings, beanInfo,
>> > > interfce);
>> > > bind("openejb/remote/" + name, ref, bindings, beanInfo,
>> > > interfce);
>> > > bindJava(bean, interfce, ref, bindings, beanInfo);
>> > > @@ -418,7 +460,7 @@ public class JndiBuilder {
>> > >
>> > > ObjectReference ref = new
>> > > ObjectReference(bean.getEJBLocalHome());
>> > >
>> > > - String name =
>> > > strategy.getName(bean.getLocalHomeInterface(),
>> > > JndiNameStrategy.Interface.LOCAL_HOME);
>> > > + String name =
>> > > strategy.getName(bean.getLocalHomeInterface(), DEFAULT_NAME_KEY,
>> > > JndiNameStrategy.Interface.LOCAL_HOME);
>> > > bind("openejb/local/" + name, ref, bindings, beanInfo,
>> > > localHomeInterface);
>> > >
>> > > optionalBind(bindings, ref, "openejb/Deployment/" +
>> > > format(bean.getDeploymentID(), localHomeInterface.getName(),
>> > > InterfaceType.EJB_LOCAL_HOME));
>> > > @@ -442,7 +484,7 @@ public class JndiBuilder {
>> > >
>> > > ObjectReference ref = new
>> > > ObjectReference(bean.getEJBHome());
>> > >
>> > > - String name = strategy.getName(homeInterface,
>> > > JndiNameStrategy.Interface.REMOTE_HOME);
>> > > + String name = strategy.getName(homeInterface,
>> > > DEFAULT_NAME_KEY, JndiNameStrategy.Interface.REMOTE_HOME);
>> > > bind("openejb/local/" + name, ref, bindings, beanInfo,
>> > > homeInterface);
>> > > bind("openejb/remote/" + name, ref, bindings, beanInfo,
>> > > homeInterface);
>> > >
>> > >
>> > > Modified:
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
>> > > URL:
>> > >
>> >
>>
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java?rev=1137242&r1=1137241&r2=1137242&view=diff
>> > >
>> > >
>> >
>>
==============================================================================
>> > > ---
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
>> > > (original)
>> > > +++
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
>> > > Sat Jun 18 20:15:29 2011
>> > > @@ -36,6 +36,7 @@ import org.apache.openejb.assembler.clas
>> > > import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
>> > > import org.apache.openejb.assembler.classic.JndiBuilder;
>> > > import
>> > org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy;
>> > > +import
>> > >
>> >
>>
org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy.Interface;
>> > > import org.apache.openejb.loader.SystemInstance;
>> > > import org.apache.openejb.util.LogCategory;
>> > > import org.apache.openejb.util.Logger;
>> > > @@ -120,7 +121,7 @@ public abstract class AbstractApplicatio
>> > > if
>> > (!applicationContext.containsBean(beanName))
>> > > {
>> > > EJB ejb = entry.getValue();
>> > >
>> > > applicationContext.getBeanFactory().registerSingleton(beanName, ejb);
>> > > - logger.info("Exported EJB " +
>> > > deployment.getEjbName() + " with interface " +
>> > > entry.getValue().getInterface().getName() + " to Spring bean " +
>> > > entry.getKey());
>> > > + logger.info("Exported EJB " +
>> > > deployment.getEjbName() + " with interface " +
>> > ejb.getInterface().getName()
>> > > + " to Spring bean " + entry.getKey());
>> > > }
>> > > }
>> > > }
>> > > @@ -142,25 +143,29 @@ public abstract class AbstractApplicatio
>> > >
>> > > Class remoteHome = deployment.getHomeInterface();
>> > > if (remoteHome != null) {
>> > > - String externalName = strategy.getName(remoteHome,
>> > > JndiNameStrategy.Interface.REMOTE_HOME);
>> > > - bindings.put(externalName, new EJB(deployment,
>> remoteHome));
>> > > + for (Map.Entry<String, String> entry :
>> > > strategy.getNames(remoteHome,
>> > > JndiNameStrategy.Interface.REMOTE_HOME).entrySet()) {
>> > > + bindings.put(entry.getValue(), new EJB(deployment,
>> > > remoteHome));
>> > > + }
>> > > }
>> > >
>> > >
>> > > Class localHome = deployment.getLocalHomeInterface();
>> > > if (localHome != null) {
>> > > - String externalName = strategy.getName(localHome,
>> > > JndiNameStrategy.Interface.LOCAL_HOME);
>> > > - bindings.put(externalName, new EJB(deployment,
>> remoteHome));
>> > > + for (Map.Entry<String, String> entry :
>> > > strategy.getNames(localHome, Interface.LOCAL_HOME).entrySet()) {
>> > > + bindings.put(entry.getValue(), new EJB(deployment,
>> > > localHome));
>> > > + }
>> > > }
>> > >
>> > > for (Class businessLocal :
>> > deployment.getBusinessLocalInterfaces())
>> > > {
>> > > - String externalName = strategy.getName(businessLocal,
>> > > JndiNameStrategy.Interface.BUSINESS_LOCAL);
>> > > - bindings.put(externalName, new EJB(deployment,
>> > > businessLocal));
>> > > + for (Map.Entry<String, String> entry :
>> > > strategy.getNames(businessLocal,
Interface.BUSINESS_LOCAL).entrySet())
>> {
>> > > + bindings.put(entry.getValue(), new EJB(deployment,
>> > > businessLocal));
>> > > + }
>> > > }
>> > >
>> > > for (Class businessRemote :
>> > > deployment.getBusinessRemoteInterfaces()) {
>> > > - String externalName = strategy.getName(businessRemote,
>> > > JndiNameStrategy.Interface.BUSINESS_REMOTE);
>> > > - bindings.put(externalName, new EJB(deployment,
>> > > businessRemote));
>> > > + for (Map.Entry<String, String> entry :
>> > > strategy.getNames(businessRemote,
>> Interface.BUSINESS_REMOTE).entrySet())
>> > {
>> > > + bindings.put(entry.getValue(), new EJB(deployment,
>> > > businessRemote));
>> > > + }
>> > > }
>> > >
>> > > // if
>> > (MessageListener.class.equals(deployment.getMdbInterface()))
>> > > {
>> > >
>> > > Modified:
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
>> > > URL:
>> > >
>> >
>>
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java?rev=1137242&r1=1137241&r2=1137242&view=diff
>> > >
>> > >
>> >
>>
==============================================================================
>> > > ---
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
>> > > (original)
>> > > +++
>> > >
>> >
>>
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
>> > > Sat Jun 18 20:15:29 2011
>> > > @@ -20,7 +20,7 @@ package org.apache.openejb.spring;
>> > > import javax.ejb.EJB;
>> > >
>> > > public class EchoReverseBean {
>> > > - @EJB
>> > > + @EJB(name = "EchoBeanLocal")
>> > > public Echo echo;
>> > >
>> > > public Echo getEcho() {
>> > >
>> > >
>> > >
>> >
>> >
>> > --
>> > Shawn
>> >
>>
>
>
>
> --
> Shawn

Re: svn commit: r1137242 - in /openejb/trunk/openejb3/container: openejb-core/src/main/java/org/apache/openejb/assembler/classic/ openejb-spring/src/main/java/org/apache/openejb/spring/ openejb-spring/src/test/java/org/apache/openejb/spring/

Posted by Shawn Jiang <ge...@gmail.com>.
Our tck automation is blocked so that I just added a quick fix to  refactor
the code logic to make geronimo pass.

I have not looked into the root cause.     The failure scenario in geronimo
is like this:

1,   Get a non default Map<string, StringTemplate>  from templates.
2,   The non default Map<string,StringTemplate> does not have a "default"
key.
3,   This will result in NPE.

On Mon, Jun 20, 2011 at 12:55 AM, Romain Manni-Bucau
<rm...@gmail.com>wrote:

> Hi Shawn,
>
> with tests i was never in the case you fixed so for me it changes nothing
> but it means my fix was not really good, did you check why it was not
> working?
>
> Is geronimo useing these API?
>
> - Romain
>
> 2011/6/19 Shawn Jiang <ge...@gmail.com>
>
> > Hi Romain,
> >
> > This revision blocked geronimo server from starting.
> >
> > I commited a quick fix with r1137371.    Please take a look to see if my
> > fix
> > has any impact to you.
> >
> > On Sun, Jun 19, 2011 at 4:15 AM, <rm...@apache.org> wrote:
> >
> > > Author: rmannibucau
> > > Date: Sat Jun 18 20:15:29 2011
> > > New Revision: 1137242
> > >
> > > URL: http://svn.apache.org/viewvc?rev=1137242&view=rev
> > > Log:
> > > adding a key by template strategy to avoid to loose template (useful
> for
> > > spring for example)
> > >
> > > Modified:
> > >
> > >
> >
>  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> > >
> > >
> >
>  openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> > >
> > >
> >
>  openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> > >
> > > Modified:
> > >
> >
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=1137242&r1=1137241&r2=1137242&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> > > (original)
> > > +++
> > >
> >
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> > > Sat Jun 18 20:15:29 2011
> > > @@ -18,6 +18,7 @@ package org.apache.openejb.assembler.cla
> > >
> > >  import static org.apache.openejb.util.Classes.packageName;
> > >
> > > +import java.util.TreeMap;
> > >  import javax.ejb.embeddable.EJBContainer;
> > >  import javax.naming.NamingException;
> > >  import javax.naming.Reference;
> > > @@ -56,6 +57,7 @@ import java.lang.reflect.Constructor;
> > >  */
> > >  public class JndiBuilder {
> > >
> > > +    public static final String DEFAULT_NAME_KEY = "default";
> > >
> > >     final boolean embeddedEjbContainerApi;
> > >
> > > @@ -165,7 +167,8 @@ public class JndiBuilder {
> > >
> > >         public void begin(BeanContext beanContext);
> > >
> > > -        public String getName(Class interfce, Interface type);
> > > +        public String getName(Class interfce, String key, Interface
> > type);
> > > +        public Map<String, String> getNames(Class interfce, Interface
> > > type);
> > >
> > >         public void end();
> > >     }
> > > @@ -174,6 +177,7 @@ public class JndiBuilder {
> > >
> > >     public static class TemplatedStrategy implements JndiNameStrategy {
> > >         private static final String JNDINAME_FORMAT =
> > > "openejb.jndiname.format";
> > > +        private static final String KEYS = "default,local,global,app";
> > >         private org.apache.openejb.util.StringTemplate template;
> > >         private HashMap<String, EnterpriseBeanInfo> beanInfos;
> > >
> > > @@ -181,7 +185,7 @@ public class JndiBuilder {
> > >         private BeanContext bean;
> > >
> > >         // Set in begin()
> > > -        private Map<String, StringTemplate> templates;
> > > +        private HashMap<String, Map<String, StringTemplate>>
> templates;
> > >
> > >         private String format;
> > >         private Map<String, String> appContext;
> > > @@ -234,18 +238,27 @@ public class JndiBuilder {
> > >             }
> > >         }
> > >
> > > +        private Map<String, StringTemplate> addTemplate(Map<String,
> > > StringTemplate> map, String key, StringTemplate template) {
> > > +            Map<String, StringTemplate> m = map;
> > > +            if (m == null) {
> > > +                m = new TreeMap<String, StringTemplate> ();
> > > +            }
> > > +            m.put(key, template);
> > > +            return m;
> > > +        }
> > > +
> > >         public void begin(BeanContext bean) {
> > >             this.bean = bean;
> > >
> > >             EnterpriseBeanInfo beanInfo =
> > > beanInfos.get(bean.getDeploymentID());
> > >
> > > -            templates = new HashMap<String, StringTemplate>();
> > > -            templates.put("", template);
> > > +            templates = new HashMap<String, Map<String,
> > > StringTemplate>>();
> > > +            templates.put("", addTemplate(null, "default", template));
> > >
> > >             for (JndiNameInfo nameInfo : beanInfo.jndiNamess) {
> > >                 String intrface = nameInfo.intrface;
> > >                 if (intrface == null) intrface = "";
> > > -                templates.put(intrface, new
> > > StringTemplate(nameInfo.name));
> > > +                templates.put(intrface,
> > > addTemplate(templates.get(intrface), getType(nameInfo.name), new
> > > StringTemplate(nameInfo.name)));
> > >             }
> > >             beanInfo.jndiNames.clear();
> > >             beanInfo.jndiNamess.clear();
> > > @@ -260,11 +273,23 @@ public class JndiBuilder {
> > >             this.beanContext.put("deploymentId",
> > > bean.getDeploymentID().toString());
> > >         }
> > >
> > > +        private static String getType(String name) {
> > > +            int start = 0;
> > > +            if (name.charAt(0) == '/') {
> > > +                start = 1;
> > > +            }
> > > +            int end = name.substring(start).indexOf('/');
> > > +            if (end < 0) {
> > > +                return DEFAULT_NAME_KEY;
> > > +            }
> > > +            return name.substring(start, end);
> > > +        }
> > > +
> > >         public void end() {
> > >         }
> > >
> > > -        public String getName(Class interfce, Interface type) {
> > > -            StringTemplate template =
> templates.get(interfce.getName());
> > > +        public String getName(Class interfce, String key, Interface
> > type)
> > > {
> > > +            Map<String, StringTemplate> template =
> > > templates.get(interfce.getName());
> > >             if (template == null) template =
> > > templates.get(type.getAnnotationName());
> > >             if (template == null) template = templates.get("");
> > >
> > > @@ -279,7 +304,18 @@ public class JndiBuilder {
> > >             contextData.put("interfaceClass.simpleName",
> > > interfce.getSimpleName());
> > >             contextData.put("interfaceClass.packageName",
> > > packageName(interfce));
> > >
> > > -            return template.apply(contextData);
> > > +            if (template.containsKey(key)) {
> > > +                return template.get(key).apply(contextData);
> > > +            }
> > > +            return template.get(DEFAULT_NAME_KEY).apply(contextData);
> > > +        }
> > > +
> > > +        @Override public Map<String, String> getNames(Class interfce,
> > > Interface type) {
> > > +            Map<String, String> names = new HashMap<String, String>();
> > > +            for (String key : KEYS.split(",")) {
> > > +                names.put(key, getName(interfce, key, type));
> > > +            }
> > > +            return names;
> > >         }
> > >     }
> > >
> > > @@ -293,7 +329,7 @@ public class JndiBuilder {
> > >         public void end() {
> > >         }
> > >
> > > -        public String getName(Class interfce, Interface type) {
> > > +        public String getName(Class interfce, String key, Interface
> > type)
> > > {
> > >             String id = beanContext.getDeploymentID() + "";
> > >             if (id.charAt(0) == '/') {
> > >                 id = id.substring(1);
> > > @@ -311,6 +347,12 @@ public class JndiBuilder {
> > >             }
> > >             return id;
> > >         }
> > > +
> > > +        @Override public Map<String, String> getNames(Class interfce,
> > > Interface type) {
> > > +            Map<String, String> names = new HashMap<String, String>();
> > > +            names.put("", getName(interfce, DEFAULT_NAME_KEY, type));
> > > +            return names;
> > > +        }
> > >     }
> > >
> > >     public void bind(EjbJarInfo ejbJarInfo, BeanContext bean,
> > > EnterpriseBeanInfo beanInfo, JndiNameStrategy strategy) {
> > > @@ -350,7 +392,7 @@ public class JndiBuilder {
> > >                 String internalName = "openejb/Deployment/" +
> > > format(bean.getDeploymentID(), beanClass.getName(),
> > > InterfaceType.BUSINESS_LOCALBEAN_HOME);
> > >                 bind(internalName, ref, bindings, beanInfo, beanClass);
> > >
> > > -                String name = strategy.getName(beanClass,
> > > JndiNameStrategy.Interface.LOCALBEAN);
> > > +                String name = strategy.getName(beanClass,
> > > DEFAULT_NAME_KEY, JndiNameStrategy.Interface.LOCALBEAN);
> > >                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> > > beanClass);
> > >                 bindJava(bean, beanClass, ref, bindings, beanInfo);
> > >
> > > @@ -375,7 +417,7 @@ public class JndiBuilder {
> > >                 String internalName = "openejb/Deployment/" +
> > > format(bean.getDeploymentID(), interfce.getName(),
> > > InterfaceType.BUSINESS_LOCAL);
> > >                 bind(internalName, ref, bindings, beanInfo, interfce);
> > >
> > > -                String externalName = "openejb/local/" +
> > > strategy.getName(interfce, JndiNameStrategy.Interface.BUSINESS_LOCAL);
> > > +                String externalName = "openejb/local/" +
> > > strategy.getName(interfce, DEFAULT_NAME_KEY,
> > > JndiNameStrategy.Interface.BUSINESS_LOCAL);
> > >                 bind(externalName, ref, bindings, beanInfo, interfce);
> > >                 bindJava(bean, interfce, ref, bindings, beanInfo);
> > >
> > > @@ -401,7 +443,7 @@ public class JndiBuilder {
> > >                 String internalName = "openejb/Deployment/" +
> > > format(bean.getDeploymentID(), interfce.getName(),
> > > InterfaceType.BUSINESS_REMOTE);
> > >                 bind(internalName, ref, bindings, beanInfo, interfce);
> > >
> > > -                String name = strategy.getName(interfce,
> > > JndiNameStrategy.Interface.BUSINESS_REMOTE);
> > > +                String name = strategy.getName(interfce,
> > DEFAULT_NAME_KEY,
> > > JndiNameStrategy.Interface.BUSINESS_REMOTE);
> > >                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> > > interfce);
> > >                 bind("openejb/remote/" + name, ref, bindings, beanInfo,
> > > interfce);
> > >                 bindJava(bean, interfce, ref, bindings, beanInfo);
> > > @@ -418,7 +460,7 @@ public class JndiBuilder {
> > >
> > >                 ObjectReference ref = new
> > > ObjectReference(bean.getEJBLocalHome());
> > >
> > > -                String name =
> > > strategy.getName(bean.getLocalHomeInterface(),
> > > JndiNameStrategy.Interface.LOCAL_HOME);
> > > +                String name =
> > > strategy.getName(bean.getLocalHomeInterface(), DEFAULT_NAME_KEY,
> > > JndiNameStrategy.Interface.LOCAL_HOME);
> > >                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> > > localHomeInterface);
> > >
> > >                 optionalBind(bindings, ref, "openejb/Deployment/" +
> > > format(bean.getDeploymentID(), localHomeInterface.getName(),
> > > InterfaceType.EJB_LOCAL_HOME));
> > > @@ -442,7 +484,7 @@ public class JndiBuilder {
> > >
> > >                 ObjectReference ref = new
> > > ObjectReference(bean.getEJBHome());
> > >
> > > -                String name = strategy.getName(homeInterface,
> > > JndiNameStrategy.Interface.REMOTE_HOME);
> > > +                String name = strategy.getName(homeInterface,
> > > DEFAULT_NAME_KEY, JndiNameStrategy.Interface.REMOTE_HOME);
> > >                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> > > homeInterface);
> > >                 bind("openejb/remote/" + name, ref, bindings, beanInfo,
> > > homeInterface);
> > >
> > >
> > > Modified:
> > >
> >
> openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java?rev=1137242&r1=1137241&r2=1137242&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> > > (original)
> > > +++
> > >
> >
> openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> > > Sat Jun 18 20:15:29 2011
> > > @@ -36,6 +36,7 @@ import org.apache.openejb.assembler.clas
> > >  import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
> > >  import org.apache.openejb.assembler.classic.JndiBuilder;
> > >  import
> > org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy;
> > > +import
> > >
> >
> org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy.Interface;
> > >  import org.apache.openejb.loader.SystemInstance;
> > >  import org.apache.openejb.util.LogCategory;
> > >  import org.apache.openejb.util.Logger;
> > > @@ -120,7 +121,7 @@ public abstract class AbstractApplicatio
> > >                             if
> > (!applicationContext.containsBean(beanName))
> > > {
> > >                                 EJB ejb = entry.getValue();
> > >
> > > applicationContext.getBeanFactory().registerSingleton(beanName, ejb);
> > > -                                logger.info("Exported EJB " +
> > > deployment.getEjbName() + " with interface " +
> > > entry.getValue().getInterface().getName() + " to Spring bean " +
> > > entry.getKey());
> > > +                                logger.info("Exported EJB " +
> > > deployment.getEjbName() + " with interface " +
> > ejb.getInterface().getName()
> > > + " to Spring bean " + entry.getKey());
> > >                             }
> > >                         }
> > >                     }
> > > @@ -142,25 +143,29 @@ public abstract class AbstractApplicatio
> > >
> > >         Class remoteHome = deployment.getHomeInterface();
> > >         if (remoteHome != null) {
> > > -            String externalName = strategy.getName(remoteHome,
> > > JndiNameStrategy.Interface.REMOTE_HOME);
> > > -            bindings.put(externalName, new EJB(deployment,
> remoteHome));
> > > +            for (Map.Entry<String, String> entry :
> > > strategy.getNames(remoteHome,
> > > JndiNameStrategy.Interface.REMOTE_HOME).entrySet()) {
> > > +                bindings.put(entry.getValue(), new EJB(deployment,
> > > remoteHome));
> > > +            }
> > >         }
> > >
> > >
> > >         Class localHome = deployment.getLocalHomeInterface();
> > >         if (localHome != null) {
> > > -            String externalName = strategy.getName(localHome,
> > > JndiNameStrategy.Interface.LOCAL_HOME);
> > > -            bindings.put(externalName, new EJB(deployment,
> remoteHome));
> > > +            for (Map.Entry<String, String> entry :
> > > strategy.getNames(localHome, Interface.LOCAL_HOME).entrySet()) {
> > > +                bindings.put(entry.getValue(), new EJB(deployment,
> > > localHome));
> > > +            }
> > >         }
> > >
> > >         for (Class businessLocal :
> > deployment.getBusinessLocalInterfaces())
> > > {
> > > -            String externalName = strategy.getName(businessLocal,
> > > JndiNameStrategy.Interface.BUSINESS_LOCAL);
> > > -            bindings.put(externalName, new EJB(deployment,
> > > businessLocal));
> > > +            for (Map.Entry<String, String> entry :
> > > strategy.getNames(businessLocal, Interface.BUSINESS_LOCAL).entrySet())
> {
> > > +                bindings.put(entry.getValue(), new EJB(deployment,
> > > businessLocal));
> > > +            }
> > >         }
> > >
> > >         for (Class businessRemote :
> > > deployment.getBusinessRemoteInterfaces()) {
> > > -            String externalName = strategy.getName(businessRemote,
> > > JndiNameStrategy.Interface.BUSINESS_REMOTE);
> > > -            bindings.put(externalName, new EJB(deployment,
> > > businessRemote));
> > > +            for (Map.Entry<String, String> entry :
> > > strategy.getNames(businessRemote,
> Interface.BUSINESS_REMOTE).entrySet())
> > {
> > > +                bindings.put(entry.getValue(), new EJB(deployment,
> > > businessRemote));
> > > +            }
> > >         }
> > >
> > >  //        if
> > (MessageListener.class.equals(deployment.getMdbInterface()))
> > > {
> > >
> > > Modified:
> > >
> >
> openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java?rev=1137242&r1=1137241&r2=1137242&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> > > (original)
> > > +++
> > >
> >
> openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> > > Sat Jun 18 20:15:29 2011
> > > @@ -20,7 +20,7 @@ package org.apache.openejb.spring;
> > >  import javax.ejb.EJB;
> > >
> > >  public class EchoReverseBean {
> > > -    @EJB
> > > +    @EJB(name = "EchoBeanLocal")
> > >     public Echo echo;
> > >
> > >     public Echo getEcho() {
> > >
> > >
> > >
> >
> >
> > --
> > Shawn
> >
>



-- 
Shawn

Re: svn commit: r1137242 - in /openejb/trunk/openejb3/container: openejb-core/src/main/java/org/apache/openejb/assembler/classic/ openejb-spring/src/main/java/org/apache/openejb/spring/ openejb-spring/src/test/java/org/apache/openejb/spring/

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi Shawn,

with tests i was never in the case you fixed so for me it changes nothing
but it means my fix was not really good, did you check why it was not
working?

Is geronimo useing these API?

- Romain

2011/6/19 Shawn Jiang <ge...@gmail.com>

> Hi Romain,
>
> This revision blocked geronimo server from starting.
>
> I commited a quick fix with r1137371.    Please take a look to see if my
> fix
> has any impact to you.
>
> On Sun, Jun 19, 2011 at 4:15 AM, <rm...@apache.org> wrote:
>
> > Author: rmannibucau
> > Date: Sat Jun 18 20:15:29 2011
> > New Revision: 1137242
> >
> > URL: http://svn.apache.org/viewvc?rev=1137242&view=rev
> > Log:
> > adding a key by template strategy to avoid to loose template (useful for
> > spring for example)
> >
> > Modified:
> >
> >
>  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> >
> >
>  openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> >
> >
>  openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> >
> > Modified:
> >
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> > URL:
> >
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=1137242&r1=1137241&r2=1137242&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> > (original)
> > +++
> >
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> > Sat Jun 18 20:15:29 2011
> > @@ -18,6 +18,7 @@ package org.apache.openejb.assembler.cla
> >
> >  import static org.apache.openejb.util.Classes.packageName;
> >
> > +import java.util.TreeMap;
> >  import javax.ejb.embeddable.EJBContainer;
> >  import javax.naming.NamingException;
> >  import javax.naming.Reference;
> > @@ -56,6 +57,7 @@ import java.lang.reflect.Constructor;
> >  */
> >  public class JndiBuilder {
> >
> > +    public static final String DEFAULT_NAME_KEY = "default";
> >
> >     final boolean embeddedEjbContainerApi;
> >
> > @@ -165,7 +167,8 @@ public class JndiBuilder {
> >
> >         public void begin(BeanContext beanContext);
> >
> > -        public String getName(Class interfce, Interface type);
> > +        public String getName(Class interfce, String key, Interface
> type);
> > +        public Map<String, String> getNames(Class interfce, Interface
> > type);
> >
> >         public void end();
> >     }
> > @@ -174,6 +177,7 @@ public class JndiBuilder {
> >
> >     public static class TemplatedStrategy implements JndiNameStrategy {
> >         private static final String JNDINAME_FORMAT =
> > "openejb.jndiname.format";
> > +        private static final String KEYS = "default,local,global,app";
> >         private org.apache.openejb.util.StringTemplate template;
> >         private HashMap<String, EnterpriseBeanInfo> beanInfos;
> >
> > @@ -181,7 +185,7 @@ public class JndiBuilder {
> >         private BeanContext bean;
> >
> >         // Set in begin()
> > -        private Map<String, StringTemplate> templates;
> > +        private HashMap<String, Map<String, StringTemplate>> templates;
> >
> >         private String format;
> >         private Map<String, String> appContext;
> > @@ -234,18 +238,27 @@ public class JndiBuilder {
> >             }
> >         }
> >
> > +        private Map<String, StringTemplate> addTemplate(Map<String,
> > StringTemplate> map, String key, StringTemplate template) {
> > +            Map<String, StringTemplate> m = map;
> > +            if (m == null) {
> > +                m = new TreeMap<String, StringTemplate> ();
> > +            }
> > +            m.put(key, template);
> > +            return m;
> > +        }
> > +
> >         public void begin(BeanContext bean) {
> >             this.bean = bean;
> >
> >             EnterpriseBeanInfo beanInfo =
> > beanInfos.get(bean.getDeploymentID());
> >
> > -            templates = new HashMap<String, StringTemplate>();
> > -            templates.put("", template);
> > +            templates = new HashMap<String, Map<String,
> > StringTemplate>>();
> > +            templates.put("", addTemplate(null, "default", template));
> >
> >             for (JndiNameInfo nameInfo : beanInfo.jndiNamess) {
> >                 String intrface = nameInfo.intrface;
> >                 if (intrface == null) intrface = "";
> > -                templates.put(intrface, new
> > StringTemplate(nameInfo.name));
> > +                templates.put(intrface,
> > addTemplate(templates.get(intrface), getType(nameInfo.name), new
> > StringTemplate(nameInfo.name)));
> >             }
> >             beanInfo.jndiNames.clear();
> >             beanInfo.jndiNamess.clear();
> > @@ -260,11 +273,23 @@ public class JndiBuilder {
> >             this.beanContext.put("deploymentId",
> > bean.getDeploymentID().toString());
> >         }
> >
> > +        private static String getType(String name) {
> > +            int start = 0;
> > +            if (name.charAt(0) == '/') {
> > +                start = 1;
> > +            }
> > +            int end = name.substring(start).indexOf('/');
> > +            if (end < 0) {
> > +                return DEFAULT_NAME_KEY;
> > +            }
> > +            return name.substring(start, end);
> > +        }
> > +
> >         public void end() {
> >         }
> >
> > -        public String getName(Class interfce, Interface type) {
> > -            StringTemplate template = templates.get(interfce.getName());
> > +        public String getName(Class interfce, String key, Interface
> type)
> > {
> > +            Map<String, StringTemplate> template =
> > templates.get(interfce.getName());
> >             if (template == null) template =
> > templates.get(type.getAnnotationName());
> >             if (template == null) template = templates.get("");
> >
> > @@ -279,7 +304,18 @@ public class JndiBuilder {
> >             contextData.put("interfaceClass.simpleName",
> > interfce.getSimpleName());
> >             contextData.put("interfaceClass.packageName",
> > packageName(interfce));
> >
> > -            return template.apply(contextData);
> > +            if (template.containsKey(key)) {
> > +                return template.get(key).apply(contextData);
> > +            }
> > +            return template.get(DEFAULT_NAME_KEY).apply(contextData);
> > +        }
> > +
> > +        @Override public Map<String, String> getNames(Class interfce,
> > Interface type) {
> > +            Map<String, String> names = new HashMap<String, String>();
> > +            for (String key : KEYS.split(",")) {
> > +                names.put(key, getName(interfce, key, type));
> > +            }
> > +            return names;
> >         }
> >     }
> >
> > @@ -293,7 +329,7 @@ public class JndiBuilder {
> >         public void end() {
> >         }
> >
> > -        public String getName(Class interfce, Interface type) {
> > +        public String getName(Class interfce, String key, Interface
> type)
> > {
> >             String id = beanContext.getDeploymentID() + "";
> >             if (id.charAt(0) == '/') {
> >                 id = id.substring(1);
> > @@ -311,6 +347,12 @@ public class JndiBuilder {
> >             }
> >             return id;
> >         }
> > +
> > +        @Override public Map<String, String> getNames(Class interfce,
> > Interface type) {
> > +            Map<String, String> names = new HashMap<String, String>();
> > +            names.put("", getName(interfce, DEFAULT_NAME_KEY, type));
> > +            return names;
> > +        }
> >     }
> >
> >     public void bind(EjbJarInfo ejbJarInfo, BeanContext bean,
> > EnterpriseBeanInfo beanInfo, JndiNameStrategy strategy) {
> > @@ -350,7 +392,7 @@ public class JndiBuilder {
> >                 String internalName = "openejb/Deployment/" +
> > format(bean.getDeploymentID(), beanClass.getName(),
> > InterfaceType.BUSINESS_LOCALBEAN_HOME);
> >                 bind(internalName, ref, bindings, beanInfo, beanClass);
> >
> > -                String name = strategy.getName(beanClass,
> > JndiNameStrategy.Interface.LOCALBEAN);
> > +                String name = strategy.getName(beanClass,
> > DEFAULT_NAME_KEY, JndiNameStrategy.Interface.LOCALBEAN);
> >                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> > beanClass);
> >                 bindJava(bean, beanClass, ref, bindings, beanInfo);
> >
> > @@ -375,7 +417,7 @@ public class JndiBuilder {
> >                 String internalName = "openejb/Deployment/" +
> > format(bean.getDeploymentID(), interfce.getName(),
> > InterfaceType.BUSINESS_LOCAL);
> >                 bind(internalName, ref, bindings, beanInfo, interfce);
> >
> > -                String externalName = "openejb/local/" +
> > strategy.getName(interfce, JndiNameStrategy.Interface.BUSINESS_LOCAL);
> > +                String externalName = "openejb/local/" +
> > strategy.getName(interfce, DEFAULT_NAME_KEY,
> > JndiNameStrategy.Interface.BUSINESS_LOCAL);
> >                 bind(externalName, ref, bindings, beanInfo, interfce);
> >                 bindJava(bean, interfce, ref, bindings, beanInfo);
> >
> > @@ -401,7 +443,7 @@ public class JndiBuilder {
> >                 String internalName = "openejb/Deployment/" +
> > format(bean.getDeploymentID(), interfce.getName(),
> > InterfaceType.BUSINESS_REMOTE);
> >                 bind(internalName, ref, bindings, beanInfo, interfce);
> >
> > -                String name = strategy.getName(interfce,
> > JndiNameStrategy.Interface.BUSINESS_REMOTE);
> > +                String name = strategy.getName(interfce,
> DEFAULT_NAME_KEY,
> > JndiNameStrategy.Interface.BUSINESS_REMOTE);
> >                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> > interfce);
> >                 bind("openejb/remote/" + name, ref, bindings, beanInfo,
> > interfce);
> >                 bindJava(bean, interfce, ref, bindings, beanInfo);
> > @@ -418,7 +460,7 @@ public class JndiBuilder {
> >
> >                 ObjectReference ref = new
> > ObjectReference(bean.getEJBLocalHome());
> >
> > -                String name =
> > strategy.getName(bean.getLocalHomeInterface(),
> > JndiNameStrategy.Interface.LOCAL_HOME);
> > +                String name =
> > strategy.getName(bean.getLocalHomeInterface(), DEFAULT_NAME_KEY,
> > JndiNameStrategy.Interface.LOCAL_HOME);
> >                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> > localHomeInterface);
> >
> >                 optionalBind(bindings, ref, "openejb/Deployment/" +
> > format(bean.getDeploymentID(), localHomeInterface.getName(),
> > InterfaceType.EJB_LOCAL_HOME));
> > @@ -442,7 +484,7 @@ public class JndiBuilder {
> >
> >                 ObjectReference ref = new
> > ObjectReference(bean.getEJBHome());
> >
> > -                String name = strategy.getName(homeInterface,
> > JndiNameStrategy.Interface.REMOTE_HOME);
> > +                String name = strategy.getName(homeInterface,
> > DEFAULT_NAME_KEY, JndiNameStrategy.Interface.REMOTE_HOME);
> >                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> > homeInterface);
> >                 bind("openejb/remote/" + name, ref, bindings, beanInfo,
> > homeInterface);
> >
> >
> > Modified:
> >
> openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> > URL:
> >
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java?rev=1137242&r1=1137241&r2=1137242&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> > (original)
> > +++
> >
> openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> > Sat Jun 18 20:15:29 2011
> > @@ -36,6 +36,7 @@ import org.apache.openejb.assembler.clas
> >  import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
> >  import org.apache.openejb.assembler.classic.JndiBuilder;
> >  import
> org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy;
> > +import
> >
> org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy.Interface;
> >  import org.apache.openejb.loader.SystemInstance;
> >  import org.apache.openejb.util.LogCategory;
> >  import org.apache.openejb.util.Logger;
> > @@ -120,7 +121,7 @@ public abstract class AbstractApplicatio
> >                             if
> (!applicationContext.containsBean(beanName))
> > {
> >                                 EJB ejb = entry.getValue();
> >
> > applicationContext.getBeanFactory().registerSingleton(beanName, ejb);
> > -                                logger.info("Exported EJB " +
> > deployment.getEjbName() + " with interface " +
> > entry.getValue().getInterface().getName() + " to Spring bean " +
> > entry.getKey());
> > +                                logger.info("Exported EJB " +
> > deployment.getEjbName() + " with interface " +
> ejb.getInterface().getName()
> > + " to Spring bean " + entry.getKey());
> >                             }
> >                         }
> >                     }
> > @@ -142,25 +143,29 @@ public abstract class AbstractApplicatio
> >
> >         Class remoteHome = deployment.getHomeInterface();
> >         if (remoteHome != null) {
> > -            String externalName = strategy.getName(remoteHome,
> > JndiNameStrategy.Interface.REMOTE_HOME);
> > -            bindings.put(externalName, new EJB(deployment, remoteHome));
> > +            for (Map.Entry<String, String> entry :
> > strategy.getNames(remoteHome,
> > JndiNameStrategy.Interface.REMOTE_HOME).entrySet()) {
> > +                bindings.put(entry.getValue(), new EJB(deployment,
> > remoteHome));
> > +            }
> >         }
> >
> >
> >         Class localHome = deployment.getLocalHomeInterface();
> >         if (localHome != null) {
> > -            String externalName = strategy.getName(localHome,
> > JndiNameStrategy.Interface.LOCAL_HOME);
> > -            bindings.put(externalName, new EJB(deployment, remoteHome));
> > +            for (Map.Entry<String, String> entry :
> > strategy.getNames(localHome, Interface.LOCAL_HOME).entrySet()) {
> > +                bindings.put(entry.getValue(), new EJB(deployment,
> > localHome));
> > +            }
> >         }
> >
> >         for (Class businessLocal :
> deployment.getBusinessLocalInterfaces())
> > {
> > -            String externalName = strategy.getName(businessLocal,
> > JndiNameStrategy.Interface.BUSINESS_LOCAL);
> > -            bindings.put(externalName, new EJB(deployment,
> > businessLocal));
> > +            for (Map.Entry<String, String> entry :
> > strategy.getNames(businessLocal, Interface.BUSINESS_LOCAL).entrySet()) {
> > +                bindings.put(entry.getValue(), new EJB(deployment,
> > businessLocal));
> > +            }
> >         }
> >
> >         for (Class businessRemote :
> > deployment.getBusinessRemoteInterfaces()) {
> > -            String externalName = strategy.getName(businessRemote,
> > JndiNameStrategy.Interface.BUSINESS_REMOTE);
> > -            bindings.put(externalName, new EJB(deployment,
> > businessRemote));
> > +            for (Map.Entry<String, String> entry :
> > strategy.getNames(businessRemote, Interface.BUSINESS_REMOTE).entrySet())
> {
> > +                bindings.put(entry.getValue(), new EJB(deployment,
> > businessRemote));
> > +            }
> >         }
> >
> >  //        if
> (MessageListener.class.equals(deployment.getMdbInterface()))
> > {
> >
> > Modified:
> >
> openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> > URL:
> >
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java?rev=1137242&r1=1137241&r2=1137242&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> > (original)
> > +++
> >
> openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> > Sat Jun 18 20:15:29 2011
> > @@ -20,7 +20,7 @@ package org.apache.openejb.spring;
> >  import javax.ejb.EJB;
> >
> >  public class EchoReverseBean {
> > -    @EJB
> > +    @EJB(name = "EchoBeanLocal")
> >     public Echo echo;
> >
> >     public Echo getEcho() {
> >
> >
> >
>
>
> --
> Shawn
>

Re: svn commit: r1137242 - in /openejb/trunk/openejb3/container: openejb-core/src/main/java/org/apache/openejb/assembler/classic/ openejb-spring/src/main/java/org/apache/openejb/spring/ openejb-spring/src/test/java/org/apache/openejb/spring/

Posted by Shawn Jiang <ge...@gmail.com>.
Hi Romain,

This revision blocked geronimo server from starting.

I commited a quick fix with r1137371.    Please take a look to see if my fix
has any impact to you.

On Sun, Jun 19, 2011 at 4:15 AM, <rm...@apache.org> wrote:

> Author: rmannibucau
> Date: Sat Jun 18 20:15:29 2011
> New Revision: 1137242
>
> URL: http://svn.apache.org/viewvc?rev=1137242&view=rev
> Log:
> adding a key by template strategy to avoid to loose template (useful for
> spring for example)
>
> Modified:
>
>  openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
>
>  openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
>
>  openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
>
> Modified:
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> URL:
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java?rev=1137242&r1=1137241&r2=1137242&view=diff
>
> ==============================================================================
> ---
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> (original)
> +++
> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
> Sat Jun 18 20:15:29 2011
> @@ -18,6 +18,7 @@ package org.apache.openejb.assembler.cla
>
>  import static org.apache.openejb.util.Classes.packageName;
>
> +import java.util.TreeMap;
>  import javax.ejb.embeddable.EJBContainer;
>  import javax.naming.NamingException;
>  import javax.naming.Reference;
> @@ -56,6 +57,7 @@ import java.lang.reflect.Constructor;
>  */
>  public class JndiBuilder {
>
> +    public static final String DEFAULT_NAME_KEY = "default";
>
>     final boolean embeddedEjbContainerApi;
>
> @@ -165,7 +167,8 @@ public class JndiBuilder {
>
>         public void begin(BeanContext beanContext);
>
> -        public String getName(Class interfce, Interface type);
> +        public String getName(Class interfce, String key, Interface type);
> +        public Map<String, String> getNames(Class interfce, Interface
> type);
>
>         public void end();
>     }
> @@ -174,6 +177,7 @@ public class JndiBuilder {
>
>     public static class TemplatedStrategy implements JndiNameStrategy {
>         private static final String JNDINAME_FORMAT =
> "openejb.jndiname.format";
> +        private static final String KEYS = "default,local,global,app";
>         private org.apache.openejb.util.StringTemplate template;
>         private HashMap<String, EnterpriseBeanInfo> beanInfos;
>
> @@ -181,7 +185,7 @@ public class JndiBuilder {
>         private BeanContext bean;
>
>         // Set in begin()
> -        private Map<String, StringTemplate> templates;
> +        private HashMap<String, Map<String, StringTemplate>> templates;
>
>         private String format;
>         private Map<String, String> appContext;
> @@ -234,18 +238,27 @@ public class JndiBuilder {
>             }
>         }
>
> +        private Map<String, StringTemplate> addTemplate(Map<String,
> StringTemplate> map, String key, StringTemplate template) {
> +            Map<String, StringTemplate> m = map;
> +            if (m == null) {
> +                m = new TreeMap<String, StringTemplate> ();
> +            }
> +            m.put(key, template);
> +            return m;
> +        }
> +
>         public void begin(BeanContext bean) {
>             this.bean = bean;
>
>             EnterpriseBeanInfo beanInfo =
> beanInfos.get(bean.getDeploymentID());
>
> -            templates = new HashMap<String, StringTemplate>();
> -            templates.put("", template);
> +            templates = new HashMap<String, Map<String,
> StringTemplate>>();
> +            templates.put("", addTemplate(null, "default", template));
>
>             for (JndiNameInfo nameInfo : beanInfo.jndiNamess) {
>                 String intrface = nameInfo.intrface;
>                 if (intrface == null) intrface = "";
> -                templates.put(intrface, new
> StringTemplate(nameInfo.name));
> +                templates.put(intrface,
> addTemplate(templates.get(intrface), getType(nameInfo.name), new
> StringTemplate(nameInfo.name)));
>             }
>             beanInfo.jndiNames.clear();
>             beanInfo.jndiNamess.clear();
> @@ -260,11 +273,23 @@ public class JndiBuilder {
>             this.beanContext.put("deploymentId",
> bean.getDeploymentID().toString());
>         }
>
> +        private static String getType(String name) {
> +            int start = 0;
> +            if (name.charAt(0) == '/') {
> +                start = 1;
> +            }
> +            int end = name.substring(start).indexOf('/');
> +            if (end < 0) {
> +                return DEFAULT_NAME_KEY;
> +            }
> +            return name.substring(start, end);
> +        }
> +
>         public void end() {
>         }
>
> -        public String getName(Class interfce, Interface type) {
> -            StringTemplate template = templates.get(interfce.getName());
> +        public String getName(Class interfce, String key, Interface type)
> {
> +            Map<String, StringTemplate> template =
> templates.get(interfce.getName());
>             if (template == null) template =
> templates.get(type.getAnnotationName());
>             if (template == null) template = templates.get("");
>
> @@ -279,7 +304,18 @@ public class JndiBuilder {
>             contextData.put("interfaceClass.simpleName",
> interfce.getSimpleName());
>             contextData.put("interfaceClass.packageName",
> packageName(interfce));
>
> -            return template.apply(contextData);
> +            if (template.containsKey(key)) {
> +                return template.get(key).apply(contextData);
> +            }
> +            return template.get(DEFAULT_NAME_KEY).apply(contextData);
> +        }
> +
> +        @Override public Map<String, String> getNames(Class interfce,
> Interface type) {
> +            Map<String, String> names = new HashMap<String, String>();
> +            for (String key : KEYS.split(",")) {
> +                names.put(key, getName(interfce, key, type));
> +            }
> +            return names;
>         }
>     }
>
> @@ -293,7 +329,7 @@ public class JndiBuilder {
>         public void end() {
>         }
>
> -        public String getName(Class interfce, Interface type) {
> +        public String getName(Class interfce, String key, Interface type)
> {
>             String id = beanContext.getDeploymentID() + "";
>             if (id.charAt(0) == '/') {
>                 id = id.substring(1);
> @@ -311,6 +347,12 @@ public class JndiBuilder {
>             }
>             return id;
>         }
> +
> +        @Override public Map<String, String> getNames(Class interfce,
> Interface type) {
> +            Map<String, String> names = new HashMap<String, String>();
> +            names.put("", getName(interfce, DEFAULT_NAME_KEY, type));
> +            return names;
> +        }
>     }
>
>     public void bind(EjbJarInfo ejbJarInfo, BeanContext bean,
> EnterpriseBeanInfo beanInfo, JndiNameStrategy strategy) {
> @@ -350,7 +392,7 @@ public class JndiBuilder {
>                 String internalName = "openejb/Deployment/" +
> format(bean.getDeploymentID(), beanClass.getName(),
> InterfaceType.BUSINESS_LOCALBEAN_HOME);
>                 bind(internalName, ref, bindings, beanInfo, beanClass);
>
> -                String name = strategy.getName(beanClass,
> JndiNameStrategy.Interface.LOCALBEAN);
> +                String name = strategy.getName(beanClass,
> DEFAULT_NAME_KEY, JndiNameStrategy.Interface.LOCALBEAN);
>                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> beanClass);
>                 bindJava(bean, beanClass, ref, bindings, beanInfo);
>
> @@ -375,7 +417,7 @@ public class JndiBuilder {
>                 String internalName = "openejb/Deployment/" +
> format(bean.getDeploymentID(), interfce.getName(),
> InterfaceType.BUSINESS_LOCAL);
>                 bind(internalName, ref, bindings, beanInfo, interfce);
>
> -                String externalName = "openejb/local/" +
> strategy.getName(interfce, JndiNameStrategy.Interface.BUSINESS_LOCAL);
> +                String externalName = "openejb/local/" +
> strategy.getName(interfce, DEFAULT_NAME_KEY,
> JndiNameStrategy.Interface.BUSINESS_LOCAL);
>                 bind(externalName, ref, bindings, beanInfo, interfce);
>                 bindJava(bean, interfce, ref, bindings, beanInfo);
>
> @@ -401,7 +443,7 @@ public class JndiBuilder {
>                 String internalName = "openejb/Deployment/" +
> format(bean.getDeploymentID(), interfce.getName(),
> InterfaceType.BUSINESS_REMOTE);
>                 bind(internalName, ref, bindings, beanInfo, interfce);
>
> -                String name = strategy.getName(interfce,
> JndiNameStrategy.Interface.BUSINESS_REMOTE);
> +                String name = strategy.getName(interfce, DEFAULT_NAME_KEY,
> JndiNameStrategy.Interface.BUSINESS_REMOTE);
>                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> interfce);
>                 bind("openejb/remote/" + name, ref, bindings, beanInfo,
> interfce);
>                 bindJava(bean, interfce, ref, bindings, beanInfo);
> @@ -418,7 +460,7 @@ public class JndiBuilder {
>
>                 ObjectReference ref = new
> ObjectReference(bean.getEJBLocalHome());
>
> -                String name =
> strategy.getName(bean.getLocalHomeInterface(),
> JndiNameStrategy.Interface.LOCAL_HOME);
> +                String name =
> strategy.getName(bean.getLocalHomeInterface(), DEFAULT_NAME_KEY,
> JndiNameStrategy.Interface.LOCAL_HOME);
>                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> localHomeInterface);
>
>                 optionalBind(bindings, ref, "openejb/Deployment/" +
> format(bean.getDeploymentID(), localHomeInterface.getName(),
> InterfaceType.EJB_LOCAL_HOME));
> @@ -442,7 +484,7 @@ public class JndiBuilder {
>
>                 ObjectReference ref = new
> ObjectReference(bean.getEJBHome());
>
> -                String name = strategy.getName(homeInterface,
> JndiNameStrategy.Interface.REMOTE_HOME);
> +                String name = strategy.getName(homeInterface,
> DEFAULT_NAME_KEY, JndiNameStrategy.Interface.REMOTE_HOME);
>                 bind("openejb/local/" + name, ref, bindings, beanInfo,
> homeInterface);
>                 bind("openejb/remote/" + name, ref, bindings, beanInfo,
> homeInterface);
>
>
> Modified:
> openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> URL:
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java?rev=1137242&r1=1137241&r2=1137242&view=diff
>
> ==============================================================================
> ---
> openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> (original)
> +++
> openejb/trunk/openejb3/container/openejb-spring/src/main/java/org/apache/openejb/spring/AbstractApplication.java
> Sat Jun 18 20:15:29 2011
> @@ -36,6 +36,7 @@ import org.apache.openejb.assembler.clas
>  import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
>  import org.apache.openejb.assembler.classic.JndiBuilder;
>  import org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy;
> +import
> org.apache.openejb.assembler.classic.JndiBuilder.JndiNameStrategy.Interface;
>  import org.apache.openejb.loader.SystemInstance;
>  import org.apache.openejb.util.LogCategory;
>  import org.apache.openejb.util.Logger;
> @@ -120,7 +121,7 @@ public abstract class AbstractApplicatio
>                             if (!applicationContext.containsBean(beanName))
> {
>                                 EJB ejb = entry.getValue();
>
> applicationContext.getBeanFactory().registerSingleton(beanName, ejb);
> -                                logger.info("Exported EJB " +
> deployment.getEjbName() + " with interface " +
> entry.getValue().getInterface().getName() + " to Spring bean " +
> entry.getKey());
> +                                logger.info("Exported EJB " +
> deployment.getEjbName() + " with interface " + ejb.getInterface().getName()
> + " to Spring bean " + entry.getKey());
>                             }
>                         }
>                     }
> @@ -142,25 +143,29 @@ public abstract class AbstractApplicatio
>
>         Class remoteHome = deployment.getHomeInterface();
>         if (remoteHome != null) {
> -            String externalName = strategy.getName(remoteHome,
> JndiNameStrategy.Interface.REMOTE_HOME);
> -            bindings.put(externalName, new EJB(deployment, remoteHome));
> +            for (Map.Entry<String, String> entry :
> strategy.getNames(remoteHome,
> JndiNameStrategy.Interface.REMOTE_HOME).entrySet()) {
> +                bindings.put(entry.getValue(), new EJB(deployment,
> remoteHome));
> +            }
>         }
>
>
>         Class localHome = deployment.getLocalHomeInterface();
>         if (localHome != null) {
> -            String externalName = strategy.getName(localHome,
> JndiNameStrategy.Interface.LOCAL_HOME);
> -            bindings.put(externalName, new EJB(deployment, remoteHome));
> +            for (Map.Entry<String, String> entry :
> strategy.getNames(localHome, Interface.LOCAL_HOME).entrySet()) {
> +                bindings.put(entry.getValue(), new EJB(deployment,
> localHome));
> +            }
>         }
>
>         for (Class businessLocal : deployment.getBusinessLocalInterfaces())
> {
> -            String externalName = strategy.getName(businessLocal,
> JndiNameStrategy.Interface.BUSINESS_LOCAL);
> -            bindings.put(externalName, new EJB(deployment,
> businessLocal));
> +            for (Map.Entry<String, String> entry :
> strategy.getNames(businessLocal, Interface.BUSINESS_LOCAL).entrySet()) {
> +                bindings.put(entry.getValue(), new EJB(deployment,
> businessLocal));
> +            }
>         }
>
>         for (Class businessRemote :
> deployment.getBusinessRemoteInterfaces()) {
> -            String externalName = strategy.getName(businessRemote,
> JndiNameStrategy.Interface.BUSINESS_REMOTE);
> -            bindings.put(externalName, new EJB(deployment,
> businessRemote));
> +            for (Map.Entry<String, String> entry :
> strategy.getNames(businessRemote, Interface.BUSINESS_REMOTE).entrySet()) {
> +                bindings.put(entry.getValue(), new EJB(deployment,
> businessRemote));
> +            }
>         }
>
>  //        if (MessageListener.class.equals(deployment.getMdbInterface()))
> {
>
> Modified:
> openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> URL:
> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java?rev=1137242&r1=1137241&r2=1137242&view=diff
>
> ==============================================================================
> ---
> openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> (original)
> +++
> openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/EchoReverseBean.java
> Sat Jun 18 20:15:29 2011
> @@ -20,7 +20,7 @@ package org.apache.openejb.spring;
>  import javax.ejb.EJB;
>
>  public class EchoReverseBean {
> -    @EJB
> +    @EJB(name = "EchoBeanLocal")
>     public Echo echo;
>
>     public Echo getEcho() {
>
>
>


-- 
Shawn