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
