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



我对Java EE/EJB非常陌生,对它知之甚少。

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

我找到了一个很好的示例代码计算器示例。有没有人可以帮助我一步一步的程序如何运行NetBeans的例子?提前谢谢。

我建议你不要要使用链接的教程。它似乎是从2011年开始的,但它仍然谈论了很多部署描述符和主接口(旧的、坏的、丑陋的和不必要的)。如今)。

您可以参考JBoss关于EJB 3.0的教程。

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,
  • 一个独立的客户端,
  • a@PostConstruct方法。

我将向您展示如何使用最后一个选项,如果您可以使用单例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;
}
}

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

INFO: EJB NewSessionBean的可移植JNDI名称:(java:全球/EJBModule1/NewSessionBean !瑞士。NewSessionBean,java:全球/EJBModule1/NewSessionBean]
信息:9
INFO: EJBModule1 was在78毫秒内成功部署。


这个例子还显示了EJB 3.1的另一个特性——现在,您不仅不需要使用主接口,而且甚至不必使用任何接口。你可以直接使用你的类。

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


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

1。创建Web项目

(注意:你也可以用Web Project实现上面的例子——用单例EJB。在本例中,我们需要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;
}
}

4。创建调用业务逻辑的Servlet

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

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

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

@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->Web->JSP->Next->键入文件名(在我的例子中是calculator,因为Servlet代码使用这个名称(请查看getRequestDispatcher部分)。将文件夹输入值保留为空。->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. 输入应用程序

你应该知道你的GlassFish使用什么端口。我猜在NetBeans默认情况下它的37663。接下来是Web应用程序URL和JSP文件名。把这些组合在一起,你应该得到如下的内容:

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

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

最新更新