You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by Jan Bartel <ja...@mortbay.com> on 2003/08/16 07:49:54 UTC
[JNDI] jakarta-commons-sandbox/naming code
Hi,
As Henri asked for feedback on the JNDI implementation that has been
made available in the jakarta sandbox, so here are my quick initial
impressions:
Nice features
+ provision for associating contexts either by Thread binding or
Classsloader binding, although binding Contexts by Classloaders will
probably normally be used (certainly is for webapps).
+ provision for some security via execution of privileged blocks
+ provision for read-only Contexts, and for selective granting of
permissions for writing to Contexts (although write-protecting Contexts
might be of limited use, considering that applications are mandatorily
shielded from each other as part of the "java:" namespace anyway)
Not so nice features
+ Occasional poor separation of concerns eg leaking of the "java:"
context into packages unrelated to the implementation of the "java:"
Context (eg in org.apache.commons.naming.SelectorContext)
+ No clear delineation in the "java:" context handling of
application-specific "comp" context. There are elegant ways to enforce
it in the implementation of the "java:" context, which prevents calling
code from having to explicitly deal with it
+ Plethora of ObjectFactories for resources such as MailSessions etc.
All factories always return a new object instance when looked up, which
whilst in the spirit of the JNDI spec, is not very efficient, as many of
these kinds of resources are designed to be efficiently shared. Consider
binding an factory for a mail service for a webapp - every time the
webapp looks up the MailService, a new MailSession object will be
created and configured, rather than creating a single MailSession object
for the webapp which will be returned every time the webapp does a
lookup on it. Also, the MailService ObjectFactory doesn't handle config
of the MailSession very well at all, just hardcodes values of "smtp" and
"localhost" for the transport and host properties.
These are just some initial comments after a cursory look through the
code. In general, I was a bit surprised by the number of classes in
there. Looks maybe like a little bit of factoring overkill perhaps,
considering that the core JNDI stuff just needs to provide in-memory
lookups and a few safe-guards on the "java:" namespace. I'm conparing it
with the JNDI impl used in Jetty, which consists of 7 classes.
cheers,
Jan