2011-11-10 25 views
7

Tôi đã viết một ứng dụng Java nên được bắt đầu hoặc đánh thức khi 'cái gì đó' xảy ra trong cơ sở dữ liệu. Ví dụ: chèn vào bảng người dùng sẽ kích hoạt việc gửi thư chào mừng, mật khẩu, ... thông thường.postgresql - java - đánh thức ứng dụng khi một cái gì đó trong cơ sở dữ liệu xảy ra

Thực tiễn phổ biến nhất để thực hiện việc này là gì? Tôi có thể viết ứng dụng của mình sao cho nó thực hiện truy vấn sau, giả sử mỗi giây:

select mail from user where mail_sent = false 

Nhưng đây là bỏ phiếu và tôi muốn tránh nó. Có cách nào để bắt đầu hoặc đánh thức ứng dụng Java của tôi (push) được khởi xướng bởi một sự thay đổi trong cơ sở dữ liệu không?

Chúc mừng!

+0

thông tin quan trọng: Tôi chỉ muốn một trường hợp duy nhất của ứng dụng Java. Vì vậy, nếu hai người dùng được thêm một sau mỗi khác, tôi không muốn có một ví dụ thứ hai được bắt đầu. Đó là, các hành động được xử lý tuần tự bởi một cá thể duy nhất. –

Trả lời

2

Hãy xem NOTIFY

+1

Rất hữu ích. Một nhược điểm có vẻ như chúng ta vẫn phải POLL theo http://jdbc.postgresql.org/documentation/83/listennotify.html: "Một giới hạn quan trọng của trình điều khiển JDBC là nó không thể nhận các thông báo không đồng bộ và phải thăm dò phụ trợ để kiểm tra xem có thông báo nào được phát hành không. "Điều này có ý nghĩa gì với 'phụ trợ'? Chúng ta đang truy vấn cơ sở dữ liệu sau mỗi x giây hoặc truy cập vào phần phụ trợ JDBC trong bộ nhớ? –

+2

Có, với chương trình phụ trợ, chúng có nghĩa là cơ sở dữ liệu. Và có, người nghe đôi khi sẽ thăm dò ý kiến ​​cơ sở dữ liệu để xem liệu nó có thông báo hay không. Nếu bạn muốn các sự kiện không đồng bộ thực sự, bạn có thể xem Firebird. –

+1

Theo tài liệu của pgsql, chúng không đồng bộ. Nó chỉ là trình điều khiển JDBC có giới hạn không hỗ trợ các bản cập nhật không đồng bộ. Đó có lẽ là TO TO trên lộ trình của họ, tôi đoán vậy. –

3

Triggers trong PostgreSQL có thể được viết bằng một loạt các ngôn ngữ, trong số đó là PL/Java. Bạn có thể đặt trình kích hoạt trên các bảng yêu cầu giám sát này cho các hành động có liên quan (chèn, xóa, cập nhật ...) và kích hoạt việc chăm sóc thông báo. Nó có thể yêu cầu một số hình thức liên lạc giữa các quá trình, nhưng nếu cả hai kích hoạt và khách hàng được viết bằng Java mà không nên chứng minh quá khó khăn.

0

Tôi không nghĩ rằng có thể bắt đầu một ứng dụng. Tuy nhiên khi bạn có một ứng dụng đang chạy, ứng dụng đó có thể đăng ký để nghe các sự kiện. Bạn có thể sử dụng trình kích hoạt để đăng (thông báo) sự kiện cho các hành động nhất định.

Khi ứng dụng được thông báo về sự kiện, ứng dụng có thể phản hồi với một số tác vụ nhất định. Xem postgresql site for an example.

+0

Việc triển khai trợ giúp là rất hữu ích khi nghe nhiều sự kiện ở một số nơi trong mã của bạn. Cảm ơn vì điều đó! –

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