Phát sinh ngoại lệ

Một phần của tài liệu Ánh xạ từ IDL sang C++ (Trang 34 - 35)

7.1 Phát sinh các ngoại lệ.

Bạn cần chú ý rằng phơng thức servant chỉ đợc phép đa ra các ngoại lệ có trong danh sách các ngoại lệ đã đợc chỉ định. Điều này bao gồm tất cả các ngoại lệ của hệ thống CORBA bởi vì lớp cơ sở CORBA::SystemException có trong tất cả các ngoại lệ servant.

Khi đang đợc thực hiện C++ bảo vệ phơng thức servant khỏi bất cứ ngoại lệ nào không có trong danh sách chỉ định cho dù ngoại lệ đó đợc đa ra trực tiếp hay gián tiếp từ phơng thức servant.

Để đảm bảo các ngoại lệ đợc đa ra từ các servant, ORB và skeleton phải chứa tất cả các lời gợi servant trong khối catch để bẫy các ngoại lệ CORBA hoặc không phải CORBA.

- Tất cả các ngoại lệ phải đợc đa ra bằng phơng thức servant bao gồm ngoại lệ CORBA do ngời dùng định nghĩa và ngoại lệ chung của C++ đợc bắt bởi CORBA và bị chuyển thành ngoại lệ.

7.2 Các ngoại lệ hệ thống (System Exception)

Phơng thức servant có thể ném ngoại lệ CORBA: BAP_PARAM 1 trong các tham số có giá trị không mong đợi hoặc việc ném ngoại lệ CORBA: NO_MEMORY để báo rằng việc cấp phát cho tham số có độ dài thay đổi không thành công. Tuy nhiên ORB cũng sử dụng những ngoại lệ này để báo lỗi là nó xung đột trong khi cố gắng nhận yêu cầu hoặc trả lời yêu cầu. Khi client bắt lỗi hệ thống của CORBA trong trờng hợp đó, nó không biết đâu là nguyên nhân bởi CORBA thay việc thi hành servant.

Để tránh lộn xộn giữa ORB và servant. Bạn nên tránh trực tiếp ném ngoại lệ .CORB thay vào đó nên sử dụng ngoại lệ ng… ời dùng định nghĩa để báo lỗi . Điều này dẫn đến bạn phải xem xét các khả năng gây lỗi khi thiết kế giao tiếp IDL và khai báo các lỗi đó trong mỗi mệnh đề raise

Trên một bộ điều hợp đối tợng yêu cầu 1 đối tợng mà nó không tồn tại thì ứng dụng sẽ chờ đợi một ngoại lệ .…

Khi phơng thức servant loại bỏ một ngoại lệ ORB sẽ giải phóng bất cứ vùng nhớ nào mà nó cấp phát cho tham số vào và ra, . Có tham số ra và giá trị…

trả về và sắp xếp các ngoại lệ cho để trả về client. Vì vậy phơng thức servant phải cẩn thận giải phóng vùng nhớ mà nó đã cấp phát cho tham số ra hoặc giá trị trả về mà không bị phân khoảng bộ nhớ.

Sử dụng kiểu _var trong các phơng thức servant để quản lý cấp phát động các thể hiện cho đến khi chúng trả về giá trị cho ngời gọi không gây rò rỉ tài nguyên chúng nhận đợc

Một phần của tài liệu Ánh xạ từ IDL sang C++ (Trang 34 - 35)