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

ale*_*dro 4 java netbeans ejb-3.0 netbeans-7

我是Java EE/EJB的新手,对它知之甚少.

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

我发现了一个很好的例子代码计算器实施例.任何机构可以通过一步一步的程序如何运行NetBeans示例来帮助我吗?提前致谢.

Pio*_*cki 6

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

您可以参考这篇关于EJB 3.0的JBoss教程.

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

1.创建EJB项目(EJB模块)

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

2.将EJB添加到项目中

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

你刚刚创建了你的第一个EJB ;-)

3.调用EJB业务方法

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

  • 一个servlet,
  • 一个独立的客户端,
  • 一种@PostConstruct方法.

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

关键是您通常无法控制EJB初始化.但是,如果您使用@SingletonEJB,则可以强制容器在服务器启动期间初始化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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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


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

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


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

1.创建Web项目

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

Ctrl + Shift + N- > Java Web- > Web Application- > Next.设置应用程序的名称 - > Next- >默认值很好(记住上下文路径 - 您需要它来访问您的应用程序) - > 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

4.创建将调用业务逻辑的Servlet

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

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

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

@EJB
Calculator calculator;
Run Code Online (Sandbox Code Playgroud)

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

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

    @EJB
    Calculator calculator;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

7.创建JSP文件

Ctrl + N在您的项目 - > Web- > JSP- > Next- >键入文件名(在我的情况下,它calculator,因为Servlet代码使用此名称(看看getRequestDispatcher部分).保留文件夹输入值为空. - > Finish.

8.使用用户界面代码填充JSP文件

它应该是一个定义两个参数的简单形式:operand1并将operand2请求推送到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>
Run Code Online (Sandbox Code Playgroud)

只需观察表单action属性值(它应该是您的Servlet URL映射.).

  1. 输入您的申请

您应该知道GlassFish使用的端口.我想在NetBeans中默认情况下是这样的37663.接下来是Web应用程序URL和JSP文件名.将它们组合在一起你应该有类似的东西:

HTTP://本地主机:37663/MyWebApp/calculator.jsp

在两个输入文本中键入操作数,单击"计算"后,您应该看到结果.

  • 如果您遇到EJB < - > Servlets连接问题并且您已经有了工作EJB,请给我一个标志. (2认同)