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