directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Emmanuel Lecharny (JIRA)" <>
Subject [jira] Commented: (DIRSERVER-858) Allow subclassing LdapDN
Date Tue, 06 Mar 2007 10:54:24 GMT


Emmanuel Lecharny commented on DIRSERVER-858:

Parsing a DN is a pretty fast operation : on my desktop (pentium 3Ghz), I can parse 120 000
dc=example, dc=com DN per second. 

Your example is not correct. I assume it will work for "dc=example, dc=com" if you do a 
bytes = StringTools.getBytesUtf8(dn); 
but if you have a DN like : sn=lécharny, dc=example, dc=com, it's simply not enough. The
'é'  should be handled and escaped, and this is what the parser is doing.

Last point : LdapDN is not intended to be used out of the server.

However, if you propose a patch, we may consider to apply it. Don't forget to propose a patch
for 1.0 and 1.5 version.

> Allow subclassing LdapDN
> ------------------------
>                 Key: DIRSERVER-858
>                 URL:
>             Project: Directory ApacheDS
>          Issue Type: Improvement
>          Components: ldap
>    Affects Versions: 1.0.1, 1.5.0
>            Reporter: Endi S. Dewata
> Currently when you create an LdapDN object from a given DN string the code will always
parse the string into its RDN components.
>     LdapDN dn = new LdapDN("dc=example,dc=com");
> The parsing code, however, depending on your application, could take up to 5% of the
> For applications that require high performance, it would be great if we could create
a subclass of LdapDN that will bypass the DN parsing code, or lazily parse the DN only when
needed. See the following code:
>     LdapDN dn = new MyLdapDN("dc=example,dc=com");
>     SearchResponseEntry response = new SearchResponseEntryImpl(request.getMessageId());
>     response.setObjectName(dn);
>     response.setAttributes(attributes);
> The MyLdapDN class would be very simple:
>     public class MyLdapDN extends LdapDN {
>         public MyLdapDN(String dn) throws Exception {
>             bytes = StringTools.getBytesUtf8(dn);
>         }
>     }
> Unfortunately this code is currently doesn't work because the the "bytes" field of LdapDN
is private and the LdapDN.getNbBytes() and LdapDN.getBytes() methods require direct access
to the field.
> The solution is simple, here are some alternatives:
> 1. Change the field access to protected.
> 2. Add LdapDN.setBytes() method.
> 3. Add LdapDN.getBytes() that can be overridden by the subclass, and change the LdapDN.getNbBytes()
and LdapDN.getBytes() to call this method.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message