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做如下修改:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.bruceyo.example.entity; import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id; /**
*
* @author bruce_000
*/
@Entity
public class People implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName; public String getFirstName() {
return firstName;
} public void setFirstName(String firstName) {
this.firstName = firstName;
} public String getLastName() {
return lastName;
} public void setLastName(String lastName) {
this.lastName = lastName;
}
private String lastName; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} @Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
} @Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof People)) {
return false;
}
People other = (People) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
} @Override
public String toString() {
return "com.bruceyo.example.entity.Customer[ id=" + id + " ]";
} }
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文件编辑器, 修改文件如下:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.bruceyo.sample.service; import com.bruceyo.example.entity.People;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; /**
*
* @author bruce_000
*/
@Stateless
public class AccountService implements AccountServiceRemote { @PersistenceContext
private EntityManager em; @Override
public People createAccount(String firstName, String lastName) {
People customer = new People();
customer.setFirstName(firstName);
customer.setLastName(lastName); em.persist(customer);
return customer;
} // Add business logic below. (Right-click in editor and choose
// "Insert Code > Add Business Method")
}
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的编辑器,修改如下:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.bruceyo.example.tester; import com.bruceyo.example.entity.People;
import com.bruceyo.sample.service.AccountServiceRemote;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
*
* @author jGauravGupta
*/
@WebServlet(name = "AccountController", urlPatterns = {"/AccountController"})
public class AccountController extends HttpServlet {
@EJB
private AccountServiceRemote accountService; /**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
String firstName = request.getParameter("firstName");
String lastName = request.getParameter("lastName"); People customer = accountService.createAccount(firstName, lastName);
out.println("Customer["+customer.getFirstName()+"] : " + customer.getId());
}
} }
AccountController.java代码
九. 添加HTML页面
编辑Sample-Web里的Index.html网页文件如下:

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<form action="AccountController" method="post" >
<input type="text" name="firstName" placeholder="First Name" />
<input type="text" name="lastName" placeholder="Last Name"/>
<input type="submit" value="Create"/>
</form>
</body>
</html>
然后右击Sample-Web, Build --> Deploy --> Run或在浏览器输入网址 http://localhost:8080/Sample-Web/
十. 运行代码结果
-->
此时如果查看Services --> Databases --> jdbc:derby... --> sample --> People, 能看到JPA已经添加了一条数据到数据库
NetBean 8 创建EJB的更多相关文章
- Intellij Idea 创建EJB项目入门(一)
相关软件: 1.JBoss(jboss-as-7.1.1.Final):http://jbossas.jboss.org/downloads 2.Intellij IDEA 13.02 3.JDK 1 ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(三)
MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 三.配置XDoclet支持的项目 默认情况下,MyEclipse EJB项目未配置使用XDoclet功能. ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(二)
[MyEclipse最新版下载] 二.创建一个Session EJB – Part 1 MyEclipse中的EJB 2.x开发使用了EJB向导和集成XDoclet支持的组合. 每个EJB由三个基本部 ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(一)
[MyEclipse最新版下载] 一.创建一个EJB项目 1. 选择File>New Project,选择EJB Project,然后单击Next. 2. 在Project name字段中输入f ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(五)
MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 六.部署到JBoss服务器 1. 右键单击Servers视图,然后选择New>Server,选择您安 ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(四)
MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 四.运行XDoclet代码生成 通常每次更改XDoclet EJB配置.应用程序服务器设置或修改任何EJB ...
- Ejb3.0+jboss 8 创建EJB demo
工具:Eclipse , wildfly 8.x 1.服务端: 1)创建接口 package com.welv.ejb; public interface FirstEjb { public Stri ...
- Maven创建EJB
开发工具: eclipse mars wildfly jdk8 maven 右键新建project,选择other 勾选create simple project 填写信息(自行填写),完成后右键项目 ...
- JavaBean与EJB的区别与应用
JavaBean 是一种组件,它在内部有接口或有与其相关的属性,以便不同人在不同时间开发的 bean 可以询问和集成. EJB 是部署在服务器上的可执行组件或商业对象.有一个协议允许对其进行远程访问或 ...
随机推荐
- java基础算法之快速排序
快速排序(Quicksort)是对冒泡排序的一种改进.在大学学过之后现在基本忘了,最近在好多地方都看到说快速排序在面试会问到,于是自己也准备重新拾起以前忘记的东西来,慢慢的积累自己的基础知识.figh ...
- Ubuntu16.04 LTS下apt安装WireShark
Ubuntu16.04 LTS下apt安装WireShark 安装与配置 首先通过apt安装WireShark: $ sudo apt install wireshark 会同时安装许多的依赖包,其中 ...
- eclipse启动优化,终于不那么卡了!
eclipse启动优化,终于不那么卡了! 网上找了好多都是myEclipse的优化的,跟eclipse有点区别,找了很多方法还是不能让这个eclipse(Version: Kepler Release ...
- Android开发用过的十大框架
http://blog.csdn.net/u011200604/article/details/51695096 本文系多方综合与转载整合,意在Android开发中能够知道和使用一些好用的第三方支持, ...
- PAT 1050. 螺旋矩阵(25)
本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...
- C语言学习 第九次作业总结
本次作业练习的内容是二维数组.下面我先简单的说下二维数组的基本知识点: 二维数组其实这个中文概念颇有误导--会让人感觉这是一个两个维度的概念.所以很多的国外的C语言书籍上会称这种数组为多下标数组:即首 ...
- Ext分页实现(前台与后台)
Ext分页实现(前台与后台)Spring+Mybatis 一.项目背景 关于Ext的分页网上有很多博客都有提到,但是作为Ext新手来说,并不能很容易的在自己的项目中得以应用.因为,大多数教程以及博客基 ...
- FFmpeg 转码和截屏
转码 (flv转码为MP4,libx264是MP4编码格式 , -b 3000k是码率,比特率) ffmpeg -i /home/ghr/mp4/mp4.flv -vcodec libx264 -b ...
- 【原】iOS 同时重写setter和getter时候报错:Use of undeclared identifier '_name';did you mean 'name'
写了那么多的代码了,平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断.然后有时候根据 ...
- 我们常用,却容易忽视——CSS的BFC(Block formatting contexts)
BFC——一个我们容易忽视掉的布局神器 今天给大家说说BFC这个概念,在说概念前,先给大家看个例子: 首先,定义三个div块元素 效果: 我们发现,块级元素的排列顺序是从上往下,一块接着一块,在w ...