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 <[email protected]>

> 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, <[email protected]> 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
>

Reply via email to