Whoops, just noticed the regex I posted doesn't accept a '.'

On Aug 4, 2009, at 6:59 PM, David Blevins wrote:

So, the replacement we are doing now can be done without the swizzle StringTemplate code. Small snippet as so:

  import java.util.Map;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;

private static final Pattern PATTERN = Pattern.compile("(\\{)(\\w+) (})");

  static String format(String input, Map<String, String> map) {
      Matcher matcher = PATTERN.matcher(input);
      StringBuffer buf = new StringBuffer();
      while (matcher.find()) {
          String key = matcher.group(2);
          String value = map.get(key);
          matcher.appendReplacement(buf, value);
      }
      matcher.appendTail(buf);
      return buf.toString();
  }

Then we just check the key for the ".lc", ".uc", and ".cc" suffixes, shave them off, and munge the map value appropriately. Maybe even support "Lc" and so on as a backwards compatible way to get rid of having to eagerly create some of the existing keys "FooLc" keys we have.

We could probably even add this to a class called StringTemplate and use it as a drop in replacement.


-David

Begin forwarded message:

Resent-From: <[email protected]>
From: David Blevins <[email protected]>
Date: August 4, 2009 4:03:32 PM PDT
To: [email protected]
Subject: Re: JNDI Names: lower case interfaceType.annotationName?
Reply-To: [email protected]

I'll give you some tips on the dev@ list -- should be easy to do with the swizzle-stream apis.

-David

On Aug 4, 2009, at 3:25 PM, Jonathan Gallimore wrote:

I was thinking that as I was adding the new setting to the documentation. I
think that's a neat idea - I'll see if I can code that up.

Jon

On Tue, Aug 4, 2009 at 11:18 PM, David Blevins <[email protected] >wrote:

Maybe we should take all the entries we have and automatically make both ".lc" and ".uc" versions of them? (possibly even ".cc" for camel case). Or maybe smarten up our formatting so that they are only created on demand.




On Aug 4, 2009, at 2:26 PM, Jonathan Gallimore wrote:

Hi Mark,

I've just committed this for you.

Cheers

Jon

On Tue, Aug 4, 2009 at 2:16 PM, Jonathan Gallimore <
[email protected]> wrote:

Hi Mark,

This seems like a good addition to me, I'm more than happy to get this in
(should be able to do it this evening).

Cheers

Jon


On Mon, Aug 3, 2009 at 4:35 PM, Mark Taylor <[email protected]> wrote:

First, thanks for a great project and I have a feature request.

It seems like the default JBoss JNDI name is: {beanName}/ {lowercase annotation type} (ie local or remote). Hence I have an application full of @EJB mapped-names such as: "MyStatelessBean/local". From the
document

http://openejb.apache.org/3.0/jndi-names.html.

It appears we can only use interfaceType.annotationName to get Local
or Remote (ie uppercase).  Would it be possible to add:
interfaceType.annotationNameLowerCase to the JNDI Name formatting
options?

It could go in org.apache.openejb.assembler.classic.JndiBuilder:

  public String getName(Class interfce, Interface type) {
StringTemplate template = templates.get(interfce.getName());
      if (template == null) template =
templates.get(type.getAnnotationName());
      if (template == null) template = templates.get("");

Map<String,String> contextData = new HashMap<String,String>();
      contextData.put("moduleId", deploymentInfo.getModuleID());
      contextData.put("ejbType",
deploymentInfo.getComponentType().name());
      contextData.put("ejbClass",
deploymentInfo.getBeanClass().getName());
      contextData.put("ejbClass.simpleName",
deploymentInfo.getBeanClass().getSimpleName());
      contextData.put("ejbClass.packageName",
packageName(deploymentInfo.getBeanClass()));
      contextData.put("ejbName", deploymentInfo.getEjbName());
      contextData.put("deploymentId",
deploymentInfo.getDeploymentID().toString());
contextData.put("interfaceType", type.getAnnotationName());
      contextData.put("interfaceType.annotationName",
type.getAnnotationName());
      //***********************************************
      //
      contextData.put("interfaceType.annotationNameLC",
type.getAnnotationName().toLower());
      //
      //***********************************************
contextData.put("interfaceType.xmlName", type.getXmlName());
      contextData.put("interfaceType.xmlNameCc",
type.getXmlNameCc());
      contextData.put("interfaceType.openejbLegacyName",
type.getOpenejbLegacy());
      contextData.put("interfaceClass", interfce.getName());
      contextData.put("interfaceClass.simpleName",
interfce.getSimpleName());
      contextData.put("interfaceClass.packageName",
packageName(interfce));
      return template.apply(contextData);
  }










Reply via email to