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

Java 在NetBeans中编译/运行EJB代码(初学者),java,netbeans,ejb-3.0,netbeans-7,Java,Netbeans,Ejb 3.0,Netbeans 7,我对JavaEE/EJB非常陌生,对它知之甚少 我已经下载了NetBeans(7.01)和GlassFish(3.01)。但是,我对EJB一无所知,也不知道如何在NetBeans中运行代码,其中包括一个简单的无状态会话Bean、一个JSP和一些servlet 我发现了一个很好的示例代码。任何人都可以通过给出如何运行NetBeans示例的逐步过程来帮助我吗?提前谢谢。我建议您不要使用链接教程。它似乎是从2011年开始的,但它仍然讨论了很多部署描述符和主界面(这些都是旧的、坏的、丑陋的,不必要的)

我对JavaEE/EJB非常陌生,对它知之甚少

我已经下载了NetBeans(7.01)和GlassFish(3.01)。但是,我对EJB一无所知,也不知道如何在NetBeans中运行代码,其中包括一个简单的无状态会话Bean、一个JSP和一些servlet


我发现了一个很好的示例代码。任何人都可以通过给出如何运行NetBeans示例的逐步过程来帮助我吗?提前谢谢。

我建议您不要使用链接教程。它似乎是从2011年开始的,但它仍然讨论了很多部署描述符和主界面(这些都是旧的、坏的、丑陋的,不必要的

您可以参考这篇关于EJB3.0的文章

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

1。创建您的EJB项目(EJB模块)

创建新项目:
Shift+Ctrl+N
->
javaee
->
EJB模块
->
下一步
。选择适合您的名称,然后点击
Next
。选择目标应用服务器(NetBeans应该建议您选择Glassfish服务器3.x)和JavaEE版本(选择JavaEE6)->
Finish

2。将EJB添加到项目中

现在您已经创建了EJB项目。在左侧的
Projects
选项卡中右键单击项目名称。选择
New
->
sessionbean
。选择任何适合您的名称,定义您的包并选择
Singleton
(如果您使用的是EJB3.0,您无法创建Singleton EJB-只需选择另一种类型)。确保未选中本地和远程接口。点击
Finish

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

3。调用EJB业务方法

您现在可以尝试使用它。您需要执行EJB类方法——要执行它,您需要有人调用您的方法。它可以是,即:

  • 一个servlet
  • 独立客户端
  • 一种
    @PostConstruct
    方法
我将向您展示如何使用最后一个选项,如果您可以使用单例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日志:

信息:EJB NewSessionBean的可移植JNDI名称: [java:global/EJBModule1/NewSessionBean!sss.NewSessionBean, java:global/EJBModule1/NewSessionBean]
信息:9
信息:EJBModule1已被删除 在78毫秒内成功部署


这个例子还展示了EJB3.1的另一个特性——现在,您不仅不需要使用主接口,甚至不需要使用任何接口。你可以直接使用你的类

注意,这个例子有几个地方不对劲。您不应该使用
System.out.println
指令,我没有使用业务接口,而是使用
this
调用业务方法,我没有使用servlet调用EJB的业务方法等等。
这只是一个非常简单的示例,可以让您开始EJB开发


根据要求,您可以在下面找到EJBServletJSP工作流的迷你教程:

1。创建Web项目

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

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

2。创建您的EJB

此时,它将是无状态EJB,因为它更好地反映了计算器bean应该是什么

您完全按照上面所述操作-只需在相应的窗口中选择
无状态
而不是
单例

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;
    }
}
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);
    }
}
4。创建将调用业务逻辑的Servlet

RMB在您的项目上或
Ctrl+N
->
Web
->
Servlet
->
Next
->定义Servlet名称及其包->
Next
->定义其URL模式(记住它-您需要它来访问您的Servlet)>
Finish

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

您的控制器(Servlet)需要使用EJB。你不想做任何查找或讨厌的样板代码。您只是通过使用注释定义Servlet将使用
计算器
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(-)
,因此它是您应该修改的唯一方法。
请参见下面的示例:

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;
    }
}
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
在项目上->
Web
->
JSP
->
下一步
->键入文件名(在我的例子中是它的
计算器
,如