Tôi hiện đang truy xuất cả UserTransaction và DataSource từ máy chủ Weblogic 10.3 bằng JNDI.Làm thế nào để nhận được các kết nối JDBC thu được từ một nguồn dữ liệu JNDI để tham gia vào một UserTransaction sử dụng Weblogic 10.3?
tôi đã thiết lập các Datasource lên đến 'Hỗ trợ giao dịch toàn cầu' và sử dụng 'Logging Resource cuối'
Hy vọng của tôi là bằng cách bắt đầu một UserTranscation và sau đó lấy một kết nối JDBC từ Datasource kết nối sẽ tham gia vào sự giao dịch.
Điều này có vẻ như không đúng và các tuyên bố chèn của tôi đang được cam kết ngay lập tức và việc quay lại giao dịch sẽ không có hiệu lực.
Các giả định ở trên của tôi có đúng không?
Có ai có thể chỉ cho tôi theo hướng của một số tài liệu hoặc mẫu về cách đạt được điều này không?
Nhiều cảm ơn trước
UPDATE:
Theo yêu cầu ở đây là một phác thảo bộ xương của mã Tôi đang sử dụng:
private void doSomething() {
Connection conn = null;
try {
Hashtable env = new java.util.Hashtable();
env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
env.put(javax.naming.Context.PROVIDER_URL,"t3://localhost:8080");
InitialContext ctx = InitialContext(env));
UserTransaction transaction = null;
transaction = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
DataSource dataSource = (DataSource) context.lookup("jdbc/xxxxx/DataSource");
conn = dataSource.getConnection();
transaction.begin();
// JDBC code goes here
transaction.commit();
} catch(Exception e) {
// TODO
if (transaction != null) {
try {
transaction.rollback();
} catch (Exception ex) {
// TODO
}
} finally {
if (con != null) {
conn.close
}
}
}
UPDATE 2:
Để giải quyết vấn đề này tôi phải làm 2 việc:
Thay đổi thứ tự của mã để trước hết bắt đầu giao dịch người dùng và sau đó nhận kết nối từ Datastore (như được chỉ ra bởi Pascal Thivent).
Thay đổi Nguồn dữ liệu được tham chiếu bằng '' jdbc/xxxxx/DataSource '' thành XADatasource. Điều này là do tôi đã gọi mã bên trong giao dịch người dùng đã sử dụng Datasource khác đã được định cấu hình để hỗ trợ LLR và được Pascal Thivent chỉ ra bên dưới, bạn chỉ có thể có một LLAS Datasource tham gia vào quá trình chuyển mã.
Tôi đã chấp nhận câu trả lời của Pascal Thivent bên dưới vì giải thích cả hai vấn đề này.
Nhờ sự giúp đỡ của bạn cho đến nay. Tôi đã thêm đường viền khung của mã của tôi theo yêu cầu. – lucasweb
Tôi đã thử đề xuất của bạn. Nó dẫn đến lỗi sau: Kết nối đã được tạo trong ngữ cảnh tx này cho nhóm có tên ABI_DS. Nỗ lực bất hợp pháp để tạo kết nối từ một hồ bơi khác: AMS_DS Nơi ABI_DS là nguồn dữ liệu tôi đang sử dụng và AMS_DS là một nguồn dữ liệu khác được định cấu hình cho cùng một triển khai – lucasweb