2010-03-24 34 views
8

Trong cuộc phiêu lưu hiện tại của tôi về học tập ngủ đông và thiết lập nó để sử dụng hồ bơi kết nối của máy chủ ứng dụng, hầu hết các ví dụ và tài nguyên trên đó chỉ cho bạn theo hướng ràng buộc SessionFactory với tài nguyên JNDI trong máy chủ ứng dụng của bạn trong tiến trình.Tại sao liên kết hibernate SessionFactory thành tài nguyên JNDI?

Tôi tự hỏi lợi ích của việc này là gì? Vì bạn có thể truy cập vào một nhóm kết nối với việc thực hiện điều này.

Trả lời

10

Lý do tương tự bạn muốn sử dụng JNDI cho bất cứ điều gì, tôi muốn nói - di chuyển cấu hình ra khỏi ứng dụng, vào môi trường triển khai.

Với JNDI, về cơ bản bạn nói "ứng dụng này cần một số SessionFactory; tên của nó phải là X" và bạn hài lòng miễn là máy chủ ứng dụng có cấu hình là SessionFactory được gọi là X. Loại ngoại lệ này có một số lợi ích hấp dẫn:

  1. Bạn có thể sử dụng cấu hình cực kỳ khác nhau trên các máy khác nhau (sản xuất và sử dụng QA Oracle, nhà phát triển sử dụng HSQL, ...).

  2. Bạn không cần phải làm cho quá trình xây dựng của bạn nhận thức được cấu hình (không còn ant war_for_qa hoặc vặn xung quanh với các cấu hình Maven).

  3. Bạn không bị cám dỗ kiểm tra cấu hình trong điều khiển phiên bản, vì vậy mật khẩu cơ sở dữ liệu trực tiếp của bạn sẽ không được mọi người biết đến, thực tập, tư vấn hoặc nhân viên cũ có quyền truy cập kho lưu trữ.

  4. Hướng dẫn cài đặt/cấu hình của bạn sẽ không bao gồm các mục như "để định cấu hình đăng nhập cơ sở dữ liệu, chỉnh sửa tệp foo.properties trong tệp WAR", điều này chắc chắn sẽ dẫn đến cấu hình bị ghi đè trên máy chủ sản xuất. thời điểm bởi vì một sysadmin người đang làm việc tất cả các ngày cuối tuần đã xảy ra để triển khai một WAR không chỉnh sửa vì cà phê chạy ra vào chiều chủ nhật.

JNDI chỉ xảy ra được những "tiêu chuẩn" cách làm externalization này trong Java, có nghĩa là các nhà phát triển mới/quản trị viên sẽ không cần hai ngày đào tạo để học hỏi những khuyết tật của riêng, nhà brewn của bạn cấu hình hệ thống mà thực sự là khá thông minh nhưng có lỗi lạ này không ai muốn đi sâu vào bởi vì nó là thực sự lạ và anywho nó có một workaround khá đơn giản, & c.

liên quan:What is the purpose of JNDI?

+0

@gustafc Đó là những gì tôi hình dung. Tôi đã không chắc chắn nếu tôi đã bỏ lỡ một cái gì đó khác. Chúng tôi đang sử dụng JNDI cho hồ bơi kết nối của chúng tôi, vì vậy tôi đoán tôi đã tự hỏi nếu có một lợi ích bổ sung để di chuyển SessionFactory đến máy chủ ứng dụng là tốt. Trong trường hợp của chúng tôi, tôi không nghĩ rằng sẽ có, vì cấu hình cho nó là chính xác như nhau trên tất cả các máy chủ của chúng tôi. Nhân tiện, câu trả lời của bạn có lẽ là câu trả lời hay nhất mà tôi đã thấy trong một thời gian xa như rất rõ ràng và mang tính thông tin. –

+0

Tôi có đúng là mục đích chính là làm cho nó có sẵn trên nhiều ứng dụng được triển khai trên cùng một máy chủ không? Nếu đây là trường hợp một lợi thế lớn là bộ nhớ cache cấp 2 được chia sẻ của SF. SF của chúng tôi nằm trong '@ Singleton'' @ Startup' '@ EJB' vì chúng tôi chỉ triển khai một ứng dụng duy nhất. – djmj

+0

@djmj, có vẻ khả thi nhưng tôi thành thật không biết máy chủ ứng dụng xử lý như thế nào, vì tôi chưa bao giờ chạy vào ứng dụng bằng thiết lập Hibernate/JPA được xác định bên ngoài - hầu hết các ứng dụng dường như được triển khai theo cách bạn mô tả. Tôi có thể tưởng tượng nó có tác động đến sự ổn định, bảo mật vv và do đó * không * sử dụng bộ nhớ cache cấp 2 được chia sẻ. – gustafc

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