You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by "Alex Karasulu (JIRA)" <di...@incubator.apache.org> on 2005/03/24 23:10:24 UTC
[jira] Resolved: (DIREVE-138) Loop in client results in NPE + CommunicationException Request: 1 cancelled
[ http://issues.apache.org/jira/browse/DIREVE-138?page=history ]
Alex Karasulu resolved DIREVE-138:
----------------------------------
Resolution: Fixed
Yep just ran your tests and it does look like some of the socket changes made to MINA has resolved this issue. I'll take it off as fixed but please confirm.
> Loop in client results in NPE + CommunicationException Request: 1 cancelled
> ---------------------------------------------------------------------------
>
> Key: DIREVE-138
> URL: http://issues.apache.org/jira/browse/DIREVE-138
> Project: Directory Server
> Type: Bug
> Components: protocol
> Versions: 0.8
> Environment: Windows XP SP2, JDK1.4.2_05, Running the program in Eclipse 3.0.1
> Reporter: David Geleyn
> Assignee: Alex Karasulu
> Fix For: 0.9
> Attachments: Test.java
>
> The source code that fails is too complicated to add here, so I've made a test program that results in the same behaviour.
> 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 an 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).
> ============= 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)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira