Phát sinh sự kiện

Một phần của tài liệu xây dựng CMS MODULE cho hệ thống intranet của công ty TMA (Trang 105 - 109)

11. Lắng Nghe Sự Kiện Trên Repository (Observation)

11.1Phát sinh sự kiện

Một sự kiện được phát sinh hay được kích hoạt (Fired) khi có sự thay đổi xảy ra và sự thay đổi này được cập nhật lên Repository. Cũng cần nhắc lại là có những thay

đổi chỉ xảy ra tạm thời và những thay đổi tạm thời này chỉ được cập nhật thực sự lên Repository khi gọi đến phương thức save của đối tượng thay đổi tạm thời.

Phát triển CMS module cho hệ thống Intranet cuả Công ty TMA

Sự kiện sẽ không được phát sinh khi những thay đổi tạm thời xảy ra mà chữa

được lưu xuống Repository. Đối với những phương thức mà khi thực hiện phương thức

đó, nội dung của Repository bị thay đổi ngay lập tức (chẳng hạn những phương thức Workspace.copy hay Workspace.move) thì sự kiện sẽ được tạo ra. Thông tin về sự kiện được phát sinh có thể tìm thấy thông qua các phương thức được khai báo trong giao diện javax.jcr.observation.Event.

11.2 Các loi s kin

Mỗi loại sự kiện phát sinh có một giá trị kiểu long đại diện và các giá trị này là các hằng sốđược định nghĩa trước trong giao diện javax.jcr.observation.EventType

javax.jcr.observation.EventType long ITEM_ADDED long ITEM_CHANGED long ITEM_REMOVED long ITEM_VERSIONED long ITEM_RESTORED long LABEL_ADDED long LABEL_REMOVED long ITEM_LOCKED long ITEM_UNLOCKED long LOCK_EXPIRED

Phát triển CMS module cho hệ thống Intranet cuả Công ty TMA

Các loại sự kiện này có thể phân thành các nhóm sau

• Nhóm sự kiện liên quan đến những thay đổi trên các Item của

Repository, bao gồm: ITEM_ADDED, ITEM_REMOVED,

ITEM_CHANGED.

• Nhóm sự kiện liên quan đến việc quản lý phiên bản trên Repository, bao

gồm: ITEM_VERSIONED, ITEM_RESTORED, LABEL_ADDED,

LABEL_REMOVED.

• Nhóm sự kiện liên quan đến việc quản lý khoá (Locking) trên Repository, bao gồm: ITEM_LOCKED, ITEM_UNLOCKED, LOCK_EXPIRED .

11.3 Đối tượng lng nghe và x lý s kin

Để có thể xử lý các sự kiện xảy ra trên Repository, ứng dụng cần phải đăng ký với Repository đối tượng dùng để lắng nghe sự kiện trên Repository. Các đối tượng lắng nghe sự kiện này phải hiện thực hóa giao diện EventListener hay giao diện VetoableEventListener.

javax.jcr.observation.EventListener

void onEvent(Event event)

Phương thức này được gọi khi sự kiện xảy ra.

javax.jcr.observation.VetoableEventListener

void onEvent(Event event)

Phát triển CMS module cho hệ thống Intranet cuả Công ty TMA

Đối tượng EventListener được thông báo sự kiện xảy ra trên Repository một cách bất đồng bộ (asynchoronous). Điều đó có nghĩa là khi sự kiện xảy ra trong một giao tác (transaction) và chỉ đến khi giao tác được ủy nhiệm thì đối tượng EventListener mới được thông báo sự kiện xảy ra.

Đối tượng VetoableEventListener được thông báo sự kiện xảy ra trên Repository một cách đồng bộ (synchoronous). Điều đó có nghĩa là khi sự kiện xảy ra trong một giao tác (transaction) thì ngay lập tức sự kiện này sẽđược thông báo đến cho

đối tượng VetoableEventListener mà không cần phải đợi đến lúc submit giao tác. Nếu sự kiện đã được đăng ký bởi đối tượng VetoableEventListener với Repository (có nghĩa là ứng dụng không muốn sự kiện đó xảy ra trên Repository khi ứng dụng thực hiện) và trong một giao tác, sự kiện này lại xảy ra thì khi thực hiện phương thức save

để cập nhật dữ liệu xuống Repository sẽ phát sinh lỗi ActionVetoedException và khi

đó giao tác này sẽđược RollBack. (adsbygoogle = window.adsbygoogle || []).push({});

11.4 La chn s kin để lng nghe

Để giảm số lượng sự kiện mà một đối tượng nhận sự kiện phải lắng nghe trên Reporitory, khi đăng ký đối tượng nhận sự kiện với Reporitory, Ta có thể tạo thêm một

đối tượng dùng để lựa chọn chỉ lắng nghe và xử lý những sự kiện nào thực sự cần thiết cho ứng dụng đang xây dựng. Đối tượng này phải hiện thực hóa giao diện EventSelector.

11.5 Các s kin xy ra đối vi mt hành động trên Repository

11.5.1 Hành động thêm mt Item

Khi một Node hay một Property mới được thêm vào Repository thì các sự kiện sau sẽ xảy ra:

Phát triển CMS module cho hệ thống Intranet cuả Công ty TMA

• Sự kiện ChangeEvent tương ứng với Item mới được thêm vào. Trong đó

ƒ getType() trả về EventType.ITEM_ADDED

ƒ getItem() trả về Item vừa được thêm vào

ƒ getOldItem() trả về giá trị null

• Sự kiện ChangeEvent tương ứng với Node cha. Trong đó

ƒ getType() trả về EventType.ITEM_CHANGED

ƒ getItem() trả về Node cha của Item mới được thêm vào

ƒ getOldItem() trả về bản sao của Node cha trước khi thêm Item

Một phần của tài liệu xây dựng CMS MODULE cho hệ thống intranet của công ty TMA (Trang 105 - 109)