>
> I have tried this before - with little success. The code does not through
> any exception now - but the DirContext object (ctx) is null and by that
> unusable:
>
> DirContext ctx = (DirContext)
> newCtx.lookup("java:comp/env/blah");
> if (ctx != null){
> System.out.println ("True");
> } else {
> System.out.println ("False");
> }
>
> The code we use is
// Initialize context.
context = new InitialContext();
Context envCtx = (Context) context.lookup("java:comp/env");
// Initialize object from lookup.
Object object = envCtx.lookup(getJndiLookup());
if (object != null) {
// Initialize session.
return (Session) object;
} else {
// Print debug.
LogLog.debug("Invalid message object returned from JDNI
lookup.");
}
getJndiLokup returns a string, e.g. mail/Session. As long as this matches up
with context.xml resources section, all works. Only problem we've had is
that the classes required for whatever resource need to be in tomcat/lib as
the resource is initialized at tomcat startup.
Are you sure you check all the log files for exceptions?
> I have also tried to list the bindings on comp/env - but there I also get a
> NullPointerException:
>
> NamingEnumeration ne = newCtx.listBindings("java:comp/env");
> while(ne.hasMore()) {
> Binding b = (Binding) ne.next();
> System.out.println(b.getName() + " " + b.getObject());
> }
>
> Any good suggestion to what is going on? I think that I read that you could
> enable debugging on a resource definition - but I seem not to find it any
> again.
>
> NOTE: If I use the more regular approach to connect to the ldap server in
> another servlet - then I have no trouble at all (just to verify the
> credentials):
>
> Hashtable env = new Hashtable();
>
>
> env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
> env.put(Context.PROVIDER_URL, "ldap://
> 192.168.7.1:389/dc=blah,dc=com");
> env.put(Context.SECURITY_AUTHENTICATION, "simple");
> env.put(Context.SECURITY_PRINCIPAL, "cn=blah");
> env.put(Context.SECURITY_CREDENTIALS, "blahblah");
>
> DirContext ctx = null;
> try {
> ctx = new InitialDirContext(env);
> } catch (NamingException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
>
Our apps use spring security - we have ldap working there and it works a
treat. Don't know if that's an option for you
Chris