|
|
|
[
Permlink
| « Hide
]
Robin Shen [02/Apr/14 09:46 AM]
We always suggest to use external database for production usage as internal H2 database is not stable enough and is only for demonstration purpose.
Can you please run jstack against QB JVM and attach the thread dump when this happens?
After about 1 hour we restarted the server because nothing the UI did not respond anymore.
In the Engine code I discovered this for 1.3.167 (which is a bit newer as the used 1.3.159 which i call 1.5.159 in my previous comment by mistake): while (true) { session = openSession(ci, ifExists, cipher); if (session != null) { break; } // we found a database that is currently closing // wait a bit to avoid a busy loop (the method is synchronized) try { Thread.sleep(1); } catch (InterruptedException e) { // ignore } } So if session always returns null (and it seems that's the case) It blocks the object forever as the method is synchronized. In version 1.3.174: for (int i = 0;; i++) { session = openSession(ci, ifExists, cipher); if (session != null) { break; } // we found a database that is currently closing // wait a bit to avoid a busy loop (the method is synchronized) if (i > 60 * 1000) { // retry at most 1 minute throw DbException.get(ErrorCode.DATABASE_ALREADY_OPEN_1, "Waited for database closing longer than 1 minute"); } try { Thread.sleep(1); } catch (InterruptedException e) { // ignore } }
|