Học viên: Lê Thị Hoàng Anh _ Lớp 13B CNTT1 30
Đăng ký các Entity: Trong mô hình MVP để định nghĩa các model của ứng dụng bạn xây dựng các class entity sử dụng các annotation của objectify, sau đó đăng ký các lớp này với ObjectifyFactory:
Static {
ObjectifyService.register(TenLopModel.class) }
Việc đăng ký phải đƣợc thực hiện khi khởi chạy ứng dụng và trƣớc khi Objectify đƣợc sử dụng. Nó phải đƣợc thực hiện trong một đơn luồng không đƣợc thực hiện trong đa luồng. Bởi vậy tất cả các lớp entity (bao gồm cả các lớp con đa hình) phải đƣợc đăng ký gợi ý nên đăng ký trong một khởi tạo tĩnh đƣợc dùng khi khởi tạo ứng dụng.
Bởi vì objectify chỉ hỗ trợ trên server nên việc đăng ký các lớp này thƣờng đƣợc thực hiện trong các servlet file implement các service (đăng ký trong file web.xml, mỗi service đƣợc xác định path riêng với anotation @RemoteServiceRelativePath(tên pathservice) ) trong gói server của thƣ mục src.
Định nghĩa các entity: Các entity là các POJO rất đơn giản với các annotation đặc biệt của objectify và không sử dụng các chú thích (annotation) của JPA hay JDO. Một ví dụ định nghĩa lớp Users đơn giản nhƣ sau:
@Entity // annotation của Objectify
public class Users implements Serializable,IsSerializable { public @Id Long Id;
@Index public String Name; @Index public String Pwd;
public int State;
@Index public String Email; @Index public String Dienthoai;
public String Diachi;
public Users(String name, String pwd, int state, String email, String dienthoai,String
diachi){
this.Name= name;
this.Pwd=pwd;
this.State=state;
this.Email=email;
this.Diachi=diachi;
this.Dienthoai=dienthoai; }
public Users() {// TODO Auto-generated constructor stub }
public Long getId() {
return Id; }
public void setId(Long Id) { this.Id = Id;
}
//… Đã lược bỏ bớt các phương thức }
Học viên: Lê Thị Hoàng Anh _ Lớp 13B CNTT1 31 Trong đó:
- Các lớp thực thể phải đƣợc chú thích với @Entity (bắt buộc cho tất cả các lớp thực thể đã đăng ký, là một cách để xác định tên của một kind).
- Objectify chỉ chứa các trƣờng, nó không tự ánh xạ các trƣờng này tới datastore do vậy muốn thay đổi tên thuộc tính trong datastore phải thay đổi tên trƣờng. Trong objectify sẽ không tồn tại trƣờng đƣợc khai báo static, trƣờng đƣợc khai báo final hay trƣờng đƣợc chú thích với @Ignore trong các lớp entity. Những trƣờng đƣợc khai báo @Index có thể tạo các câu điều kiện if hay truy vấn (query) trên nó, tuy nhiên tốn nhiều không gian nhớ và thời gian thực hiện cpu hơn những trƣờng @Unindex(chế độ mặc định cho các trƣờng) để lƣu trữ.
- Các lớp thực thể(entity) phải chứa ít nhất và chỉ một trƣờng với chú thích @Id là một phần trong khóa xác định một entity. Trƣờng này phải có kiểu Long, long hoặc String. Nếu bạn dùng trƣờng này kiểu Long và lƣu một entity với một id null thì một giá trị số sẽ đƣợc tự động sinh ra cho bạn dùng cấp phát GAE chuẩn, trong trƣờng hợp bạn dùng hai kiểu còn lại thì id null không bao giờ đƣợc tự động cấp phát khi lƣu.
- Các lớp thực thể phải chứa ít nhất một phƣơng thức khởi tạo không có tham số hoặc không chứa một phƣơng thức khởi tạo nào mà lúc đó Java sẽ tự động tạo ra một phƣơng thức khởi tạo không chứa tham số.