Moin zusammen,
ich habe meine Base-X Applikation von Version 7.2 auf 7.6 und versuchsweise
auf 7.6.1 (Beta) umgestellt (embedded Base-X Server). Hierbei wirft die
BaseX Lib bei parallelen XQuery Anfragen bei gleichzeitigen Inserts (ich
verwende einen Threadpool) reproduzierbar die unten angehängte Fehlermeldung
(in Variationen auch mit anderen Fehlercodes, aber immer an der gleichen
Stelle/Zeile und beim gleichen Aufruf). Der Fehler tritt nicht bei jeder
Anfrage auf (es scheint also eine bestimmte Concurrency Situation
vorzuliegen).
Die betreffende Funktion im Applikationscode ist wie folgt:
public ArrayList<String> query(String inQuery, String[][] inArgs){
ClientSession mySession = null;
ClientQuery myQuery = null;
ArrayList<String> tmpString = new ArrayList<String>();
try {
mySession = getClientSession();
myQuery = mySession.query(inQuery);
// bind variable
if (inArgs != null){
for (int i=0; i < inArgs.length; i++){
myQuery.bind("$" + inArgs[i][0], inArgs[i][1]);
}
}
while (myQuery.more()){ // ** hier wird die Exception
geworfen **
tmpString.add(myQuery.next());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (myQuery != null){
try {
myQuery.close();
} catch (BaseXException e) {
// ignore
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return tmpString;
}
Hier noch getClientSession:
private static ClientSession getClientSession() throws IOException {
ClientSession mySession = new ClientSession("localhost", 1984,
"admin", "admin");
return mySession;
}
In der Version 7.2 war noch alles ok. Wahlweise habe ich auch schon
Java-Heap Space Fehler an gleicher Stelle bekommen. Und in einem Fall ist
die Datenbank plötzlich auf über 1GB angewachsen (vielleicht ein anderes
Problem). Bevor ich anfange hierzu einen Minimalcase zu produzieren (was
vermutlich recht aufwändig werden wird, da der Fehler nur unter
Lastbedingungen auftritt) liefere ich vorab schon mal diesen Fehlerbericht.
Vielleicht fällt ja direkt ein Problem ins Auge....
Wie immer vielen Dank für diese Klasse XML-DB und viele Grüße,
Bodo
-- Anhang Fehlermeldungen mit Version 7.6.1 (in 7.6 war die Zeilennr: 79)
org.basex.core.BaseXException: -146032
at org.basex.server.ClientQuery.cache(ClientQuery.java:81)
at org.basex.server.Query.more(Query.java:74)
at
de.infabswissarmy.control.XMLDBManagerBaseX.query(XMLDBManagerBaseX.java:86)
at
de.infabswissarmy.control.XMLDBManagerBaseX.queryDoc(XMLDBManagerBaseX.java:
121)
at de.infabswissarmy.control.QueryTask.httpQuery(QueryTask.java:180)
at de.infabswissarmy.control.QueryTask.run(QueryTask.java:271)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
Source)
at java.lang.Thread.run(Unknown Source)
org.basex.core.BaseXException: 0
at org.basex.server.ClientQuery.cache(ClientQuery.java:81)
at org.basex.server.Query.more(Query.java:74)
at
de.infabswissarmy.control.XMLDBManagerBaseX.query(XMLDBManagerBaseX.java:86)
at
de.infabswissarmy.control.XMLDBManagerBaseX.queryDoc(XMLDBManagerBaseX.java:
121)
at de.infabswissarmy.control.QueryTask.httpQuery(QueryTask.java:180)
at de.infabswissarmy.control.QueryTask.run(QueryTask.java:271)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
Source)
at java.lang.Thread.run(Unknown Source)
org.basex.core.BaseXException: java.lang.ArrayIndexOutOfBoundsException
at org.basex.server.ClientQuery.cache(ClientQuery.java:81)
at org.basex.server.Query.more(Query.java:74)
at
de.infabswissarmy.control.XMLDBManagerBaseX.query(XMLDBManagerBaseX.java:86)
at
de.infabswissarmy.control.XMLDBManagerBaseX.queryDoc(XMLDBManagerBaseX.java:
121)
at de.infabswissarmy.control.QueryTask.httpQuery(QueryTask.java:180)
at de.infabswissarmy.control.QueryTask.run(QueryTask.java:271)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
Source)
at java.lang.Thread.run(Unknown Source)