Guten Morgen,
wir haben folgendes Problem.
Wir haben eine JSF-Webapplikation in einem Tomcat 7 unter Java (build 1.6.0_18-b07) und einer MSSQL Express Datenbank am laufen, die wir selbst programmiert haben.
Grundsätzlich funktioniert die Anwendung auch, jedoch kommt es ab und zu mal vor, dass die Anwendung hängen bleibt. Das Logfile vom Tomcat und SQL Server gibt keine Auskunft über das hängenbleiben. Ich habe nun mal internsiver geschaut und merke dass die Anwendung in unserem DatenbankBean beim Befehl statement.executeQuery(sqlQuery) hängen bleibt. Darauf hin wollte ich auf die Tabelle in der Datenbank zugreifen mit einem Tool um zu schauen ob da was nicht stimmt. Dem war auch so, ihrgend wie scheint eine Sperre drauf zu sein, weil auch in dem Tool werden die Daten nicht geladen und die anfrage wird nicht abgeschlossen.
Ich zeig hier mal eine Select Methode die verwendet wird und eine Update Methode. Ich setzte das setAutoCommit(false). Evt. liegt es daran, dass sich die JDBC-Threads in die quere kommen und vor dem Fehler eiun Update gemacht wurde.
Ich hoffe es kann mir einer helfen, weil dass Problem leider innerhalb einer Woche dreimal aufgetreten ist. Es scheint mit der Anzahl der Anfargen zu tun zu haben.
Grüße und Danke
wir haben folgendes Problem.
Wir haben eine JSF-Webapplikation in einem Tomcat 7 unter Java (build 1.6.0_18-b07) und einer MSSQL Express Datenbank am laufen, die wir selbst programmiert haben.
Grundsätzlich funktioniert die Anwendung auch, jedoch kommt es ab und zu mal vor, dass die Anwendung hängen bleibt. Das Logfile vom Tomcat und SQL Server gibt keine Auskunft über das hängenbleiben. Ich habe nun mal internsiver geschaut und merke dass die Anwendung in unserem DatenbankBean beim Befehl statement.executeQuery(sqlQuery) hängen bleibt. Darauf hin wollte ich auf die Tabelle in der Datenbank zugreifen mit einem Tool um zu schauen ob da was nicht stimmt. Dem war auch so, ihrgend wie scheint eine Sperre drauf zu sein, weil auch in dem Tool werden die Daten nicht geladen und die anfrage wird nicht abgeschlossen.
Ich zeig hier mal eine Select Methode die verwendet wird und eine Update Methode. Ich setzte das setAutoCommit(false). Evt. liegt es daran, dass sich die JDBC-Threads in die quere kommen und vor dem Fehler eiun Update gemacht wurde.
Java:
public List<Entity> readTable(String number) throws DatabaseReadDataException, DatabaseOpenConnectionException, DatabaseCloseConnectionException {
List<Entity> resultList = null;
String sqlQuery = "SELECT ****";
Statement statement = null;
ResultSet resultSet = null;
try {
this.createConnection();
statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
resultSet = statement.executeQuery(sqlQuery); -> hier bleibt er hängen
resultSet.last();
long rowCount = resultSet.getRow();
if (rowCount != 0)
{
resultSet.beforeFirst();
resultList = new ArrayList<Entity>();
while(resultSet.next()){
//resultset wird gelesen
}
}
return resultList;
}
catch (SQLException ex) {
throw new DatabaseReadDataException(ex.getMessage());
}
finally{
try{
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
this.closeConnection();
}
catch (SQLException ex) {
throw new DatabaseCloseConnectionException(ex.getMessage());
}
}
}
Java:
public void update(List<Entity> entities) throws DatabaseOpenConnectionException, UpdateDatabaseEntryException, SQLException, DatabaseCloseConnectionException, DatabaseReadDataException {
Statement statement = null;
try {
this.createConnection();
//transaktion starten
connection.setAutoCommit(false);
connection.setHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT);
statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
for (int i = 0; i < entities.size(); i++) {
String sqlQuery = "UPDATE table .....";
int resultOfUpdate = statement.executeUpdate(sqlQuery);
if(resultOfUpdate <= 0)
{
connection.rollback();
throw new UpdateDatabaseEntryException("Fehler X");
}
}
connection.commit();
}
catch (SQLException ex) {
connection.rollback();
throw new UpdateDatabaseEntryException(ex.getMessage());
}
finally{
try{
if (statement != null) statement.close();
connection.setAutoCommit(true);
this.closeConnection();
}
catch (SQLException ex) {
throw new DatabaseCloseConnectionException(ex.getMessage());
}
}
}
Ich hoffe es kann mir einer helfen, weil dass Problem leider innerhalb einer Woche dreimal aufgetreten ist. Es scheint mit der Anzahl der Anfargen zu tun zu haben.
Grüße und Danke
Zuletzt bearbeitet: