科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道比较Java EE 5平台和J2EE 1.4平台2

比较Java EE 5平台和J2EE 1.4平台2

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文比较了Java EE 5与J2EE 1.4,并演示Java EE 5是如何简化Java开发……

来源:IT专家网 2008年5月8日

关键字: 平台 J2EE1.4 JAVA EE 5 java

  • 评论
  • 分享微博
  • 分享邮件
单击“完成”后,IDE 将为 CUSTOMER 表和与 CUSTOMER 表关联的表生成实体类。如果在“项目”窗口中展开 ejb 源包,则可以看到 IDE 在 Web 应用程序项目的 ejb 包中创建了 Java 类 Customer.java 和 DiscountCode.java。

  您可以看到 IDE 只创建了两个类(为每个数据库表创建了一个类)。在“使用 NetBeans IDE 5.0 开发 J2EE 应用程序的快速入门指南”中使用“通过数据库生成 CMP 实体 Bean”时,IDE 会为每个表创建四个类。

  如果您在源代码编辑器中查看 Customer.java,则会注意到已使用了 @Entity 标注将类声明为实体类。其他标注还提供了附加信息,如实体类及其属性映射的数据库表和列。

  您还会注意到,通常在实体 Bean 中找到的大部分样板代码都不见了。这是因为在 Java EE 5 中,实体类不再需要诸如 ejbRemove、setMessage、setSessionContext、ejbActivate 和 ejbPassivate 之类的方法。

  对 Servlet 进行编码

  现在我们需要将 Servlet 添加到 Web 应用程序中。在 Java EE 5 中,我们不必将资源创建和查询代码添加到 Servlet 中,而是可以使用资源注入将这些工作交给容器来执行。可以使用标注将资源直接注入到 Servlet 中,并由容器来管理请求资源的创建和查询。在这种情况下,我们希望使用在持久性单元中指定的实体管理器。

  •   在“项目”窗口中右键单击项目节点,然后选择“新建”> "Servlet"。
  •   在“新建 Servlet”向导中,将 Servlet 命名为 CustomerDetails,并将 Servlet 放入名为 web 的包中。单击“完成”。单击“完成”后,将在源代码编辑器中打开 CustomerDetails.java。
  •   在源代码编辑器中打开的 CustomerDetails.java 上,单击鼠标右键,然后选择“持久性”>“使用实体管理器”,将 PersistenceContext 注入类中。IDE 将添加以下标注,该标注用于指定 Servlet 使用的持久性单元。请在类声明之上添加此标注。

@PersistenceContext(name = "persistence/LogicalName", unitName = "CustomerBookPU")

  IDE 还将添加以下标注,用于注入管理事务边界的资源:

@Resource
private UserTransaction utx;

  IDE 将在 Servlet 中添加以下缺省代码:

  public void persist(Object object) {
  try {
  Context ctx = (Context) new InitialContext().lookup("java:comp/env");
  EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName");
  utx.begin();
  // TODO:
  // em.persist(object); utx.commit();
  } catch(Exception e) {
  Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught", e);
  throw new RuntimeException(e);
  }
  }

  此代码用于查询 @PersistenceContext 定义的持久性单元和实体管理器的实例。

 在 CustomerDetails.java 中,将上面所显示的生成的查询代码修改为引用实体对象。完成后,经过修改的代码应如下所示(以粗体显示的代码表示已更改的行):

  public Customer findByID(Integer customerNr) {
  Customer customer = null;

  try {
  Context ctx = (Context) new InitialContext().lookup("java:comp/env");
  EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName");
  utx.begin();
  customer = em.find(Customer.class, customerNr);
  utx.commit();

  } catch(Exception e) {
  Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught", e);
  throw new RuntimeException(e);
  }
  return customer;
  }

  •   取消注释 processRequest 方法中的代码并添加下面以粗体显示的代码:

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet CustomerDetails</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Search Customer Information</h1>");
        String customerNr = request.getParameter("customer_nr");
        if((customerNr != null) && !(customerNr.equals(""))) {

            Customer customer = findByID(new Integer(customerNr));
            if(customer != null){
                out.println("Customer's info for nr. " + customerNr + ": " + customer.getName());
            }else{
                out.println("Customer not found.");
            }
        }
        out.println("<form>");
        out.println("Customer number: <input type='text' name='customer_nr' />");
        out.println("<input type=submit value=Select />");
        out.println("</form>");
        out.println("</body>");
        out.println("</html>");
        out.close();
    }

  •   按 Alt-Shift-F 组合键生成所有缺少的 import 语句。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章