2012-06-20 19 views
5

Cố gắng tìm ra cách để mở một giao dịch với một nguồn dữ liệu thay thế trong grails. Tôi có datasources sau được xác định ...Grails 'withTransaction' với dữ liệu thay thếSource

dataSource { 
    dbCreate = "update" 
    url = "jdbc:h2:mem:testDb;MVCC=TRUE" 
} 

dataSource_ALT { 
    dbCreate = "update" 
    url = "jdbc:h2:mem:altDb;MVCC=TRUE" 
} 

tôi có thể làm điều này với các nguồn dữ liệu mặc định ...

Foo.withTransaction { status -> 
    //... 
} 

Nhưng khi tôi cố gắng và làm điều đó với các nguồn dữ liệu ALT, tôi có ngoại lệ - 'Không có bean giao dịchQuản lý được định cấu hình' ...

Foo.ALT.withTransaction { status -> 
    //... 
} 

Có cách nào để bắt đầu giao dịch bằng cách sử dụng nguồn dữ liệu khác không? Tôi đã thực hiện một số đào bới xung quanh và đã không thể tìm thấy nhiều.

Cảm ơn!

+0

Tôi chưa thử điều này, nhưng nếu nó không được hỗ trợ, có vẻ như một lỗi/yêu cầu bị thiếu trong việc thêm nhiều nguồn dữ liệu vào grails 2. Bạn sẽ phải sử dụng giải pháp thay thế bằng cách sử dụng '.withTransaction' đối với các đối tượng miền. nguồn dữ liệu. – krock

+0

Tính năng này có hoạt động nếu bạn không sử dụng phím tắt không? 'def sessionFactory_ALT def doStuff() { def tx = sessionFactory_ALT.currentSession.beginTransaction() tx.commit() tx.rollback() vv ... } ' – Raphael

Trả lời

0

@Raphael Đề xuất của bạn không hoạt động. Tôi đã có thể đi đến bước tiếp theo và nhận được withTransaction làm việc bằng cách chỉ định một người quản lý giao dịch. Chúng dường như được tạo ra, không được đính kèm. Chúng tồn tại như các bean Spring có tên là transactionManager_ALT (trong ví dụ này). Bạn không chắc chắn những gì thực sự tạo ra chúng, và tại sao chúng không được gắn vào GormStaticApi.

ví dụ ở đây bạn muốn làm:

Foo["ALT"].transactionManager = transactionManager_ALT 

lẽ sẽ cố gắng chọn một lớp miền và gán tất cả các nhà quản lý giao dịch khác nhau, xem nếu mà làm việc, sau đó sử dụng một lớp miền ở khắp mọi nơi để bắt đầu giao dịch.

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