一. 介绍

百度了一下关于在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. * Handles the HTTP <code>POST</code> method.
  30. *
  31. * @param request servlet request
  32. * @param response servlet response
  33. * @throws ServletException if a servlet-specific error occurs
  34. * @throws IOException if an I/O error occurs
  35. */
  36. @Override
  37. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  38. throws ServletException, IOException {
  39. response.setContentType("text/html;charset=UTF-8");
  40. try (PrintWriter out = response.getWriter()) {
  41. String firstName = request.getParameter("firstName");
  42. String lastName = request.getParameter("lastName");
  43.  
  44. People customer = accountService.createAccount(firstName, lastName);
  45. out.println("Customer["+customer.getFirstName()+"] : " + customer.getId());
  46. }
  47. }
  48.  
  49. }

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/

十. 运行代码结果

 -->

此时如果查看Services --> Databases --> jdbc:derby... --> sample --> People, 能看到JPA已经添加了一条数据到数据库

NetBean 8 创建EJB的更多相关文章

  1. Intellij Idea 创建EJB项目入门(一)

    相关软件: 1.JBoss(jboss-as-7.1.1.Final):http://jbossas.jboss.org/downloads 2.Intellij IDEA 13.02 3.JDK 1 ...

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

    MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 三.配置XDoclet支持的项目 默认情况下,MyEclipse EJB项目未配置使用XDoclet功能. ...

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

    [MyEclipse最新版下载] 二.创建一个Session EJB – Part 1 MyEclipse中的EJB 2.x开发使用了EJB向导和集成XDoclet支持的组合. 每个EJB由三个基本部 ...

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

    [MyEclipse最新版下载] 一.创建一个EJB项目 1. 选择File>New Project,选择EJB Project,然后单击Next. 2. 在Project name字段中输入f ...

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

    MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 六.部署到JBoss服务器 1. 右键单击Servers视图,然后选择New>Server,选择您安 ...

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

    MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 四.运行XDoclet代码生成 通常每次更改XDoclet EJB配置.应用程序服务器设置或修改任何EJB ...

  7. Ejb3.0+jboss 8 创建EJB demo

    工具:Eclipse , wildfly 8.x 1.服务端: 1)创建接口 package com.welv.ejb; public interface FirstEjb { public Stri ...

  8. Maven创建EJB

    开发工具: eclipse mars wildfly jdk8 maven 右键新建project,选择other 勾选create simple project 填写信息(自行填写),完成后右键项目 ...

  9. JavaBean与EJB的区别与应用

    JavaBean 是一种组件,它在内部有接口或有与其相关的属性,以便不同人在不同时间开发的 bean 可以询问和集成. EJB 是部署在服务器上的可执行组件或商业对象.有一个协议允许对其进行远程访问或 ...

随机推荐

  1. [No000092]SVN学习笔记3-Import/Checkout(迁入/迁出),GetLock(加锁)

    一.TortoiseSVN Client 获取服务器端的文件到新的本地文件夹 1.在本地新文件夹上右键菜单: 2.打开Repo-browser(可能需要输入你的用户名&密码) 3.输入服务器端 ...

  2. Nginx支持比Apache高并发的原因

    1.先从各自使用的多路复用IO模型说起:  select模型:(apache使用,由于受模块等限制,用的不多)   单个进程能够 监视的文件描述符的数量存在最大限制 select()所维护的 存储大量 ...

  3. CRM 安全证书到期操作命令

    I found a related TechNet Blog that shed some light on the subject:http://blogs.technet.com/b/tune_i ...

  4. [LeetCode] Ones and Zeroes 一和零

    In the computer world, use restricted resource you have to generate maximum benefit is what we alway ...

  5. [LeetCode] Longest Increasing Subsequence 最长递增子序列

    Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...

  6. matplotlib 高级用法实例--共享x轴

    http://localhost:8888/notebooks/duanqs/matplotlib_advanced_example.ipynb 我不会弄呀, 刚才从matplotlib文档里吧示例用 ...

  7. HTTP服务器(2)

    导语 重定向器是特殊用途的HTTP服务器的另一个简单而有用的应用程序.它的作用就是将用户从一个WEB网站重定向到另外一个网站.下面是一个简单的例子,程序沿用上一个SingleHttpServer代码. ...

  8. xss篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题

    前言 最早接触安全也是从xss攻击和sql注入攻击开始的. 0x01    跨站脚本攻击漏洞(XSS),是客户端脚本安全中的头号大敌,owasp top10 屡居榜首,由于攻击手法较多,开发者水平不一 ...

  9. jquery $.extend()扩展插件获取焦点或失去焦点事件

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. 练习JavaScript实现梯形乘法表

    效果: 表格用html中的table,tr,td,然后利用for语句实现,循环输出行和列,再根据行列的数量进行乘法运算,第一个for循环输出9行,然后内嵌一个for,在条件表达式中取第一个for循环的 ...