Thứ Bảy, 7 tháng 1, 2017

Entity Manager

I.Định Nghĩa

1.EntityManage
EntityManager là một giao diện (interface) cung cấp các API cho việc tương tác với các Entity. Một số chức năng cơ bản của EntityManager như:

  • Persist: phương thức này dùng để lưu một thực thể mới tạo vào cơ sở dữ liệu
  • Merge: dùng để cập nhật trạng thái của entity vào cơ sở dữ liệu.
  • Remove: xóa một thể hiện của entity.

2.Persistence Contexts

Persistence Contexts là tập hợp các entity và các entity này chính là các managed. EntityManager kiểm soát lifecycle và có thể truy cập tài nguyên kho dữ liệu. Khi Persistence Contexts kết thúc thì các entity managed trở thành các detached. Các detached này sẽ không còn chịu sự kiểm soát của EntityManager và đồng thời cũng mất quyền truy cập vào cơ sở dữ liệu. Thường thì các detached sẽ được gọi và query lại thành một EntityManager mới với các tính năng tương tự.

II. Áp Dụng

@Stateless
public class ProjectServiceBean implements ProjectService {
@PersistenceContext(unitName = "EmployeeService")
EntityManager em;
public void assignEmployeeToProject(int empId, int projectId) {
Project project = em.find(Project.class, projectId);
Employee employee = em.find(Employee.class, empId);
project.getEmployees().add(employee);
employee.getProjects().add(project);
}
// ...
}

1.Extended

@Stateful
public class DepartmentManagerBean implements DepartmentManager {
@PersistenceContext(unitName = "EmployeeService",
type = PersistenceContextType.EXTENDED)
EntityManager em;
Department dept;
public void init(int deptId) {
dept = em.find(Department.class, deptId);
}
public void setName(String name) {
dept.setName(name);
}
public void addEmployee(int empId) {
Employee emp = em.find(Employee.class, empId);
dept.getEmployees().add(emp);
emp.setDepartment(dept);
}
// ...
@Remove
public void finished() {
}
}
2.Application
public class EmployeeClient {
public static void main(String[] args) {
EntityManagerFactory emf
= Persistence.createEntityManagerFactory("EmployeeService");
EntityManager em = emf.createEntityManager();
List emps = em.createQuery("SELECT e FROM Employee e").getResultList();
for (Employee e : emps) {
System.out.println(e.getId() + ", " + e.getName());
}
em.close();
emf.close();
}
}
3.In Controller Servlet
public class LoginServlet extends HttpServlet {
@PersistenceUnit(unitName = "EmployeeService")
EntityManagerFactory emf;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) {
String userId = request.getParameter("user");
// check valid user
EntityManager em = emf.createEntityManager();
try {
User user = em.find(User.class, userId);
if (user == null) {
// return error page
// ...
}
} finally {
em.close();
}
// ...
}
}
Các method() để tháo tác với database (CRUD):
  • persist – tạo mới một Employee
  • merge – thay đổi một Employee

III.Tổng Hợp

Ta có thể thấy EntityManager có thể được sử dụng bằng nhiều cách khác nhau để phù hợp với yêu cầu ứng dụng cần. Chúng ta có thể tìm hiểu về các thuật ngữ cốt lõi của JPA và tìm hiểu thêm về Persistence Contexts. Sau đó bao phủ ba loại khác nhau của EntityManager: giao dịch có phạm vi, mở rộng, và ứng dụng quản lý. Chúng ta có thấy các thiết kế được tạo ra để giải quyết các vấn đề mà ứng dụng yêu cầu như thế nào.

IV.Đánh Giá

EntityManager và  Persistence Contexts có quan hệ mật thiết tối quan trọng trong bài toán. Chúng được tạo ra để bổ sung và hỗ trợ lẫn nhau để có thể giải quyết các vấn đề, yêu cầu mà ứng dụng cần từ cơ bản đến phức tạp. Dựa vào các thiết kế này ta có thể giải quyết hầu hết các bài toán ứng dụng đưa ra trên nền tảng JavaEE.

Không có nhận xét nào:

Đăng nhận xét