GWT EJB3 Maven JBoss 5.1集成教程

大家好,

在本文中,我们将演示如何正确集成GWTEJB3 ,以实现示例项目,使用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 {
 @PersistenceContext
 private 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;


 
 @EJB
 public 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安装

本文的源代码位于此处

谢谢

。/拍

相关文章 :

翻译自: https://www.javacodegeeks.com/2010/09/gwt-ejb3-maven-jboss-51-integration.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值