NetBean 8 创建EJB

一. 介绍

百度了一下关于在NetBean开发环境里创建EJB的教程,没有找到好的例子,2天的调试过程,写下来帮助后人。

EJB (Enterprise Java Bean) 是一套高扩展性的开发企业级应用的开发结构,通常部署在JBoss, Glassfish, WildFly等服务器上, 更多介绍可参看链接

1. Entity Bean: 域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。

2. Session Bean: 用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。

3. Message Driven Bean: MDB是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。

二. 创建EJB模块

点击File --> New Project, 在Java EE目录下选择EJB Module:

给项目取一个名字Sample-EJB,选择合适的项目目录,然后点击下一步

选择Server, 我选的是GlassFish Server 4.1, Java EE Version是Jave EE 7.

三. 创建Application Class Library项目

点击File --> New Project, 在Java目录下选择Java Class Library:

给项目取一个名字Sample-Client,选择合适的项目目录,然后点击Next:

  

四. 创建Entity Bean

接下来创建一个Peoplede的entity class. Antity Class 一般对应了数据库的一个表,当你创建Entity Class 后NetBeans IDE会给该类添加@Entity标记来表示它是一个Entity类.

每一个Entity Class都必须有primary key. IDE会添加@ID标签在primary key上面, @GeneratedValue来表示primary key 是怎么产生的.

右击Projects窗口的Sample-Client --> New --> Other选择Persistence目录里的Entity Class:

下面的Create Persistence Unit可以不选择!

当点击Finish后,IDE会打开People.java文件编辑器,对People.java做如下修改:

 1 /*
 2  * To change this license header, choose License Headers in Project Properties.
 3  * To change this template file, choose Tools | Templates
 4  * and open the template in the editor.
 5  */
 6 package com.bruceyo.example.entity;
 7
 8 import java.io.Serializable;
 9 import javax.persistence.Entity;
10 import javax.persistence.GeneratedValue;
11 import javax.persistence.GenerationType;
12 import javax.persistence.Id;
13
14 /**
15  *
16  * @author bruce_000
17  */
18 @Entity
19 public class People implements Serializable {
20     private static final long serialVersionUID = 1L;
21     @Id
22     @GeneratedValue(strategy = GenerationType.AUTO)
23     private Long id;
24     private String firstName;
25
26     public String getFirstName() {
27         return firstName;
28     }
29
30     public void setFirstName(String firstName) {
31         this.firstName = firstName;
32     }
33
34     public String getLastName() {
35         return lastName;
36     }
37
38     public void setLastName(String lastName) {
39         this.lastName = lastName;
40     }
41     private String lastName;
42
43     public Long getId() {
44         return id;
45     }
46
47     public void setId(Long id) {
48         this.id = id;
49     }
50
51     @Override
52     public int hashCode() {
53         int hash = 0;
54         hash += (id != null ? id.hashCode() : 0);
55         return hash;
56     }
57
58     @Override
59     public boolean equals(Object object) {
60         // TODO: Warning - this method won‘t work in the case the id fields are not set
61         if (!(object instanceof People)) {
62             return false;
63         }
64         People other = (People) object;
65         if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
66             return false;
67         }
68         return true;
69     }
70
71     @Override
72     public String toString() {
73         return "com.bruceyo.example.entity.Customer[ id=" + id + " ]";
74     }
75
76 }

People.java代码

五. 创建Session Bean

EJB3.1能够轻松创建stateless的session bean, stateless session bean不保存相关用户的状态. 但它可以保存它的实例的状态.

通常用EJB Container来创建bean对象池,然后用对象池里的对象来处理用户请求.

右击Projects窗口的Sample-EJB --> New --> Other选择Enterprise JavaBean目录里的Session Bean:

给EJB取名字叫AccountService, 并写上包名; 选择Stateless, 同时下面的Remote in Project要选上!

按finish后,IDE会打开AccountService.java文件编辑器, 修改文件如下:

 1 /*
 2  * To change this license header, choose License Headers in Project Properties.
 3  * To change this template file, choose Tools | Templates
 4  * and open the template in the editor.
 5  */
 6 package com.bruceyo.sample.service;
 7
 8 import com.bruceyo.example.entity.People;
 9 import javax.ejb.Stateless;
