Tôi đang phát triển một ứng dụng web Java dựa trên hành vi của nó thông qua các tệp cấu hình XML lớn được tải từ một dịch vụ web. Vì các tệp này không thực sự cần thiết cho đến khi một phần cụ thể của ứng dụng được truy cập, chúng được tải một cách lười biếng. Khi một trong các tệp này được yêu cầu, truy vấn được gửi đến webservice để truy xuất tệp tương ứng. Vì một số tệp cấu hình có khả năng được sử dụng nhiều, thường xuyên hơn nhiều so với những người khác tôi muốn thiết lập một số loại bộ nhớ đệm (có thể là thời gian hết hạn 1 giờ) để tránh yêu cầu cùng một tệp nhiều lần.Ứng dụng web Java: Cách triển khai các kỹ thuật lưu bộ nhớ đệm?
Các tệp được dịch vụ web trả về giống nhau cho tất cả người dùng trên tất cả các phiên. Tôi không sử dụng JSP, JSF hay bất kỳ khung công tác ưa thích nào khác, chỉ là các servlet đơn giản.
Câu hỏi của tôi là, những gì được coi là thực tiễn tốt nhất để triển khai bộ nhớ cache tĩnh toàn cục như vậy trong một ứng dụng web java? Là một lớp singleton thích hợp, hoặc sẽ có những hành vi kỳ lạ do các container J2EE? Tôi có nên phơi bày điều gì đó ở đâu đó thông qua JNDI không? Tôi phải làm gì để bộ nhớ cache của tôi không bị vướng vào môi trường nhóm (OK, nhưng không cần thiết, để có một bộ nhớ cache cho mỗi máy chủ nhóm)?
Với thông tin ở trên, nó sẽ là một thực hiện chính xác để đặt một đối tượng chịu trách nhiệm về bộ nhớ đệm như là một thuộc tính ServletContext?
Lưu ý: Tôi không muốn tải tất cả chúng khi khởi động và được thực hiện với nó vì điều đó sẽ
1). quá tải webservice bất cứ khi nào ứng dụng của tôi khởi động
2). Các tệp có thể thay đổi trong khi ứng dụng của tôi đang chạy, vì vậy, tôi sẽ phải yêu cầu lại chúng
3). Tôi vẫn cần có bộ nhớ cache có thể truy cập toàn cầu, vì vậy câu hỏi của tôi vẫn giữ
Cập nhật: Sử dụng proxy caching (như mực) có thể là một ý tưởng hay, nhưng mỗi yêu cầu vào webservice sẽ gửi truy vấn XML khá lớn trong bài đăng Dữ liệu, có thể khác nhau mỗi lần. Chỉ có ứng dụng web thực sự biết rằng hai cuộc gọi khác nhau tới webservice thực sự là tương đương.
Nhờ sự giúp đỡ của bạn
Cảm ơn bạn, nhưng điều đó không thực sự trả lời câu hỏi của tôi. Nếu tôi quyết định sử dụng EHCache, làm thế nào để tôi thiết lập nó trong một thùng chứa java ee để nó hoạt động bình thường trong các phiên làm việc, các rối loạn bộ nạp lớp khác nhau và trong môi trường nhóm? – LordOfThePigs
Tôi không tin rằng Squid sẽ là giải pháp đúng đắn. Nó có vẻ rất thông minh, tuy nhiên tôi không tin rằng các dịch vụ web sẽ tôn trọng "nếu sửa đổi" – monksy