This is a sample multithreaded java code (not scala) which fails with "No more resources available in pool" if you do not use db.close()
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentPool;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
public class ThreadExample {
private static final OSQLSynchQuery query = new OSQLSynchQuery("SELECT FROM V");
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread("" + i) {
public void run() {
// ODatabaseDocumentTx db = new ODatabaseDocumentTx("remote:localhost/GratefulDeadConcerts").open("admin", "admin");
// or use pool
ODatabaseDocumentTx db = ODatabaseDocumentPool.global(1,40).acquire("remote:localhost/GratefulDeadConcerts", "admin", "admin");
System.out.println(" 1 -- Thread: " + getName() + " running");
db.query(query);
// db.close(); // if you do not close it will fail with : No more resources available in pool (max=40)
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
}
}
com.orientechnologies.common.concur.lock.OLockException: No more resources available in pool (max=40). Requested resource: remote:localhost/GratefulDeadConcerts
at com.orientechnologies.common.concur.resource.OResourcePool.getResource(OResourcePool.java:70)
at com.orientechnologies.common.concur.resource.OReentrantResourcePool.getResource(OReentrantResourcePool.java:84)
at com.orientechnologies.orient.core.db.ODatabasePoolAbstract.acquire(ODatabasePoolAbstract.java:158)
at com.orientechnologies.orient.core.db.ODatabasePoolAbstract.acquire(ODatabasePoolAbstract.java:138)
at com.orientechnologies.orient.core.db.ODatabasePoolBase.acquire(ODatabasePoolBase.java:128)
at ThreadExample$1.run(ThreadExample.java:22)