如何连接Java EE应用程序中的各个部分

Luc*_*uke 1 java ejb jpa java-ee

我正在制作一个Java EE应用程序,只是为了使用我在阅读书籍时学到的东西.我创建了一个简单的Entity和一个DAO对象,它在这个Entity上执行不同的操作,比如create,update等.然后在我的EJB中我想使用这个DAO对象,以便稍后我可以将它暴露给JSF等.

我在理解如何在我的应用程序的不同层中使用不同类的对象时遇到一些问题.我如何将它们彼此暴露?

我是否像常规Java SE那样做?拥有不同类的属性并在我想要的类中实例化它们?(不可能没有,我已经看过@Inject的使用等等,但我不明白它的一点.而且当我也可以使用它时)

我会介绍一些关于何时/如何使用不同注释以及如何连接不同层而不仅仅是显示它的代码的文本.

我在Java聊天,如果有人有空闲时间=)

jFr*_*tic 5

你问的是一般问题.在Java EE上获得一本不错的书(有很多).为了更好地理解依赖注入,我建议使用Weld官方文档.但是,这是一个典型示例,旨在向您展示如何连接不同的Java EE层:

JPA实体:

@Entity
public class Employee {

  @Id
  private Long id;

  private String name;

  //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

EJB bean:

@Stateless
public class EmployeeService {

  //The entity manager will be injected automatically  
  @PersistenceContext
  private EntityManager em;

  public Employee findEmployeeById(Long id) {
    return em.find(Employee.class, id);
  }

}
Run Code Online (Sandbox Code Playgroud)

JSF控制器(让我们假设它是CDI-bean):

@Named
@SessionScoped
public class EmployeeController implements Serializable {

  //using CDI @Inject annotation empService will be initialized automatically
  @Inject
  private EmployeeService empService;

  //this method can be called from .xhtml page
  public String obtainEmployeeName(Long id) {
    String empName = "";
    Employee emp = empService.findEmployeeById(id);
    if (emp != null) {
      empName = emp.getName();
    }
    return empName;
  }
}
Run Code Online (Sandbox Code Playgroud)

xhtml页面:

<h:outputText value="#{employeeController.obtainEmployeeName(3)}" />
Run Code Online (Sandbox Code Playgroud)

更新 一些可能有用的书:

  • Pro JPA 2:掌握Java Persistence API
  • 核心JavaServer Faces(第3版)
  • 使用GlassFish 3开始Java EE 6
  • 这些很受欢迎,涵盖了很多方面.