Lă bảng objec chứa objec bị khóa ,r lă REF nhận dạng objec.

Một phần của tài liệu LVTN - Xay dung giao dien lap trinh OCI.doc (Trang 59 - 60)

III. Binding and defining Oracle8 C datatypes

tlă bảng objec chứa objec bị khóa ,r lă REF nhận dạng objec.

Bản sao được đânh dấu khóa trong object cache sau khi gọi hăm OCIObjectLock() .

để khóa một graph hoặc một tập object thì gọi một số hăm OCIObjectLock() (mỗi hăm cho một object) , tốt hơn nín dùng mảng OCIObjectLock() .

Bằng việc khóa ứng dụng bảo đảm rằng object trong cache có thông tin mới nhất . Không có giao dịch năo khâc có thể sửa object trong khi ứng dụng khóa nó .

Khi kết thúc giao dịch , server tự động giải phóng câc khóa . Khóa trong bản sao object được reset .

Thực hiện optimistic locking

Có thể thực hiện optimistic locking trong một ứng dụng OCI nếu chạy câc transaction cùng một mức .

Orqcle8 OCI hổ trợ câc lời gọi hăm để tham chiếu câc object mă không phải khóa chúng , sửa chúng trong cache vă sau đó flush chúng văo CSDL .

Trong khi flush nếu một dirty object bị sửa bởi một giao dịch giân tiếp khâc từ khi bắt đầu giao dịch của bạn thì một lỗi giao dịch non-serializable được trả về . Nếu một trong câc dirty object được sửa bởi một giao dịch bất kỳ khâc thì câc thay đổi được ghi văo CSDL thănh công .

Hăm OCITransCommit() trước tiín flush câc dirty object trước khi giao cho một giao dịch khâc .

8 . commit vă Rollback câc ứng dụng object

Khi một giao dịch được chuyển giao (gọi hăm OCITranscommit()) tất cả câc object đê đânh dấu được flush văo server . Nếu một bản sao được tham chiếu trong thới gian giao dịch thì bản sao không được tham chiếu .

Khi một giao dịch được cuộn lại (rollback) thì tất cả câc object được unmarked . Nếu một bản sao được pinned trong thời gian tham chiếu thì bản sao đó lă unpinned .

GVHD :KS.Bùi Hoăi Thắng

Để quản lý việc giải phóng vùng nhớ thì object cache cố gắng sử dụng lại bất kỳ vùng nhớ năo . Object cache sử dụng lại vùng nhớ của một object khi thời gian sống(allocation duration) của object đê hết hoặc khi pin duration của object đê hết . Allocation duration được set khi một object được tạo ra bởi hăm OCIObjectnew() , pin duration được set khi một object được tham chiếu bởi hăm OCIObjectPin() . Pin duration cho một object không thể dăi hơn allocation duration .

Khi một object đưa ra việc kết thúc allocation duration của nó thì nó tự động bị xóa vă vùng nhớ của nó thể được sử dụng lại . Pin duration cho biết khi năo vùng nhớ đợc sử dụng lại vă vùng nhớ được sử dụng lại khi cache đầy .

OCI hổ trợ 2 duration được định nghĩa trước :

+ Transaction (OCI_DURATION_TRANS) : chết khi kết thúc transaction

+ Session (OCI_DURATIO_SESSION) : chết khi kết thúc session/connection

Ứng dụng có thể hoăn unpin một ứng dụng object bởi hăm OCIObjectUnpin() , có thể unpin tất cả object bởi hăm OCICacheUnpin() . Mặc định tất cả câc object bị unpin khi kết thúc pin duration .

Duration Example:

Table 11-2 Example of Allocation and Pin Durations

Ti

me Application Action Function

Object

Một phần của tài liệu LVTN - Xay dung giao dien lap trinh OCI.doc (Trang 59 - 60)