Ok, got it. Error in my thread-code, I think. I have to wait for each thread
to die, then rhe session-handles will be released correctly:
for (Thread thread : allThreads) {
if (thread.isAlive()) {
System.out.println("Waiting for thread " +thread.getName()+ "
...");
thread.join();
}
}
Gamba wrote:
>
> 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-connections-with-RMI-access-on-JBoss-tp25468807p25486133.html
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.