>
> 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

Reply via email to