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)
Il giorno mercoledì 4 gennaio 2017 15:19:46 UTC+1, [email protected]
ha scritto:
>
> Hi,
>
> May anyone use the orientdb with java so that it closes the used connections
> and avoids the error "Reached maximum number of concurrent connections" ?
>
> A simple test that I do. I'm using java8 and orientdb 2.2.14 with remote.
> Config sets don't work.
>
> val poolFactory = new OPartitionedDatabasePoolFactory()
> poolFactory.setMaxPoolSize(40)
>
> val pool = poolFactory.get("remote:db.adimplere.com.br/adimplere",
> "admin", "ab12HTT")
> val conn = pool.acquire()
>
> try {
>
> val query = StringBuilder.newBuilder
>
> query.append("SELECT @this.tojson(\"fetchPlan:*:-1\") AS itens FROM
> Parceiro limit 1000;")
>
> //connection.query(new OSQLSynchQuery[ODocument]("SELECT * FROM Cliente
> WHERE cpfCnpj=?").setFetchPlan("*:-1"))
>
> val res = conn.query[java.util.List[ODocument]](new
> OSQLSynchQuery[ODocument](query.toString)).asScala.toList
>
> val result = {
> if (res.isEmpty) {
> None
> } else {
> Some(res(0).field("itens"))
> }
> }
>
> result
>
> } finally {
> conn.close()
> pool.close()
> poolFactory.close()
> }
>
>
>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.