大家好,
在本文中,我們將演示如何正確集成GWT和EJB3 ,以實現示例項目,使用maven進行構建并將其部署在JBoss 5.1應用服務器上。 實際上,您可以輕松地更改maven構建文件中的依賴關系,并將項目部署到您喜歡的應用程序服務器中。 為了盡可能通用,我們將使用命令行風格的maven和gedit文本編輯器。
首先,我們必須創建pom項目。 我們將其稱為ejb-gwt。
mkdir ejb-gwt
cd ejb-gwt
gedit pom.xml
pom.xml
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven4.0.0.xsd"><modelversion>4.0.0</modelversion><groupid>com.javacodegeeks</groupid><artifactid>ejb-gwt</artifactid><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>ejb-gwt</name><url>http://maven.apache.org</url><properties><project.build.sourceencoding>UTF-8</project.build.sourceencoding></properties><dependencies></dependencies><modules></modules><build><plugins><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-compiler-plugin</artifactid><configuration>1.6<target>1.6</target></configuration></plugin></plugins></build>
</project>
然后,我們將創建包含ejb類的模塊。 我們將其稱為ejb-jar。
mvn archetype:create -DgroupId=com.javacodegeeks -DartifactId=ejb-jar
cd ejb-jar/src/main
mkdir resources
cd resources
mkdir META-INF
cd META-INF
gedit persistence.xml
我們將配置persistence.xml以使用jboss的默認數據源。
persistence.xml
<persistence version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence" xsi:schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"><persistence-unit name="MyPersistenceUnit"><provider>org.hibernate.ejb.HibernatePersistence</provider><jta-data-source>java:/DefaultDS</jta-data-source><properties><property name="hibernate.hbm2ddl.auto" value="update"><property name="hibernate.show_sql" value="true"><property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"></property></property></property></properties></persistence-unit>
</persistence>
在src / java中,您將放置您的ejb代碼。 在我們的示例中,我們有一個實體bean
Employee.java
package com.javacodegeeks.ejb.entity;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name = "EMPLOYEE")
public class Employee implements java.io.Serializable {private static final long serialVersionUID = 7440297955003302414L;@Id@Column(name="employee_id")private long employeeId;@Column(name="employee_name", nullable = false, length=30)private String employeeName;@Column(name="employee_surname", nullable = false, length=30)private String employeeSurname;@Column(name="job", length=50)private String job;public Employee() {}public Employee(int employeeId) {this.employeeId = employeeId; }public Employee(long employeeId, String employeeName, String employeeSurname,String job) {this.employeeId = employeeId;this.employeeName = employeeName;this.employeeSurname = employeeSurname;this.job = job;}public long getEmployeeId() {return employeeId;}public void setEmployeeId(long employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getEmployeeSurname() {return employeeSurname;}public void setEmployeeSurname(String employeeSurname) {this.employeeSurname = employeeSurname;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}
}
會話Bean的本地接口。
EmployeeService.java
package com.javacodegeeks.ejb.session;import com.javacodegeeks.ejb.entity.Employee;public interface EmployeeService {public Employee findEmployee(long employeeId);public void saveEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception;public void updateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception;public void saveOrUpdateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception;public void deleteEmployee(long employeeId) throws Exception;
}
最后確定會話bean。
EmployeeServiceBean.java
package com.javacodegeeks.ejb.session;import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;import com.javacodegeeks.ejb.entity.Employee;@Stateless(name = "employeeService")
@Local(EmployeeService.class)
public class EmployeeServiceBean implements EmployeeService {@PersistenceContextprivate EntityManager entityManager;public void deleteEmployee(long employeeId) throws Exception {entityManager.remove(entityManager.find(Employee.class, employeeId));}public Employee findEmployee(long employeeId) {return entityManager.find(Employee.class, employeeId);}public void saveEmployee(long employeeId, String name, String surname,String jobDescription) throws Exception {Employee emp = new Employee();emp.setEmployeeId(employeeId);emp.setEmployeeName(name);emp.setEmployeeSurname(surname);emp.setJob(jobDescription);entityManager.persist(emp);}public void saveOrUpdateEmployee(long employeeId, String name,String surname, String jobDescription) throws Exception {Employee emp = new Employee();emp.setEmployeeId(employeeId);emp.setEmployeeName(name);emp.setEmployeeSurname(surname);emp.setJob(jobDescription);entityManager.merge(emp);}public void updateEmployee(long employeeId, String name, String surname,String jobDescription) throws Exception {Employee emp = entityManager.find(Employee.class, employeeId);emp.setEmployeeName(name);emp.setEmployeeSurname(surname);emp.setJob(jobDescription);entityManager.merge(emp);}}
ejb-jar模塊的pom.xml應該是:
pom.xml
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelversion>4.0.0</modelversion><parent><artifactid>ejb-gwt</artifactid><groupid>com.javacodegeeks</groupid><version>0.0.1-SNAPSHOT</version></parent><groupid>com.javacodegeeks</groupid><artifactid>ejb-jar</artifactid><version>0.0.1-SNAPSHOT</version><name>ejb-jar</name><packaging>ejb</packaging><url>http://maven.apache.org</url><repositories><repository><id>jboss-maven2</id><url>http://repository.jboss.com/maven2</url></repository></repositories><dependencies><dependency><groupid>org.jboss.jbossas</groupid><artifactid>jboss-as-client</artifactid><version>5.1.0.GA</version><type>pom</type><scope>provided</scope></dependency><dependency><groupid>junit</groupid><artifactid>junit</artifactid><version>4.7</version><scope>test</scope></dependency> </dependencies><build><plugins><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-ejb-plugin</artifactid><configuration><ejbversion>3.0</ejbversion></configuration></plugin></plugins>
</build>
</project>
現在,我們將基于gwt-maven-plugin原型生成我們的Web項目。
mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo -DarchetypeArtifactId=gwt-maven-plugin -DarchetypeVersion=1.2 -DgroupId=com.javacodegeeks -DartifactId=war
cd war
gedit pom.xml
pom.xml
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelversion>4.0.0</modelversion><parent><artifactid>ejb-gwt</artifactid><groupid>com.javacodegeeks</groupid><version>0.0.1-SNAPSHOT</version></parent><groupid>com.javacodegeeks</groupid><artifactid>war</artifactid><packaging>war</packaging><version>0.0.1-SNAPSHOT</version> <properties><gwt.version>2.0.4</gwt.version><maven.compiler.source>1.6</maven.compiler.source><maven.compiler.target>1.6</maven.compiler.target></properties><dependencies><dependency><groupid>com.google.gwt</groupid><artifactid>gwt-servlet</artifactid><version>${gwt.version}</version><scope>runtime</scope></dependency><dependency><groupid>com.google.gwt</groupid><artifactid>gwt-user</artifactid><version>${gwt.version}</version> <scope>provided</scope></dependency><dependency><groupid>org.jboss.jbossas</groupid><artifactid>jboss-as-client</artifactid><version>5.1.0.GA</version><type>pom</type><scope>provided</scope></dependency><dependency><groupid>com.javacodegeeks</groupid><artifactid>ejb-jar</artifactid><version>0.0.1-SNAPSHOT</version><type>ejb</type><scope>provided</scope></dependency><dependency><groupid>junit</groupid><artifactid>junit</artifactid><version>4.7</version><scope>test</scope></dependency></dependencies><build><finalname>war</finalname><outputdirectory>war/WEB-INF/classes</outputdirectory><plugins><plugin><groupid>org.codehaus.mojo</groupid><artifactid>gwt-maven-plugin</artifactid><version>1.2</version><executions><execution><goals><goal>compile</goal><goal>generateAsync</goal><goal>test</goal></goals></execution></executions><configuration><runtarget>com.javacodegeeks.war.Application/Application.html</runtarget></configuration></plugin><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-compiler-plugin</artifactid><version>2.0.2</version><configuration>${maven.compiler.source}<target>${maven.compiler.target}</target></configuration></plugin></plugins></build></project>
cd src/main/webapp/WEB-INF
gedit web.xml
web.xml
<web-app version="2.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name>GWT-Maven-Archetype</display-name> <servlet><servlet-name>emp</servlet-name><servlet-class>com.javacodegeeks.war.server.services.EmployeeServiceGWTImpl</servlet-class></servlet><servlet-mapping><servlet-name>emp</servlet-name><url-pattern>/com.javacodegeeks.war.Application/emp</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list>
</web-app>
如果我們想在servlet容器中進行ejb注入,則web.xml應該適用于2.5規范。
現在讓我們看一下gwt服務。
EmployeeServiceGWT.java
package com.javacodegeeks.war.shared.services;import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
import com.javacodegeeks.war.shared.entity.EmployeeUtil;@RemoteServiceRelativePath("emp")
public interface EmployeeServiceGWT extends RemoteService {public EmployeeUtil findEmployee(long employeeId);public void saveEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception;public void updateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception;public void saveOrUpdateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception;public void deleteEmployee(long employeeId) throws Exception;
}
注意,RemoteServiceRelativePath與我們在web.xml中定義的servlet路徑/com.javacodegeeks.war.Application/emp相關。
EmployeeServiceGWTImpl.java
package com.javacodegeeks.war.server.services;import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.UserTransaction;import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.javacodegeeks.ejb.entity.Employee;
import com.javacodegeeks.ejb.session.EmployeeService;
import com.javacodegeeks.war.shared.entity.EmployeeUtil;
import com.javacodegeeks.war.shared.services.EmployeeServiceGWT;public class EmployeeServiceGWTImpl extends RemoteServiceServlet implements EmployeeServiceGWT{/*** */private static final long serialVersionUID = 5995064321382986251L;private EmployeeService employeeService;@Resource(name="java:UserTransaction") UserTransaction ut;@EJBpublic void setEmployeeService(EmployeeService employeeService) {this.employeeService = employeeService;}public void deleteEmployee(long employeeId) throws Exception {employeeService.deleteEmployee(employeeId);}public EmployeeUtil findEmployee(long employeeId) {Employee emp = employeeService.findEmployee(employeeId);if(emp != null) {try {ut.begin();EmployeeUtil util = new EmployeeUtil(emp.getEmployeeId(), emp.getEmployeeName(), emp.getEmployeeSurname(), emp.getJob());ut.commit();return util;} catch (Exception e) {}}return null;}public void saveEmployee(long employeeId, String name, String surname,String jobDescription) throws Exception {employeeService.saveEmployee(employeeId, name, surname, jobDescription);}public void saveOrUpdateEmployee(long employeeId, String name,String surname, String jobDescription) throws Exception {employeeService.saveOrUpdateEmployee(employeeId, name, surname, jobDescription);}public void updateEmployee(long employeeId, String name, String surname,String jobDescription) throws Exception {employeeService.updateEmployee(employeeId, name, surname, jobDescription);}}
如您所見,我們使用注解@EJB注入employeeService會話bean。
請注意,出于基本原因,我們使用EmployeeUtil類 :
GWT無法處理延遲的初始化關系,因此我們將代理集合替換為實際集合。替換應在事務范圍內。
package com.javacodegeeks.war.shared.entity;import java.io.Serializable;public class EmployeeUtil implements Serializable {/*** */private static final long serialVersionUID = -2732740011239267035L;private long employeeId;private String employeeName;private String employeeSurname;private String job;public EmployeeUtil() {}public EmployeeUtil(int employeeId) {this.employeeId = employeeId; }public EmployeeUtil(long employeeId, String employeeName, String employeeSurname,String job) {this.employeeId = employeeId;this.employeeName = employeeName;this.employeeSurname = employeeSurname;this.job = job;}public long getEmployeeId() {return employeeId;}public void setEmployeeId(long employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getEmployeeSurname() {return employeeSurname;}public void setEmployeeSurname(String employeeSurname) {this.employeeSurname = employeeSurname;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}}
本文的源代碼中提供了gwt接口的其余源代碼。
現在,我們已邁出最后一步,要建立耳朵。我們將創建一個模塊來做到這一點。
mvn archetype:create -DgroupId=com.javacodegeeks -DartifactId=ear
cd ear
rm -rf src
gedit pom.xml
pom.xml
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelversion>4.0.0</modelversion><parent><artifactid>ejb-gwt</artifactid><groupid>com.javacodegeeks</groupid><version>0.0.1-SNAPSHOT</version></parent><groupid>com.javacodegeeks</groupid><artifactid>ear</artifactid><version>0.0.1-SNAPSHOT</version><packaging>ear</packaging><name>ear</name><description>ear for gwt ejb3</description><dependencies><dependency><groupid>com.javacodegeeks</groupid><artifactid>ejb-jar</artifactid><version>0.0.1-SNAPSHOT</version><type>ejb</type></dependency><dependency><groupid>com.javacodegeeks</groupid><artifactid>war</artifactid><version>0.0.1-SNAPSHOT</version><type>war</type></dependency></dependencies><build><plugins><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-ear-plugin</artifactid><configuration><generateapplicationxml>true</generateapplicationxml><modules><webmodule><groupid>com.javacodegeeks</groupid><artifactid>war</artifactid><contextroot>ejb-gwt</contextroot></webmodule><ejbmodule><groupid>com.javacodegeeks</groupid><artifactid>ejb-jar</artifactid></ejbmodule></modules></configuration></plugin></plugins></build>
</project>
要構建項目,請轉到根項目并輸入:
mvn安裝
本文的源代碼位于此處 。
謝謝
。/拍
相關文章 :
- GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
- GWT Spring和Hibernate進入數據網格世界
- Spring3 RESTful Web服務
- GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示
- 使用Spring AspectJ和Maven進行面向方面的編程
- 帶有Spring和Maven教程的JAX–WS
翻譯自: https://www.javacodegeeks.com/2010/09/gwt-ejb3-maven-jboss-51-integration.html