2008-10-01 8 views
8

Chúng tôi đang sử dụng fmt: setBundle để tải một gói tài nguyên từ cơ sở dữ liệu (chúng tôi đã mở rộng lớp ResourceBundle để làm điều đó). Khi chúng tôi sửa đổi một giá trị trong cơ sở dữ liệu, chúng tôi phải tải lại máy chủ web để hiển thị giá trị mới trên ứng dụng web.Trong Java, làm thế nào để tải lại các gói tài nguyên động trong một ứng dụng web?

Có cách nào đơn giản để sử dụng giá trị mới mà không cần khởi động lại máy chủ web không?

(Chúng tôi làm không muốn luôn luôn tìm kiếm các giá trị từ cơ sở dữ liệu nhưng chúng tôi muốn làm mất hiệu lực bộ nhớ cache, ví dụ bằng cách gọi một đặc biệt 'admin' URL)

EDIT: Chúng tôi đang sử dụng JDK 1.4 , vì vậy tôi thích một giải pháp trên phiên bản đó. :)

+0

Nếu bạn không quá gắn bó với lớp ResourceBundle, thì trừu tượng MessageSource của Spring cung cấp một cách tiếp cận linh hoạt hơn, bao gồm bộ nhớ đệm và tải lại tin nhắn. Nó có thể bọc ResourceBundle tùy chỉnh của bạn. Bạn chỉ có thể sử dụng bit đó của Spring API, nếu cần. – skaffman

+0

Câu trả lời có thể là cụ thể đối với Servlet chứa (máy chủ ứng dụng) mà bạn đang sử dụng, ví dụ: Tomcat hoặc JBoss. Cái nào? –

+0

Chúng tôi đang sử dụng Tomcat để phát triển nhưng Máy chủ ứng dụng Websphere để sản xuất (5.X). – paulgreg

Trả lời

7

Nếu bạn đang sử dụng JDK 1.6, bạn có thể sử dụng các phương thức gọi lại getTimeToLive()needsReload() trong ResourceBundle.Control để kiểm soát bộ đệm gói cần được tải với các giá trị mới từ cơ sở dữ liệu.