`

EJB 3.0和Spring 2.5 :在Spring中使用EJB 3.0 [转]

阅读更多

 Meera Subbarao说道

:EJB和Spring社区的开发者为什么总是贬低对方呢?我同时使用EJB和Spring,就像所有的开发者一样,我对于两者需要大量的XML设置非常头疼,但是从Java 5发布以来,XML配置已经用annotation来替代了。但是在使用了最新的Spring 2.5和EJB 3.0,我觉得它们是互相补充的关系,而非相互竞争关系。

许多开发者理解,Spring是由Spring Source创建的最常用的非标准框架,而EJB 3.0是一个由主要的JEE厂商创建的规格。我以前曾一起工作的同事更愿意使用标准规格,选择EJB 2.X现在迁移到EJB 3.0。也有开发者愿意使用Spring而拒绝EJB。但是没有任何东西阻止开发者同时使用Spring和EJB,对不对?在Spring的配置文件增加几行就能够在Spring中无缝使用EJB 3.0组件。

下面我将展示这个过程是多么简单,我们可以通过Spring的强大的依赖注入机制来注入Customer session bean。这个Customer session bean可以使用Entity Manager来进行创建/读写/删除操作。

 

1。创建一个简单的JPA Entity:

 
package com.ejb.domain;   
  
import java.io.Serializable;   
import javax.persistence.Column;   
import javax.persistence.Entity;   
import javax.persistence.Id;   
import javax.persistence.Table;   
  
/**  
 *  
 * @author meerasubbarao  
 */  
@Entity  
@Table(name = "CUSTOMER", catalog = "", schema = "ADMIN")   
public class Customer implements Serializable {   
    private static final long serialVersionUID = 1L;   
    @Id  
    @Column(name = "CUSTOMER_ID")   
    private Long customerId;   
    @Column(name = "FIRST_NAME")   
    private String firstName;   
    @Column(name = "LAST_NAME")   
    private String lastName;   
    @Column(name = "MIDDLE_NAME")   
    private String middleName;   
    @Column(name = "EMAIL_ID")   
    private String emailId;   
  
    public Customer() {   
    }   
  
    public Customer(Long customerId) {   
        this.customerId = customerId;   
    }   
  
    public Long getCustomerId() {   
        return customerId;   
    }   
  
    public void setCustomerId(Long customerId) {   
        this.customerId = customerId;   
    }   
  
    public String getFirstName() {   
        return firstName;   
    }   
  
    public void setFirstName(String firstName) {   
        this.firstName = firstName;   
    }   
  
    public String getLastName() {   
        return lastName;   
    }   
  
    public void setLastName(String lastName) {   
        this.lastName = lastName;   
    }   
  
    public String getMiddleName() {   
        return middleName;   
    }   
  
    public void setMiddleName(String middleName) {   
        this.middleName = middleName;   
    }   
  
    public String getEmailId() {   
        return emailId;   
    }   
  
    public void setEmailId(String emailId) {   
        this.emailId = emailId;   
    }   
  
  
}  
 

 

2.创建一个EJB 3.0 Session bean.

The Interface:

 

 

package com.ejb.service;   
  
import com.ejb.domain.Customer;   
import java.util.Collection;   
import javax.ejb.Remote;   
  
/**  
 *  
 * @author meerasubbarao  
 */  
@Remote  
public interface CustomerService {   
  
    Customer create(Customer info);   
  
    Customer update(Customer info);   
  
    void remove(Long customerId);   
  
    Collection<Customer> findAll();   
  
    Customer[] findAllAsArray();   
  
    Customer findByPrimaryKey(Long customerId);   
}  

 

 

 

The Implementation Class:

 

package com.ejb.service;   
  
import com.ejb.domain.Customer;   
import java.util.Collection;   
import javax.ejb.Stateless;   
import javax.jws.WebService;   
import javax.jws.soap.SOAPBinding;   
import javax.persistence.EntityManager;   
import javax.persistence.PersistenceContext;   
import javax.persistence.Query;   
import javax.jws.WebMethod;   
  
/**  
 *  
 * @author meerasubbarao  
 */  
@WebService(name = "CustomerService", serviceName = "CustomerService", targetNamespace = "urn:CustomerService")   
@SOAPBinding(style = SOAPBinding.Style.RPC)   
@Stateless(name = "CustomerService")   
public class CustomerServiceImpl implements CustomerService {   
  
    @PersistenceContext  
    private EntityManager manager;   
  
    @WebMethod  
    public Customer create(Customer info) {   
        this.manager.persist(info);   
        return info;   
    }   
  
    @WebMethod  
    public Customer update(Customer info) {   
        return this.manager.merge(info);   
    }   
  
    @WebMethod  
    public void remove(Long customerId) {   
        this.manager.remove(this.manager.getReference(Customer.class, customerId));   
    }   
  
    public Collection<Customer> findAll() {   
        Query query = this.manager.createQuery("SELECT c FROM Customer c");   
        return query.getResultList();   
    }   
  
    @WebMethod  
    public Customer[] findAllAsArray() {   
        Collection<Customer> collection = findAll();   
        return (Customer[]) collection.toArray(new Customer[collection.size()]);   
    }   
  
    @WebMethod  
    public Customer findByPrimaryKey(Long customerId) {   
        return (Customer) this.manager.find(Customer.class, customerId);   
    }   
  
     
}  

  

 

 

3.编译,打包,部署到一个应用服务器上。

我使用GlassFish,用缺省的持久化提供工具TopLink,persistence.xml文件配置如下:

 

 

<?xml version="1.0" encoding="UTF-8"?>  
<persistence version="1.0" 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">  
  <persistence-unit name="SpringAndEJBPU" transaction-type="JTA">  
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>  
    <jta-data-source>spring-ejb</jta-data-source>  
    <properties>  
      <property name="toplink.ddl-generation" value="drop-and-create-tables"/>  
    </properties>  
  </persistence-unit>  
</persistence>  

 

 

当你的应用部署以后,确认session bean JNDI名称,在 GlassFish 中,点击JNDI浏览工具按钮查看:

 



 

 

 

 

 

4: 测试无状态 Session beans.

 



 

 

 

 

5: 创建一个 Spring Bean.

创建一个CustomerManager 接口:

 

package com.spring.service;   
  
import com.ejb.domain.Customer;   
  
/**  
 *  
 * @author meerasubbarao  
 */  
public interface CustomerManager {   
  
    public void addCustomer(Customer customer);   
    public void removeCustomer(Long customerId);   
    public Customer[] listCustomers();   
  
  
}  

  

 

package com.spring.service;   
  
import com.ejb.domain.Customer;   
import com.ejb.service.CustomerService;   
  
/**  
 *  
 * @author meerasubbarao  
 */  
public class CustomerManagerImpl implements CustomerManager {   
  
    CustomerService customerService;   
  
    public void setCustomerService(CustomerService customerService) {   
        this.customerService = customerService;   
    }   
  
    public void removeCustomer(Long customerId) {   
        customerService.remove(customerId);   
    }   
  
    public Customer[] listCustomers() {   
        return customerService.findAllAsArray();   
    }   
  
    public void addCustomer(Customer customer) {   
        customerService.create(customer);   
    }   
}  

 

 

 

6: 注入 EJB 3.0 Session bean 进入我们的 Spring Beans.

 

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xmlns:jee="http://www.springframework.org/schema/jee"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd   
       http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">  
    <jee:jndi-lookup id="customerService" <b>jndi-name="com.ejb.service.CustomerService"</b>>  
    </jee:jndi-lookup>  
    <bean id="manageCustomer"  
        class="com.spring.service.CustomerManagerImpl">  
        <property name="customerService" ref="customerService" />  
    </bean>  
</beans>  

 

 

 

<jee:jndi-lookup id="customerService" jndi-name="com.ejb.service.CustomerService">   
</jee:jndi-lookup>  

 

 

  

<bean id="manageCustomer"  
    class="com.spring.service.CustomerManagerImpl">   
    <property name="customerService" ref="customerService" />   
</bean>  

 

 

 

 

7: 测试

 

package com.spring.client;   
  
import com.ejb.domain.Customer;   
import com.spring.service.CustomerManager;   
import org.springframework.context.ApplicationContext;   
import org.springframework.context.support.ClassPathXmlApplicationContext;   
  
public class SpringAndEJBMain {   
  
    public static void main(String[] args) {   
        ApplicationContext context =   
                new ClassPathXmlApplicationContext("SpringXMLConfig.xml");   
  
        CustomerManager service = (CustomerManager) context.getBean("manageCustomer");   
        Customer customer = new Customer();   
        customer.setFirstName("Meera");   
        customer.setLastName("Subbarao");   
        customer.setMiddleName("B");   
        customer.setEmailId("meera@springandejb.com");   
        customer.setCustomerId(new Long(1));   
  
        service.addCustomer(customer);   
        for (Customer cust : service.listCustomers()) {   
            System.out.println(cust.getFirstName());   
            System.out.println(cust.getLastName());   
            System.out.println(cust.getMiddleName());   
            System.out.println(cust.getEmailId());   
  
        }   
        service.removeCustomer(new Long(1));   
  
    }   
}  

 

 



 

 

 



 

 

整个过程结束,使用Spring和EJB 3.0能够同时或者两者的好处。

 

转自:http://www.iteye.com/news/3370

  • 大小: 38.6 KB
  • 大小: 104.5 KB
  • 大小: 17 KB
  • 大小: 56.7 KB
分享到:
评论

相关推荐

    EJB3.0和Spring比较-纯文本格式

    **小结:**EJB3.0和Spring在供应商独立性方面都有很好的表现,但Spring通过其灵活的DI机制,在这一领域提供了一种更为简单的方法来实现组件之间的解耦和管理。 #### 二、服务集成(Service Integration) EJB3.0在...

    EJB3+spring2.5+struts2和ejb3+servlet增,删,改,查实现!

    标题 "EJB3+Spring2.5+Struts2和EJB3+Servlet实现增删改查" 描述了一个集成的Java企业级应用开发场景,其中涵盖了四个关键的技术框架:Enterprise JavaBeans(EJB)3.0、Spring 2.5、Struts 2以及Servlet。...

    EJB3.0__EJB3.0

    在EJB3.0中,这两种注解使接口的使用更加灵活,无需传统的接口实现方式。 总的来说,EJB3.0简化了传统EJB的复杂性,提升了开发效率,同时保持了企业级应用所需的关键特性。通过注解、容器管理和事务支持,EJB3.0...

    传智播客ejb3.0教学ppt

    - EJB 3.0特别强调其在分布式环境中的优势,如支持远程调用、容错机制和集群等功能,这使其成为构建大型分布式系统的理想选择。 #### 六、是否应该学习EJB 3.0 - **就业市场现状**:目前市场上对EJB 3.0的需求相对...

    精通ejb3.0 经典书目

    - **项目经理和技术架构师**:本书对于那些负责设计和规划大型企业级项目的人员也非常有用,可以帮助他们更好地理解EJB 3.0在系统架构中的作用。 #### 六、总结 《精通企业级Java Beans (EJB) 3.0》是一本全面覆盖...

    EJB3.0+Spring+Struts实现简单银行系统,供学习

    这是一个基于Java技术栈的银行系统实现,主要利用了EJB3.0、Spring和Struts框架,这三者是企业级Java应用开发中常见的核心技术。EJB(Enterprise JavaBeans)3.0是Java EE平台的核心组件之一,用于构建可复用的、...

    spring2.5中文文档

    它可以在配置元数据中使用,也可以在运行时动态操作对象。 6. **国际化(I18N)**:Spring 2.5提供了更好的国际化支持,包括对`ResourceBundleMessageSource`的改进,使得开发者可以更方便地管理多语言资源。 7. **...

    struts,spring,ejb3.0

    Struts、Spring 和 EJB 3.0 是Java企业级开发中的三个重要框架,它们各自在应用程序的不同层面发挥着核心作用。Struts 是一个用于构建 MVC(Model-View-Controller)架构的开源Web应用程序框架,Spring 是一个全面的...

    EJB3.0培训教材

    在基于MVC的应用中,EJB用于处理应用程序的核心业务规则和数据操作,分离显示层(View)和控制层(Controller)的职责,使系统结构更加清晰,易于维护。 【EJB3.0的优势】 1. **服务提供**:EJB3.0提供了一整套...

    EJB3.0详解

    EJB3.0是EJB规范的一个重大改进版本,吸取了其他框架如Hibernate和Spring的优点,极大地简化了开发过程,使其变得更加易用。 在EJB3.0中,主要定义了三种类型的Bean: 1. **会话Bean(Session Bean)**:会话Bean...

    传智播客-黎活明-EJB3.0.pptx

    尽管Spring在某些方面可能更为灵活和细致,但在涉及大规模分布式处理时,EJB3.0展现出了其不可替代的价值。 ### EJB3.0的学习价值与发展前景 尽管EJB3.0在当前市场中的应用并不广泛,但它依然值得学习。掌握EJB3.0...

    精通EJB3.0源码,EJB3实例

    在"精通EJB3.0源码,书本《精通EJB3.0》的源码,EJB3实例"这个主题中,我们将深入探讨EJB3.0的关键特性、源码解析以及实例应用。 1. **EJB 3.0的主要改进**: - **注解驱动**:EJB 3.0引入了大量的注解,如`@Entity...

    达内EJB3.0精典

    1. **注解驱动**:EJB3.0引入了注解(Annotation),使得开发者无需编写大量的XML配置文件,可以直接在类、方法或字段上使用注解来声明其角色和行为。例如,`@Entity`用于标记实体类,`@Stateless`和`@Stateful`分别...

    EJB3.0实例教程

    此外,EJB3.0的许多设计原则和模式,如依赖注入和持久化,也在现代Java框架中广泛使用,掌握这些技能对于提升职业竞争力大有裨益。 **教程资源** 《EJB3.pdf》这本书应该包含了详细的EJB3.0实例和讲解,可以帮助...

    最新EJB 3.0实例教程

    在"最新EJB 3.0实例教程.pdf"中,你将找到一系列具体的操作步骤和示例代码,帮助你理解和实践上述知识点。教程可能涵盖了创建简单的会话bean,使用JPA进行数据操作,以及如何在JBOSS环境中部署和运行EJB应用等内容。...

    EJB3.0 实例编程

    EJB3.0引入了大量的注解,如`@Entity`、`@Stateless`、`@Stateful`、`@MessageDriven`等,这些注解使得开发者可以直接在类和方法上标记其功能,减少了XML配置文件的使用,大大提高了开发效率。 2. **实体Bean...

    EJB3.0 in Action

    本章将阐述如何使用消息驱动Bean来接收和处理来自JMS的消息,以及如何在EJB 3.0中实现异步处理和消息队列管理。 ### 第五章:深入学习高级EJB概念 随着对EJB的理解加深,本章将探讨更高级的主题,如拦截器、定时...

    Manning EJB3.0 in action

    - 注解参考:详细列出了EJB 3.0中使用的注解及其含义。 - 部署描述符参考:提供了一个详细的部署描述符指南,帮助开发者正确地配置EJB应用程序。 以上是根据提供的信息整理出的主要知识点,这些内容对于想要深入...

    EJB3.0个人笔记

    ### EJB3.0核心知识点概述 #### 一、EJB3.0简介与特性 **EJB(Enterprise JavaBeans)3.0** 是Java EE平台中的一个重要组成部分...通过对EJB3.0的理解和掌握,开发者可以更好地应对现代企业级应用程序开发中的挑战。

Global site tag (gtag.js) - Google Analytics