2008-12-18 43 views
5

Tôi có 2 ứng dụng web khác nhau (gói thành các tệp chiến tranh khác nhau) cần chia sẻ một số dữ liệu qua bộ đệm (ehcache). Tôi muốn thử nghiệm ý tưởng này với bạn để xem nó có hiệu quả không.Truy cập cùng một ehcache từ 2 tập tin chiến tranh khác nhau

Ý tưởng của tôi là tạo một dịch vụ khởi động/truy cập vào gói ehcache và gói bên trong một cái bình. Sau đó đóng gói mà jar vào hai cuộc chiến tranh:

  • WAR1: ehcache-service.jar
  • WAR2: ehcache-service.jar

Sẽ ehcache làm việc trong một cấu hình như vậy?

+0

bạn có thể giải thích thêm về những gì bạn đang cố gắng thực hiện với bộ nhớ cache dùng chung không? – lucas

+0

Tôi muốn sử dụng nó làm khóa phân phối. Tôi có thể sử dụng một cơ sở dữ liệu để chỉ ra rằng một giao dịch đang diễn ra (nhưng tôi tin rằng đó là một mô hình chống). Usecase: War1 bắt đầu một tx, lưu trữ nó trong bộ nhớ cache. Điều này ngăn cản tx cùng bắt đầu. War2 vô hiệu hóa tx dựa trên sự kiện bên ngoài. – ashitaka

Trả lời

5

Bạn cần tạo một (các) jar riêng biệt với tất cả các lớp (và tất cả các phụ thuộc của chúng) trong trường hợp bạn lập kế hoạch cache và sau đó triển khai jar này cũng như ehcache.jar làm thư viện (tùy thuộc vào máy chủ ứng dụng nào sử dụng thủ tục có thể khác nhau), trong trường hợp Tomcat 6 có nghĩa là chỉ cần sao chép các thư mục vào thư mục lib.

Điều gì xảy ra sau đó là lớp ehcache và miền của bạn sẽ được tải bởi trình nạp lớp được tất cả các ứng dụng web chia sẻ, do đó các phiên bản sẽ được lưu vào bộ nhớ cache và có thể truy cập được trong bộ nhớ.

Các phụ thuộc của các lớp miền của bạn là quan trọng, vì vậy bạn nên xem liệu phương pháp này có khả thi trong dự án của bạn hay không. Nó cũng có thể ảnh hưởng đến cách bạn khởi động lại các ứng dụng web.


Ngoài ra, bạn nên lưu ý rằng bộ nhớ cache và chia sẻ không cần thiết. Cache là một tối ưu hóa. Nếu bạn đặt đối tượng dụ vào bộ nhớ cache, nó có thể bị gỡ bỏ ngay lập tức nếu, ví dụ, bộ nhớ cache không có đủ không gian lưu trữ hoặc cấu hình chính sách trục xuất. Vì vậy, có thể bạn phải xem lại cách bạn dự định sử dụng ecache nói chung.

+0

Tôi đang sử dụng Tomcat để các thư viện được chia sẻ bởi tất cả các ứng dụng web đi vào CATALINA_HOME/common/lib. Có một vấn đề phức tạp hơn vì tôi muốn tái tạo bộ nhớ đệm trên nhiều máy chủ tomcat trong một cụm. – ashitaka

+0

Tôi thích tuyên bố của bạn "Cache là một tối ưu hóa". Tôi có thể cần phải quay lại sử dụng cơ sở dữ liệu để lưu trữ trạng thái chia sẻ vì tôi có thể sử dụng mức cô lập SERIALIZABLE để đảm bảo đọc/ghi nhất quán. – ashitaka

2

Vấn đề cấu hình của bạn là mỗi cuộc chiến sẽ được nạp với Trình nạp lớp riêng biệt và sẽ có hai trường hợp dịch vụ ehcache của bạn - mỗi ứng dụng web có bản sao dịch vụ riêng. Bạn có thể triển khai dịch vụ lưu trữ của mình dưới dạng Dịch vụ web (ví dụ) và sử dụng dịch vụ này từ war1 và war2.

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