Salve ragazzi,
avrei un semplice quesito da porvi che mi sta però facendo impazzire.
Ho realizzato un'applicazione web in jsf, l'utente inserisce attraverso 6 pagine di form numerosi dati che vengono raccolti in un numero variabile di prepared statements e memorizzati in un arraylist di prepared statements.
Quando l'utente termina le operazioni,e solo alla fine, viene invocato il metodo executeTransaction che scorre l'arraylist ed esegue gli statement, effettuando commit o rollback di conseguenza. Il problema è che non riesco a far funzionare la transazione!Se metto o ometto il commit o il rollback non cambia niente!
Cmq se viene lanciata una sql exception l'inserimento avviene in maniera parziale !!!
Qualcuno può aiutarmi?
Uso la libreria mysql-connector-java-3.1.13 e tabelle innodb. Devo fare qualche altra cosa per usare le transazioni?
Ecco il mio metodo, vi prego aiutatemi,non so più cosa fare....
Grazie millecodice:public String executeTransaction() throws java.sql.SQLException { java.sql.Connection conn = null; javax.sql.DataSource dataSource = Singleton.getInstance() .getDataSource(); conn = dataSource.getConnection(); Experiment exp = (Experiment) ViewUtils.eval("#{experiment}"); List results = new ArrayList(); ResultSet rs = null; Statement stmt = null; boolean allgood = false; if (conn != null) { conn.setAutoCommit(false); //you can change Transaction Isolation level //conn.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITT_ED); conn.setSavepoint();//set rollback point try { for (int i = 0; i < exp.getExperiments().size(); i++) { ((java.sql.PreparedStatement) exp.getExperiments().get(i)) .executeUpdate(); if (i == (exp.getExperiments().size() - 1)) { conn.commit(); } } } catch (Exception e) { conn.rollback(); e.printStackTrace(); } } else { System.out.println("connessione non disponibile"); } return "submit"; }

Rispondi quotando


