2012-04-16 14 views
7

Tôi có bộ nhớ đệm được sao chép chạy trên một số nút weblogic cũng đang chạy OSB. Bộ nhớ đệm được bắt đầu với máy chủ như là một lớp khởi động. Nó có một bộ nhớ cache rất đơn giản của các đối tượng mà chỉ đơn giản là theo dõi cho dù họ đang sử dụng hay không với một thuộc tính boolean "có sẵn".Oracle Coherence: Làm thế nào để thiết lập thời gian chờ trên một cuộc gọi invoke trong một bộ nhớ cache nhân rộng?

Từ OSB Tôi đang tạo chú dẫn java cho cùng một lớp, gọi là "gọi" trên bộ nhớ cache với bộ xử lý đánh dấu đối tượng là không khả dụng và sau đó chạy Thread.sleep (31000). Đây là trình giữ chỗ cho một số xử lý kéo dài mà tôi muốn thêm sau.

Điều tôi muốn xảy ra, là nếu cuộc gọi invoke() mất quá nhiều thời gian, quá trình sẽ hết thời gian chờ và trả lại hoặc ném một ngoại lệ. Vì vậy, tôi đã cố gắng để cấu hình một thời gian chờ yêu cầu của 30000 mili giây để kiểm tra này. Thật không may tôi không thể tìm ra cách để làm cho thời gian chờ này xảy ra.

Tôi đã thử:

  • Bao bì các bộ xử lý trong một PriorityProcessor và gọi setRequestTimeout (30000) trước invoke()

  • Thêm <request-timeout> 30000 </request-timeout> đến <replicated-scheme/> phần tử trong bộ nhớ cache config

  • Thêm <tasktimeout> 30000 </tasktimeout> vào <replicated-scheme/> e lement trong cấu hình bộ nhớ cache

  • Thêm <guardian-timeout> 30000 </guardian-timeout> đến <replicated-scheme/> yếu tố trong cấu hình bộ nhớ cache

  • Tạo một Tangosol-gắn kết-override.xml và thêm một người giám hộ-timeout <init-param> để một <service > phần tử "loại" khớp với tên "dịch vụ" khớp với cấu hình bộ nhớ cache

  • Thay đổi lệnh sleep() thành Thread.sleep (310000) để xem liệu bất kỳ cài đặt mặc định nào sẽ khởi động sau 5 phút.

Không có kết quả nào trong bất kỳ loại thời gian chờ nào, bộ vi xử lý chỉ đơn giản là ngủ nhưng tôi đã nói và không trả lại lỗi.

Có ai đã làm điều gì đó tương tự trước đây và có thể cho tôi một số lời khuyên không? Nó sẽ được rất nhiều đánh giá cao.

Cảm ơn

James

Trả lời

2

OK, vì vậy tôi có câu trả lời, với một số sự giúp đỡ từ Tim Middleton.

Về cơ bản bộ nhớ cache được sao chép không hỗ trợ hết thời gian chờ và hóa ra đó không phải là lựa chọn thích hợp cho hệ thống của tôi!

Giải pháp là:

  1. Đổi thành một <distributed-cache> chương trình trong cấu hình bộ nhớ cache.
  2. Thêm <thread-count> phần tử vào lược đồ có số> 1 (tôi đã chọn 10 nhưng nó chỉ là tuy nhiên nhiều trường hợp đồng thời bạn muốn hỗ trợ).
  3. Sử dụng PriorityProcessor để bọc Trình xử lý mục nhập và đặt thời gian chờ bằng setRequestTimeoutMillis() trước khi gọi hàm gọi(). (Lưu ý đây là điều đầu tiên tôi đã thử, nhưng với loại bộ nhớ cache sai khi nó xuất hiện)
Các vấn đề liên quan