在NetBeans中编译/运行EJB代码(初学者)

时间:2011-12-28 16:54:49

标签: java netbeans ejb-3.0 netbeans-7

我是Java EE / EJB的新手,对此知之甚少。

我已经下载了NetBeans(7.01)和GlassFish(3.01)。但是,因为我不知道EJB,并且没有得到如何在NetBeans中运行代码,其中包括一个简单的无状态会话Bean,一个JSP和一些Servlet。

我找到了一个很好的示例代码Calculator Example。任何机构可以通过一步一步的程序如何运行NetBeans示例来帮助我吗?提前谢谢。

1 个答案:

答案 0 :(得分:6)

我建议您使用链接教程。它似乎是从2011年开始的,但它仍然讨论了许多部署描述符和家庭界面(现在是旧的,坏的,丑陋的和不必要的)。

您可以参考这个关于EJB 3.0的JBoss tutorial

NetBeans对Java EE开发有很大的支持。只是一个非常快速的教程(在Java EE 6中):

<强> 1。创建EJB项目(EJB模块)

创建新项目:Shift + Ctrl + N - &gt; Java EE - &gt; EJB Module - &gt; Next。选择适合您的名称,然后点击Next。选择目标应用程序服务器(NetBeans应该建议您使用Glassfish Server 3.x)和Java EE版本(选择Java EE 6) - &gt; Finish

<强> 2。将EJB添加到项目中

现在您已经创建了EJB项目。右键单击左侧Projects选项卡中的项目名称。选择New - &gt; Session Bean。选择适合您的名称,定义您的包并选择Singleton(如果您使用EJB 3.0,则无法创建单独的EJB - 只需选择其他类型)。确保本地和远程接口未选中。点击Finish

您刚刚创建了第一个EJB; - )

第3。调用EJB业务方法

您现在可以尝试使用它。您需要执行EJB类方法 - 要做到这一点,您需要某人来调用您的方法。它可以是,即:

  • 一个servlet,
  • 独立客户端
  • @PostConstruct方法。

我将向您展示如何使用最后一个选项,如果您可以使用Singleton EJB,这似乎是最简单的选项。关于@PostConstruct带注释的方法,您需要了解的是,当应用程序容器创建您的bean时,它将被调用。它就像一个特殊类型的构造函数。

关键是您通常无法控制EJB初始化。但是,如果使用@Singleton EJB,则可以强制容器在服务器启动期间初始化bean。通过这种方式,您将知道在服务器启动期间将调用您的@PostConstruct方法。

此时,您应该拥有类似于以下代码的代码:

package your.package;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.LocalBean;
import javax.ejb.Startup;

@Singleton
@Startup
public class NewSessionBean {

    // This method will be invoked upon server startup (@PostConstruct & @Startup)
    @PostConstruct
    private void init() {
        int result = add(4, 5);
        System.out.println(result);
    }

    // This is your business method.
    public int add(int x, int y) {
        return x + y;
    }
}

运行此示例代码(工具栏上的绿色大箭头)后,您应该看到类似于此的GlassFish日志:

  

INFO:EJB NewSessionBean的可移植JNDI名称:   【JAVA:全球/ EJBModule1 / NewSessionBean sss.NewSessionBean,   Java的:全球/ EJBModule1 / NewSessionBean]
  信息:9
  信息:EJBModule1是   在78毫秒内成功部署。


此示例还显示了EJB 3.1的另一个功能 - 现在,您不仅不需要使用家庭接口,而且甚至不必使用任何接口。你可以直接使用你的课程。

请注意,此示例有几个问题。您不应该使用System.out.println指令,我没有使用业务接口但使用this来调用业务方法,我还没有使用Servlet调用我的EJB业务方法等等。
这只是一个让你开始EJB开发的一个非常简单的例子。


根据要求,您可以在下面找到EJB&lt; - &gt; Servlet&lt; - &gt; JSP工作流程的迷你教程:

<强> 1。创建Web项目

