Phần này đề cập đến những phương thức của aglet có thể được viết đè bởi người lập trình, những phương thức được yêu cầu bởi hệ thống như các sự kiện quan trọng trong vòng đời của aglet. Các sự kiện chính trong vòng đời của aglet:
- Creation : Tạo mới hoặc nhân bản tác tử - Disposal : Hủy bỏ tác tử khỏi môi trường - Mobility : Gửi tác tử đi và thu hồi tác tử
- Persistence : Kích hoạt (Activation) và tạm dừng hoạt động (Deactivation) Khởi tạo Aglet : Aglet được tạo ra theo một trong hai cách : Tạo một thể
hiện từ lớp dẫn xuất của lớp Aglet hoặc nhân bản từ một aglet đã sẵn có. Hủy bỏ aglet : Aglet còn đang hoạt động trong môi trường thì nó sẽ chiếm
xa thì trạng thái hiển thị là cực tiểu, vì vậy cần quan tâm đến vấn đề hủy bỏ aglet khi nó đã hoàn thành nhiệm vụ của mình trả lại tài nguyên cho hệ thống, để aglet tự hủy chính bản thân nó ta sử dụng phương thức dispose(), chú ý rằng phương thức này được định nghĩa sẵn là final nghĩa là sẽ không thay đổi được mã lệnh bên trong phương thức này.
Mô hình sự kiện dựa trên chủ thể : Mô hình này cung cấp quá trình tiến hành một cách đồng bộ: nhân bản, di chuyển và khôi phục. Một aglet khi được nhân bản, di chuyển hay được lưu lại trên bộ nhớ thứ cấp, một con số nào đó phụ thuộc vào sự kiện sẽ được gửi đến aglet. Một sự kiện aglet được truyền từ hệ thống tác tử tới đối tượng lắng nghe của aglet bằng việc yêu cầu một phương thức trên bộ lắng nghe và bỏ qua thể hiện của lớp con sự kiện. Nhân bản Aglet : Nhân bản là một cách khác để tạo ra một aglet mới. Nếu
đã có một aglet đang hoạt động trong môi trường, có thể tạo ra một bản sao chép của aglet đó bằng cách sử dụng phương thức clone() của aglet. Cần chú ý rằng phương thức này không trả về một aglet thực sự mà là trả về proxy của aglet.
Di chuyển Aglet : Aglet có hai cách để di chuyển là gửi đi và thu hồi. Gửi đi là sự di chuyển của tác tử từ môi trường nguồn đến môi trường đích. Thu hồi là việc kéo aglet từ môi trường hiện thời quay trở về môi trường nguồn. Sử dụng lại Aglet : Aglet được lưu trữ tạm thời trên bộ nhớ thứ cấp, sau khi
aglet được kích hoạt nó có thể khôi phục lại trạng thái trước đó và tiếp tục hoạt động.
Môi trường Aglet : Phần này giới thiệu một thành phần quan trọng của giao diện lập trình ứng dụng aglet (Aglet API) là giao diện AgletContext
- Tạo một Aglet : Sử dụng phương thức createAglet() để tạo một aglet mới theo cú pháp sau :
public abstract AgletProxy AgletContext.createAglet(URL codeBase, String code, Object init)
Phương thức này tạo ra thể hiện của một aglet được định nghĩa trong lớp Aglet. Khi một aglet được khởi tạo thành công, nó sẽ được chèn thêm vào trong khung cảnh hiện tại và bắt đầu hoạt động từ phương thức onCreation(), tiếp theo là phương thức run().
- Code và codebase :codebase là một trong hai tham số cần thiết để xác định code cho một aglet. Codebase thực chất là một đối tượng của lớp URL, nó xác định đường dẫn đến tệp .class của aglet. Tham số thứ hai code xác định
đường dẫn đầy đủ của gói Java đã biên dịch, ví dụ: my.package.myAglet
my/package/myAglet.class. Codebase đóng một vai trò quan trọng, nó chỉ ra điểm để tải tệp .class của aglet. Nó không những sử dụng cho việc tạo ra aglet mà còn được sử dụng bởi một aglet khi nó cần khởi tạo một lớp mới trong quá trình hoạt động, trong trường hợp này aglet sử dụng codebase để tìm tệp .class cần thiết.
Trường hợp codebase là null thì biến môi trường AGLET_PATH sẽ được sử dụng.
- Codebase và lớp Mobility : Các aglet đều dựa trên những tệp .class ở trong codebase cũng như biến môi trường CLASSPATH, thông thường chỉ có các lớp trong codebase mới có thể được mang theo aglet khi chúng di chuyển trên mạng. Tuy nhiên, không phải tất cả các lớp có mặt trong codebase đều được vận chuyển đi theo aglet cùng một lúc, khi aglet di chuyển đến một môi trường ở xa, nó có thể cần thêm một số lớp để tiếp tục hoạt động, cần phải có một kết nối
Tìm kiếm Proxy : Proxy đóng một vai trò quan trọng trong việc tiếp cận aglet, thông qua proxy ta có thể truy nhập và giao tiếp với aglet tương ứng của nó. Sau đây trình bầy một số phương pháp để tìm kiếm proxy cục bộ của một aglet ở xa :
- Liệt kê proxy : Phương thức getAgletProxies() cho phép lấy một tập các proxy của những aglet hiện thời. Cú pháp thực hiện:
public abstract Enumeration AgletContext.getAgletProxies() - Lấy một proxy cục bộ : Môi trường cũng cung cấp một phương thức để lấy proxy của một aglet nếu biết được định danh của aglet và vị trí của nó. Cú pháp thực hiện:
public abstract AgletProxy AgletContext.getAgletProxy(AgletID identity)
- Lấy một proxy ở xa : Proxy của aglet ở xa muốn lấy được cần phải biết địa chỉ URL của môi trường ở xa chứa aglet và định danh của aglet, sau đó sử dụng
phương thức getAgletProxy() của môi trường theo cú pháp :
public abstract AgletProxy AgletContext.getAgletProxy(URL contextAddress, AgletID identity)
Thu hồi Aglet : Nếu muốn lấy chính aglet chứ không phải proxy của nó thì
ta dùng phương thức retractAglet() của môi trường theo cú pháp:
public abstract AgletProxy AgletContext.retractAglet(URL contextAddress, AgletID identity)
Phương thức này được sử dụng để kéo một aglet từ một môi trường ở xa trở về môi trường hiện hành. Kỹ thuật thu hồi cũng được dùng để vượt tường lửa. Giả sử máy phục vụ aglet nằm bên trong một tường lửa, trong khi đó bạn lại muốn aglet của mình thâm nhập vào mạng. Vấn đề đặt ra ở đây là tường lửa không cho phép
aglet quay trở lại máy phục vụ nằm bên trong nó, phương thức retractAglet()
Không chỉ có vượt tường lửa, phương thức này còn tỏ ra đặc biệt hiệu quả để thực thi những công việc khi người dùng đã ngắt kết nối mạng. Aglet có thể được gửi đi để thâm nhập vào mạng thực thi nhiệm vụ trong khi người dùng đã ngắt kết nối mạng, ở đâu và khi nào thì Aglet có thể quay trở về khi nó đã hoàn thành nhiệm vụ. Phương thức retractAglet() là một giải pháp cho vấn đề này, khi aglet được gửi đến một máy phục vụ ở xa thực thi nhiệm vụ, nó sẽ tồn tại ở đó cho đến
khi phương thức retractAglet() kéo nó quay trở về.