<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]>
1.
1.本文主要技术采用了Servlet + JSP + EJB 3.0 + JPA,开发环境用的是EclipseHelios + JDK 1.6 + JBOSS 5.1 + MySQL 5.1数据库。
2.
2. 示例场景:用户通过Web页面对Employee进行创建、查找和删除。这个小例子重点是演示JPA的使用。JPA是JavaPersistence
API的缩写,主要是将关系数据库的操作对象化,它的j2ee的标准规范,由于其自身简单易用的优点,也是SAP推荐使用的数据库技术。
3.
3.准备工作:
(1)安装JBOSS 5.1
(2)安装MySQL 5.1
(3)给Jboss配置数据源
首先启动mysql后,创建一个数据库叫ejbtest,然后创建一个用户jboss,密码是password,并将ejbtest的权限赋给它。
然后在路径jboss-5.1.0.GA/server/default/deploy下放入mysql-ds.xml文件。
Mysql-ds.xml:
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/ejbtest</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>jboss</user-name>
<password>password</password>
</local-tx-datasource>
</datasources>
4.
4.开发
4.1先创建一个EJB Project,名字叫EmployeeEJB。
然后在META-INF目录下新建一个persistence.xml文件
<?xml
version="1.0"encoding="UTF-8"?>
<persistence
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit
name="EmployeeDS">
<jta-data-source>java:/MySqlDS</jta-data-source>
<properties>
<property
name="hibernate.hbm2ddl.auto"value="update"
/>
</properties>
</persistence-unit>
</persistence>
4.2开始创建我们的Entity Bean:Employee类,它是一个简单的Java Bean。
package com.sap.demo.ejb.employee.model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Employee {
@Id
privateint id;
publicint getId() {
returnid;
}
publicvoid setId(int id) {
this.id= id;
}
publicString getName() {
returnname;
}
publicvoid setName(String name) {
this.name= name;
}
privateString name;
}
4.3
在ejb项目中创建一个Local的SessionBean,名字叫EmployeeServicel,它的主要功能是对employee进行数据的操作,包括创建、查找、删除。
接口声明:
package com.sap.demo.ejb.employee.ejb;
import javax.ejb.Local;
importcom.sap.demo.ejb.employee.model.Employee;
@Local
public interface EmployeeServiceLocal {
publicEmployee createEmployee(int id, String name);
publicEmployee findEmployee(int id);
publicvoid deleteEmployee(int id);
}
这里是接口的实现:
package com.sap.demo.ejb.employee.ejb;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
importcom.sap.demo.ejb.employee.model.Employee;
/**
*Session Bean implementation class EmployeeService
*/
@Stateless
public class EmployeeService implementsEmployeeServiceLocal {
@PersistenceContext(unitName= "EmployeeDS")
privateEntityManager em;
@Override
publicEmployee createEmployee(int id, String name) {
Employeeemp = new Employee();
emp.setId(id);
emp.setName(name);
em.persist(emp);
returnemp;
}
@Override
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
publicEmployee findEmployee(int id) {
returnem.find(Employee.class, new Integer(id));
}
@Override
publicvoid deleteEmployee(int id) {
Employeeemp = findEmployee(id);
if(emp != null) {
em.remove(emp);
}
}
}
这样EJB项目就创建完毕了。
4 4.4 然后创建Web Project,名字叫EmployeeWeb。这个项目很简单,包含一个Servlet和两个页面index.jsp和result.jsp。用户在index.jsp对employee进行创建、查找、删除,然后由result.jsp负责展示结果。
Index.jsp
<%@
pagelanguage="java"
contentType="text/html;charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE
htmlPUBLIC
"-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type"content="text/html;
charset=ISO-8859-1">
<title>Insert
titlehere</title>
</head>
<body>
<FORM
ACTION="ShowResult">
Id:
<INPUTTYPE="text"
NAME="id"/><P>
Name:
<INPUTTYPE="TEXT"
NAME="name"/>
<INPUTTYPE="hidden"
NAME="method"VALUE="create"
/>
<INPUTTYPE="SUBMIT"
VALUE="Createemployee and show result.">
</FORM>
<FORM
ACTION="ShowResult">
Id:
<INPUTTYPE="text"
NAME="id"/>
<inputTYPE="hidden"
NAME="method"VALUE="find"
/>
<INPUTTYPE="SUBMIT"
VALUE="Find employeeand show result.">
</FORM>
<FORM
ACTION="ShowResult">
Id:
<INPUTTYPE="text"
NAME="id"/>
<inputTYPE="hidden"
NAME="method"VALUE="delete"
/>
<INPUTTYPE="SUBMIT"
VALUE="Deleteemployee and show result.">
</FORM>
</body>
</html>
result.jsp
<%@
pagelanguage="java"
contentType="text/html;charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE
htmlPUBLIC
"-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta
http-equiv="Content-Type"content="text/html;
charset=ISO-8859-1">
<title>Insert
titlehere</title>
</head>
<body>
<jsp:useBean
id="employee"type="com.sap.demo.ejb.employee.model.Employee"scope="request"/>
id:<jsp:getProperty
name="employee"property="id"/>,
name:<jsp:getProperty
name="employee"property="name"/>
</body>
</html>
最后是Servlet ShowResult:
package com.sap.demo.ejb.servlets;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
import com.sap.demo.ejb.employee.ejb.EmployeeServiceLocal;
importcom.sap.demo.ejb.employee.model.Employee;
/**
*Servlet implementation class ShowResult
*/
public class ShowResult extends HttpServlet {
privatestatic final long serialVersionUID = 1L;
@EJB
privateEmployeeServiceLocal service;
/**
*@see HttpServlet#HttpServlet()
*/
public ShowResult() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequestrequest, HttpServletResponse response)
*/
protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
Stringmethod = request.getParameter("method");
if(method.equals("create")) {
Stringname = request.getParameter("name");
Stringids = request.getParameter("id");
intid = Integer.parseInt(ids);
Employeeem = service.createEmployee(id, name);
request.setAttribute("employee",em);
}elseif (method.equals("find")) {
Stringids = request.getParameter("id");
intid = Integer.parseInt(ids);
Employeeem = service.findEmployee(id);
request.setAttribute("employee",em);
}else if (method.equals("delete")){
Stringids = request.getParameter("id");
intid = Integer.parseInt(ids);
Employeeem = service.findEmployee(id);
if(em != null){
service.deleteEmployee(id);
request.setAttribute("employee",em);
}
}
RequestDispatcherdispatcher = request.getRequestDispatcher("result.jsp");
dispatcher.forward(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequestrequest, HttpServletResponse response)
*/
protectedvoid doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
//TODO Auto-generated method stub
}
}
5. 5.
部署程序、运行:
首先输入一个编号和用户名,点击创建
然后可以看到创建完毕。
然后输入编号,点查找
找到了结果。
最后看一下数据库,数据在数据库中
6.
6.小结
一共是三个项目,EmpoyeeESR,EmployeeEJB, EmployeeWeb。关于部署和运行的细节我就不细说了。这个例子虽然很简单,但是麻雀虽小,五脏俱全。有几个地方值得注意:
(1)首先它还是演示了EJB3.0的诸多优点,Employee虽然是一个EntityBean,但是它只是一个普通的javabean,不过加了一个@Entity的注释。另外在Servelt中,我们使用SessionBean
EmployeeServiceLocal的时候是通过Inception的方式,非常简单。
(2)EJB项目里的persistent.xml保存了一些关于数据源的信息。在使用JPA的EntityManager来进行数据操作时,必须首先声明persistentunit。
(3)Session BeanEmployeeService值得注意,它使用了JPA的EntityManger,也是通过注入的方式。然后对数据库的操作也就是transaction都由服务器自动管理。对于find方法,我们使用了这样的注释:@TransactionAttribute(TransactionAttributeType.SUPPORTS)
这是指不用使用transaction。默认是自动打开事务并提交到数据库。
这个例子前端采用jsp展示,业务逻辑有EJB来实现,持久层使用了JPA来对业务对象进行操作。下一部分,我想使用SAP的CAF来完成同样的功能。
分享到:
相关推荐
内容简介 《经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发》介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part1 其他部分详见我的上传列表,全部分卷下载完成才能解压。...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
eclipse3.6创建EJB+JPA+EAR(每个都是单独工程)完整介绍:自动创建表结构、数据源配置、jpa和ejb工程添加到ear包中。以及注入Emanager。 要这么高的分只是为了物有所值。
JPA学习笔记-EJB-04JPA关联映射总结 JPA JPA关联映射JPA学习笔记-EJB-04JPA关联映射总结 JPA JPA关联映射
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发 PDF 书籍 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第10章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第9章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第二章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
5-Spring-Boot(五):spring data jpa的使用.docx5-Spring-Boot(五):spring data jpa的使用.docx5-Spring-Boot(五):spring data jpa的使用.docx5-Spring-Boot(五):spring data jpa的使用.docx5-Spring-Boot(五):...
J2EE-CarnetContact-EJB-3.0 CarnetContact 是一个 J2EE 应用程序,用于管理 Book Contacts(重量级容器、EJB 3.0、JPA、JSF、JBoss)
经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 part2
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第3章 其他部分详见我的上传列表 本书介绍了Java EE规范的三大主要规范...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
经典JAVA EE企业应用实战 基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发.part2
经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 part3
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第6章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第14章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第11,12,15章 其他部分详见我的上传列表。 本书介绍了Java EE规范...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第5章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大主要...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码第13章 其他部分详见我的上传列表。 本书介绍了Java EE规范的三大...第三部分提供了一个JSF+EJB 3+ JPA整合开发的项目:电子拍卖系统。