J2EEå®è·µç¬¬ä¸é¨å-å建ä¸ä¸ªå®æ´çEJB Webåºç¨(JPA示ä¾)
<!-- [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æ¥å®æåæ ·çåè½ã