2014-12-28 16 views
5
final MyDAO dao = database.onDemand(MyDAO.class); 

Können dao Instanzen wiederverwendet werden? Oder müssen wir es für jede Verwendung instanziieren?Kann JDBI DAO-Instanz wiederverwendet werden?

Aus dem Code sieht es aus wie es für die Pflege einer DB-Transaktion verantwortlich ist. Doch in DropWizard ist die Beispiele: -

final UserDAO dao = jdbi.onDemand(UserDAO.class); 
environment.jersey().register(new UserResource(dao)); 

also in derselben Ressource diese Instanz von dao auf allen Pfaden wiederverwendet werden. Das bedeutet, wenn zwei Anfragen an die gleiche Ressource (möglicherweise in zwei Pfaden) gestellt werden, dann verwenden beide die gleiche Dao-Instanz. Wird das nicht zu Problemen führen?

Antwort

4

onDemand erhalten und lösen Verbindung automatisch, wie es erforderlich ist. Im Allgemeinen bedeutet dies, dass es eine Verbindung erhält, um eine Anweisung auszuführen und sie dann sofort freizugeben. Verschiedene Dinge wie offene Transaktionen oder iteratorbasierte Ergebnisse führen jedoch dazu, dass die Verbindung offen bleibt, bis entweder die Transaktion abgeschlossen oder das iterierte Ergebnis vollständig durchlaufen wird. Selbst wenn zwei Anfragen auf dieselbe Ressource zugreifen, befinden sie sich in einem anderen Handle. Es wird also kein Problem verursachen. siehe

public abstract class Dao implements GetHandle { 

    public void printHandle() { 
     System.out.println(getHandle()); 
    } 

} 

@Test 
public void testHandle() { 
    Dao onDemandDao = dbi.onDemand(Dao.class); 
    Handle handle = dbi.open(); 
    Dao handleAttachedDao = handle.attach(Dao.class); 
    Dao openDao = dbi.open(Dao.class); 
    for(int i=0; i< 5; i++) { 
     onDemandDao.printHandle(); 
    } 
    for(int i=0; i< 5; i++) { 
     handleAttachedDao.printHandle(); 
    } 
    for(int i=0; i< 5; i++) { 
     openDao.printHandle(); 
    } 
} 

Die Ausgabe für diesen Test ist, kann

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

Sie, onDemand Dao jedes Mal schafft neue Griff, wenn der Zugang des Verfahrens.