2016-08-04 61 views
4

Ich habe eine DAO-Schicht in meinem Projekt. Hier ist meine UsersDao Schnittstelle und es ist Implementierung UsersDaoImplWie mache ich Transaktionen in Service Layer

 public interface UsersDao {  
public Users insert(Users object); 
} 



public class UsersDaoImpl implements UsersDao { 

    @Override 
    public Users insert(Users object) { 

     String sqlQuery = null; 
     PreparedStatement stmt = null; 

     try (Connection connection = DbConnector.getConnection()) { 

      sqlQuery = "INSERT INTO `users`(login, password,passwordSalt, name, surname)" + " values (?, ?,?,?,?);"; 

      stmt = connection.prepareStatement(sqlQuery); 

      stmt.setString(1, "fsf"); 
      stmt.setString(2, "f"); 
      stmt.setString(3, "af"); 
      stmt.setString(4, "fddsg"); 
      stmt.setString(5, "sdgsgd"); 
      stmt.executeUpdate(); 
      stmt.close(); 
      return object; 

     } catch (SQLException e) { 
      System.err.println(e.getMessage()); 
      return null; 
     } 
    } 

Hier ist meine Dienst Schicht Klassen und Schnittstellen.

Was muss ich in meine Service-Methode schreiben, dass ich einen Rollback machen könnte, wenn die Ausnahme abgefangen wird? Wie schreibe ich Transaktion in meiner Service-Methode korrekt? Können Sie mir einige Beispiele zeigen? Danke!

+1

In Java EE, verwenden Sie in der Regel EJB dafür. Ist das in Ihrer Umgebung verfügbar? Weil die Tatsache, dass Sie JDBC-Boilerplate anstelle von JPA oneliner verwenden, stark darauf hinweist, dass Sie einen Barebone-Servletcontainer wie Tomcat anstelle eines normalen Java EE-Servers verwenden. – BalusC

Antwort

0

Erstens: Wenn eine Ausnahme auftritt, wird Ihr Dataset nicht eingefügt und daher zurückgesetzt.

Sie verwenden Transaktionen, wenn Sie separate atomare Operationen haben, die verkettet sind. Das heißt, wenn Sie einen Fehler haben, müssen Sie ein Rollback durchführen. Wenn Sie es jetzt manuell implementieren möchten, müssen Sie nachsehen, was Sie mit Punkt X getan haben, und dann alle Vorgänge rückgängig machen. Aber es ist sehr sehr anfällig für Fehler und super unflexibel. Daher empfehle ich, zu diesem Zweck das zugrundeliegende DB-System zu verwenden, das diese Funktionalität integriert. Oder verwenden Sie eine Persistenzschicht.

Wenn Sie JDBC verwenden compiant Fahrer hier Blick https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

+0

Nur als eine Nebenfrage. Ich hoffe, Sie werden Ihre Passwörter nicht im Klartext speichern? – sascha10000

+1

Nein! Ich werde es hacken! –