Hi, 

I'm using jackrabbit-1.6.0 and runnig the jackrabbit-jca-rar and the
rmi-Connector on jboss parallel.
For my unit-tests I'm using only the rmi-connector and in some tests a
session-bean. But actually I found an error with rmi and the tests.

First of all my native rmi-test with multiple-threads does not fail, but
when I observe the Jboss-ManagedConnectionPool, I see that it is running out
of connections. It is the configured 
MBean Java Class:
org.jboss.resource.connectionmanager.JBossManagedConnectionPool
You can see it in the JMX-Console of jboss. After running the test multiple
times the available connection-count runs against zero.

Please confirm my code and make your own experiences. Is it a bug?

@Test
public void multiThreadTest() throws Exception 
{                       
    Thread[] allThreads = new Thread[10];
    
    for (int i = 0; i < allThreads.length; i++) 
    {
        allThreads[i] = new Thread(new Runnable() 
        {
            public void run() 
            {
               Session sessionLocal = null;
               Random random = new Random(); 
          
                try {
                        Context context = new InitialContext();
                        ClientAdapterFactory adapter = new 
ClientAdapterFactory();
                        RemoteRepository rr = (RemoteRepository) context.
                            lookup("jnp://localhost:1099/jcrServer");
                        Repository repo = adapter.getRepository(rr);
                                   
                        String randomProjectNr = 
String.valueOf(random.nextInt());
                        String testNodeName = "TEST_JCR_NODE_" + 
randomProjectNr;
                        
                        // own session per thread
                        sessionLocal = repo.login (new 
SimpleCredentials("user", 
                            "pwd".toCharArray()), "default");           
   
                        
                        // -----
                        // call jcr-api directly
                        // -----
                        // create one folder ...
                        Node rootNode = sessionLocal.getRootNode();
                        if (!rootNode.hasNode(testNodeName)) {
                           rootNode.addNode(testNodeName);
                        }
                        sessionLocal.save();
                        sessionLocal.logout();  
                        sessionLocal = null;                            
                
                        // ... and one subfolder within an new session
                        sessionLocal = repository.login (new 
SimpleCredentials("user", 
                           "pwd".toCharArray()), "pwd");                
                        rootNode = sessionLocal.getRootNode();
                        Node testNode = rootNode.getNode(testNodeName);
                        if (!testNode.hasNode("TestLevel2")) {
                                //testNode.addNode("TestLevel2", "hmg:folder");
                                testNode.addNode("TestLevel2");
                        }
                        sessionLocal.save();
                        sessionLocal.logout();
                        sessionLocal = null;    
                                
                                        
                        // remove created nodes within an new session
                        sessionLocal = repository.login (new 
SimpleCredentials("user", 
                           "pwd".toCharArray()), "default");            
            
                        Node oldNode = rootNode.getNode(testNodeName);
                        oldNode.remove();
                        
                        sessionLocal.save();
                        sessionLocal.logout();
                        sessionLocal = null;    
               } 
                catch (Exception e) {
                     System.out.println("Exception in Thread "
+Thread.currentThread().getName());
                     e.printStackTrace();
               }
               finally 
                {                               
                        // logout and remove session
                        if (sessionLocal != null) {
                                sessionLocal.logout();
                                sessionLocal = null;            
                        }
                }
        }
      });
    }
        
    for (Thread thread : allThreads) {
        System.out.println("Starting Thread " +thread.getName()+ " ...");
        thread.start();
      Thread.yield();
    }

After two runs with 10 Threads there are no more connections available in
the pool (because maxSize is 20) It seems that the connections are never
released after using ...

Regards,
Gamba
-- 
View this message in context: 
http://www.nabble.com/Connection-Pool-running-out-of-connection-with-RMI-access-on-JBoss-tp25468807p25468807.html
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.

Reply via email to