directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Karasulu <aok...@bellsouth.net>
Subject Re: [apacheds] NPE + CommunicationException Request: 1 cancelled
Date Tue, 15 Feb 2005 18:33:33 GMT
David_Geleyn@inventivedesigners.com wrote:

>Hi,
>
>I'm experiencing some problems with Apache DS. The source code that fails 
>is too complicated to post here, so I've made a test program that results 
>in the same behaviour. 
>
>  
>
That's great wish everyone did that :).

>This program doesn't do anything useful. It checks twice whether Alex 
>Karasulu is an administrator and repeats this for a thousand times.
>It results in an CommunicationException at client side and a NPE at server 
>side. I added both stacktraces at the end. I also added the code that 
>starts up the LDAP server.
>
>I googled to find some explanation for the "Request 1: Cancelled", but I 
>didn't find a useful explanation. There was some topic on a forum that 
>mentionned that the number of connections was reached. Can this be the 
>problem?
>
>After the NPE (which is never a good thing), new server requests will be 
>processed. It's only the thread that handles the request that fails (i 
>guess).
>
>  
>
Yes you are right on.

>Remark: I do not use the standard distribution with all used classes 
>packaged in the same JAR. I've downloaded all jars separately from the 
>ibiblio maven repository, but that can't be the problem, i guess.
>
>  
>
True that should make no difference.

>Thanks!
>
>David.
>  
>
This is excellent David.  I will start looking into the problem.  If you 
don't mind it might be best if you create a JIRA issue.  That way we can 
track everything as I test the server with this code.  Also you can 
submit these java files as attachments on the issue.   However I think 
JIRA might be down great :(.  Might be back up when you read this.  
Heres the URL for the ApacheDS JIRA:

http://issues.apache.org/jira/browse/DIREVE

Also looks like you might want to put a try/catch/finally and close the 
context on the finally in the client code.  Looks like the exception is 
deep down in the selector which is handed a null key.  This usually 
means a client is gone but stuff is lingering because client did not 
explicitly close the connection.  This might go away with 0.9 of the 
server which should be out soon where we use MINA instead of SEDA.  I 
will run this on both to confirm.

Thanks,
Alex

>============= SAMPLE CLIENT CODE
>public static void main(String[] args) throws Exception
>{
>        final Properties env = new Properties();
>        env.put(Context.INITIAL_CONTEXT_FACTORY, 
>"com.sun.jndi.ldap.LdapCtxFactory");
>        env.put(Context.PROVIDER_URL, "ldap://david:389");
>        env.put(Context.SECURITY_AUTHENTICATION, "simple");
>        env.put("java.naming.ldap.version", "3");
>        env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
>        env.put(Context.SECURITY_CREDENTIALS, "secret");
>        int positive = 0;
> 
>        for (int i = 0; i < 1000; i++)
>        {
>                // Try to authenticate user.
>                DirContext userContext = new InitialDirContext(env);
> 
>                final SearchControls constraints = new SearchControls();
>                constraints.setDerefLinkFlag(true);
>                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
>                String filter = 
>"(&(cn=administrators)(uniqueMember=uid=akarasulu,ou=users,ou=system))";
>                NamingEnumeration enum = 
>userContext.search("ou=groups,ou=system", filter, constraints);
>                enum = userContext.search("ou=groups,ou=system", filter, 
>constraints);
> 
>                if (enum.hasMoreElements()) positive++;
>                userContext.close();
>        }
>        System.out.println(positive);
> 
>}
>
>============= SERVER STARTUP CODE
>// Start the LDAP server
>Properties env = new Properties();
>env.setProperty(Context.PROVIDER_URL, "ou=system");
>env.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
>"org.apache.ldap.server.jndi.ServerContextFactory");
>try
>{
>        new InitialDirContext(env);
>}
>catch (NamingException e)
>{
>        e.printStackTrace();
>}
>
>============= CLIENT STACK TRACE
>javax.naming.CommunicationException: Request: 1 cancelled
>        at com.sun.jndi.ldap.LdapRequest.getReplyBer(LdapRequest.java:60)
>        at com.sun.jndi.ldap.Connection.readReply(Connection.java:405)
>        at com.sun.jndi.ldap.LdapClient.ldapBind(LdapClient.java:340)
>        at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:193)
>        at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2640)
>        at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:290)
>        at 
>com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
>        at 
>com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
>        at 
>com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
>        at 
>com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
>        at 
>javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
>        at 
>javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
>        at javax.naming.InitialContext.init(InitialContext.java:219)
>        at javax.naming.InitialContext.<init>(InitialContext.java:195)
>        at 
>javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:80)
>        at id.security.authentication.service.ldap.Test.main(Test.java:34)
>
>============= SERVER STACK TRACE
>java.lang.NullPointerException
>        at 
>sun.nio.ch.WindowsSelectorImpl$SubSelector.processFDSet(WindowsSelectorImpl.java:321)
>        at 
>sun.nio.ch.WindowsSelectorImpl$SubSelector.processSelectedKeys(WindowsSelectorImpl.java:290)
>        at 
>sun.nio.ch.WindowsSelectorImpl$SubSelector.access$2800(WindowsSelectorImpl.java:253)
>        at 
>sun.nio.ch.WindowsSelectorImpl.updateSelectedKeys(WindowsSelectorImpl.java:439)
>        at 
>sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:145)
>        at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:59)
>        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:70)
>        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:74)
>        at 
>org.apache.apseda.input.TCPInputManager.run(TCPInputManager.java:158)
>        at java.lang.Thread.run(Thread.java:534)
>
>
>--------------------------------------------------
>Inventive Designers' Email Disclaimer:
>
>http://www.inventivedesigners.com/email-disclaimer
>
>  
>


Mime
View raw message