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

Có thể sử dụng lại dao trường hợp không? Hay chúng ta cần phải khởi tạo nó cho mỗi lần sử dụng?Ví dụ JDBI DAO có thể được tái sử dụng không?

Từ mã có vẻ như nó chịu trách nhiệm duy trì giao dịch DB. Tuy nhiên, trong DropWizard các ví dụ là: -

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

Vì vậy, trong cùng một tài nguyên, ví dụ này của dao sẽ được sử dụng lại ở tất cả các đường dẫn. Điều đó có nghĩa là khi hai yêu cầu được thực hiện cho cùng một tài nguyên (có thể trong hai đường dẫn) thì cả hai đều sẽ sử dụng cùng một cá thể dao. Điều này có gây ra vấn đề không?

Trả lời

4

onDemand sẽ nhận và giải phóng kết nối tự động, vì nó cần. Nói chung điều này có nghĩa là nó sẽ có kết nối để thực hiện một câu lệnh và sau đó phát hành ngay lập tức, nhưng nhiều thứ khác nhau như giao dịch mở hoặc kết quả dựa trên vòng lặp sẽ dẫn đến kết nối còn mở cho đến khi giao dịch hoàn thành hoặc kết quả lặp lại được duyệt hoàn toàn. Vì vậy, ngay cả khi hai yêu cầu đang truy cập vào cùng một tài nguyên, chúng sẽ được xử lý khác nhau. Vì vậy, nó sẽ không gây ra bất kỳ vấn đề.

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(); 
    } 
} 

Kết quả cho thử nghiệm này là,

[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] 

Bạn có thể thấy, OnDemand Đào tạo mọi xử lý mới khi truy cập phương pháp.

Các vấn đề liên quan