10 import javax.persistence.EntityManager;
11 import javax.persistence.PersistenceContext;
12
13 /**
14  *
15  * @author bruce_000
16  */
17 @Stateless
18 public class AccountService implements AccountServiceRemote {
19
20     @PersistenceContext
21     private EntityManager em;
22
23     @Override
24     public People createAccount(String firstName, String lastName) {
25         People customer = new People();
26         customer.setFirstName(firstName);
27         customer.setLastName(lastName);
28
29         em.persist(customer);
30         return customer;
31     }
32
33     // Add business logic below. (Right-click in editor and choose
34     // "Insert Code > Add Business Method")
35 }

AccountService.Java代码

六. 创建持久单元Persistence Unit

创建一个Persistence Unit作为数据源的容器来管理Entities,

右击Projects窗口的Sample-EJB --> New --> Other选择Persistence目录里的Persistence Unit:

选择Data Source为jdbc/sample; 勾选Drop and Create, 如果数据库里有的话就丢弃原来的,记得查看下jdbc/sample里有哪些表!EJB的

打开刚刚创建的persistence.xml, 去掉Include All Entity Classes的勾,然后添加Entity Class.

结果如下:

七. 部署(Deploy) EJB模块

右键EJB模块,选择Build --> Deploy, NetBeans会自动部署EJB服务,可以到Services窗口查看GlassFish本地服务器有没有自动开启.

八. 创建一个Servlet Class来测试EJB

1, 创建一个Web Module:

点击File --> New Project, 在Java Web目录下选择Web Application:

添加项目名字Sample-Web, 选择合适的项目位置:

点击下一步,添加Context Path: /Sample-Web, 部署Web Application的时候要用到这个路径访问网站.

2, 创建 Servlet

右击Projects窗口的Sample-EJB --> New --> Other选择Enterprise JavaBean目录里的Session Bean:

点击Next--> Finish后,IDE打开AccountController.java的编辑器,修改如下:

 1 /*
 2  * To change this license header, choose License Headers in Project Properties.
 3  * To change this template file, choose Tools | Templates
 4  * and open the template in the editor.
 5  */
 6 package com.bruceyo.example.tester;
 7
 8 import com.bruceyo.example.entity.People;
 9 import com.bruceyo.sample.service.AccountServiceRemote;
10 import java.io.IOException;
11 import java.io.PrintWriter;
12 import javax.ejb.EJB;
13 import javax.servlet.ServletException;
14 import javax.servlet.annotation.WebServlet;
15 import javax.servlet.http.HttpServlet;
16 import javax.servlet.http.HttpServletRequest;
17 import javax.servlet.http.HttpServletResponse;
18
19 /**
20  *
21  * @author jGauravGupta
22  */
23 @WebServlet(name = "AccountController", urlPatterns = {"/AccountController"})
24 public class AccountController extends HttpServlet {
25     @EJB
26     private AccountServiceRemote accountService;
27
28
29     /**
30      * Handles the HTTP <code>POST</code> method.
31      *
32      * @param request servlet request
33      * @param response servlet response
34      * @throws ServletException if a servlet-specific error occurs
35      * @throws IOException if an I/O error occurs
36      */
37     @Override
38     protected void doPost(HttpServletRequest request, HttpServletResponse response)
39             throws ServletException, IOException {
40        response.setContentType("text/html;charset=UTF-8");
41         try (PrintWriter out = response.getWriter()) {
42             String firstName = request.getParameter("firstName");
43             String lastName = request.getParameter("lastName");
44
45             People customer = accountService.createAccount(firstName, lastName);
46             out.println("Customer["+customer.getFirstName()+"] : " + customer.getId());
47         }
48     }
49
50 }

AccountController.java代码

九. 添加HTML页面

编辑Sample-Web里的Index.html网页文件如下:

 1 <!DOCTYPE html>
 2 <!--
 3 To change this license header, choose License Headers in Project Properties.
 4 To change this template file, choose Tools | Templates
 5 and open the template in the editor.
 6 -->
 7 <html>
 8     <head>
 9         <title>TODO supply a title</title>
10         <meta charset="UTF-8">
11         <meta name="viewport" content="width=device-width, initial-scale=1.0">
12     </head>
13     <body>
14         <form action="AccountController" method="post" >
15         <input type="text" name="firstName" placeholder="First Name" />
16         <input type="text" name="lastName" placeholder="Last Name"/>
17         <input type="submit" value="Create"/>
18         </form>
19     </body>
20 </html>