(注意:您可以使用Singleton EJB实现上述示例 - 使用Web Project。在这种情况下,我们需要Web Project,因为我们将在一个包中创建一个servlet和JSP。)

Ctrl + Shift + N - &gt; Java Web - &gt; Web Application - &gt; Next。设置应用程序的名称 - &gt; Next - &gt;默认设置很好(请记住上下文路径 - 您需要它来访问您的应用程序) - &gt; Finish

<强> 2。创建EJB

在这个时候,它将成为无状态EJB,因为它更好地反映了计算器bean应该是什么。

您完全按照上述说明操作 - 只需在相应的窗口中选择Stateless而不是Singleton

第3。将业务逻辑放入EJB

找到以下示例:

package com.yourpckg;

import javax.ejb.Stateless;

// Stateless EJB with LocalBean view (default when no interface is implementated)
@Stateless
public class Calculator {

    // Business method (public) that may be invoked by EJB clients
    public int add(int x, int y) {
        return x + y;
    }
}

<强> 4。创建将调用业务逻辑的Servlet

您项目上的人民币或Ctrl + N - &gt; Web - &gt; Servlet - &gt; Next - &gt;定义servlet名称及其包 - &gt; Next - &gt;定义其URL模式(记住它 - 你需要它来访问你的servlet) - &gt; Finish

<强> 5。定义Servlet和EJB之间的依赖关系。

您的控制器(Servlet)需要使用您的EJB。你不想做任何查找或讨厌的样板代码。您只需通过使用注释定义Servlet将使用您的Calculator EJB。

@EJB
Calculator calculator;

你把它作为一个字段放在你的servlet类中,所以它应该是这样的:

@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
public class MyServlet extends HttpServlet {

    @EJB
    Calculator calculator;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // ...
}

<强> 6。将控制器逻辑放入Servlet

默认情况下,NetBeans将所有HTTP方法请求委托给一个方法 - processRequest(-),因此它是您应该修改的唯一方法。
找到以下示例:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    try {
        // Fetch the user-sent parameters (operands)
        int operand1 = Integer.parseInt(request.getParameter("operand1"));
        int operand2 = Integer.parseInt(request.getParameter("operand2"));

        // Calculate the result of this operation
        int result = calculator.add(operand1, operand2);

        // Put the result as an attribute (JSP will use it)
        request.setAttribute("result", result);
    } catch (NumberFormatException ex) {            
        // We're translating Strings into Integers - we need to be careful...
        request.setAttribute("result", "ERROR. Not a number.");
    } finally {            

        // No matter what - dispatch the request back to the JSP to show the result.
        request.getRequestDispatcher("calculator.jsp").forward(request, response);
    }
}

<强> 7。创建JSP文件

您项目的

Ctrl + N - &gt; Web - &gt; JSP - &gt; Next - &gt;键入文件名(在我的例子中为calculator,因为Servlet代码使用此名称(请查看getRequestDispatcher部分)。将文件夹输入值保留为空。 - &gt; Finish

<强> 8。使用用户界面代码填充JSP文件

它应该是一个简单的表单,它定义了两个参数:operand1operand2,并将请求推送到您的servlet URL映射。在我的情况下,它类似于以下内容:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form action="MyServlet">
            <input type="text" name="operand1" size="3" value="${param['operand1']}" /> +
            <input type="text" name="operand2" size="3" value="${param['operand2']}" /> = 
            <input type="submit" value="Calculate" />
        </form>

        <div style="color: #00c; text-align: center; font-size: 20pt;">${result}</div>
    </body>
</html>

只需查看表单action属性值(它应该是您的Servlet URL映射。)。

  1. 输入您的申请
  2. 您应该知道GlassFish使用的端口。我想在NetBeans中默认为37663。接下来是Web应用程序URL和JSP文件名。将它们组合在一起你应该有类似的东西:

      

    http://localhost:37663/MyWebApp/calculator.jsp

    在两个输入文本中,您可以键入操作数,然后单击“计算”&#39;你应该看到结果。