然后右击Sample-Web, Build --> Deploy --> Run或在浏览器输入网址 http://localhost:8080/Sample-Web/

十. 运行代码结果

 -->

时间: 2024-12-23 13:15:03

NetBean 8 创建EJB的相关文章

Maven创建EJB项目结构

可以用maven创建EJB项目的结构. 1.打开cmd 2.输入一下内容 mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DarchetypeVersion=1.1 -DarchetypeRepository=http://repo.maven.apache.org/maven2 -DgroupId=com.XXX -DartifactId

使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(一)

[MyEclipse最新版下载] 一.创建一个EJB项目 1. 选择File>New Project,选择EJB Project,然后单击Next. 2. 在Project name字段中输入firstejb. 3. 为Specification Level选择J2EE 1.3选项,从目标运行时的下拉列表中选择MyEclipse Generic Runtime for J2EE 1.3,然后单击Next. 创建一个新的EJB项目 Project Name – 必须是有效的Eclipse Java

使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(四)

MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 四.运行XDoclet代码生成 通常每次更改XDoclet EJB配置.应用程序服务器设置或修改任何EJB bean实现类的XDoclet注释后,都应执行XDoclet. 现在是在firstejb项目上执行XDoclet并测试新的XDoclet设置的好机会,因为Trader EJB尚未使用新的XDoclet注释业务方法进行扩展. 1. 右键单击firstejb,然后选择MyEclipse>Run XDocl

使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(三)

MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 三.配置XDoclet支持的项目 默认情况下,MyEclipse EJB项目未配置使用XDoclet功能.本节主要为大家介绍使用XDoclet支持,并执行XDoclet代码生成来启用和配置firstejb EJB项目的步骤,以便获取Trader EJB的依赖源代码和部署组件. 首先将Standard EJB XDoclet配置添加到firstejb项目.本节的最终目标是生成XDoclet配置,用于创建MyEcli

使用NetBeans EJB 创建企业应用程序

使用 EJB 3.1 创建企业应用程序 本教程介绍了开发 Java EE 6 企业应用程序的基础知识,并说明了作为 Java EE 6 规范一部分引入的某些 EJB 3.1 技术功能.在本教程中,将创建一个企业应用程序,用户可通过该应用程序向数据库发布消息以及从中检索消息. 该应用程序包含一个 EJB 模块和 Web 模块.EJB 模块包含一个实体类.实体类的会话 Facade 以及消息驱动 Bean.Web 模块包含用于显示和发布消息的 Servlet 以及计算会话中的用户数的单个会话 Bea

MyEclipse+JBoss创建第一个EJB,部署并通过JNDI远程调用全过程

在EJB3规范中,Entity Bean被摒弃了,替代之的是实体与JPA(Java Persistence API,Java 数据持久化API)作为数据持久层解决方案.现在看看EJB3的规范: 图1 关于实体与JPA规范和hibernate之间的联系本文不care,本文的目的是研究SessionBean(会话企业bean),特别是无状态(stateless)SessionBean. 第一步 在myEclipse中新建一个EJB工程: 图2 JPA支持暂时不选,Maven也不启用,直接单击Fini

Java深度历险(二) EJB Session Bean有状态和无状态的区别与联系

刚开始对两种sessionbean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息.仔细分析并用实践检验后,会发现,事实恰好相反:有状态和无状态会话bean的本质区别是它们的生命期. 首先解释一个下面要用到的概念--用户:sessionbean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法.同一个类的不同实例对于session bean来说是不同的用户. 实例解析 有状态的StatefulEjb

EJB 介绍

EJB 编辑 EJB是sun的服务器端组件模型,设计目标与核心应用是部署分布式应用程序.凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台.EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准.其特点包括网络服务支持和核心开发工具(SDK). 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),

ADF_Starting系列6_使用EJB/JPA/JSF通过ADF构建Web应用程序之建立DataModel

2013-05-01 Created By BaoXinjian 一.摘要 在本教程中,您将使用甲骨文的JDeveloper 11 g版本11.1.2.0.0来构建一个web应用程序. 建立数据模型,您可以使用EJB图,EJB 3.0和Java Persistence API(JPA). web客户端使用JavaServer Faces(JSF). 创建一个主从复合结构主页查询和编辑功能的用户界面. 一个任务流,搜索功能,也作为一个地区添加到页面中. Building a Web Applica