- 浏览: 543269 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
wenming6688:
垃圾。。。。。。
Java中的this和super[转] -
yingjianxuehun:
gszp852 写道请问下,服务器的字符编码在哪设置,我也遇到 ...
ognl.MethodFailedException: Method "setEndtime" failed for object -
zxjlwt:
有在osgi中用过吗?http://surenpi.com
no security manager: RMI class loader disabled -
samuce:
谢谢,终于找到问题结果!
taglib prefix="s" uri="/struts-tags" -
gszp852:
请问下,服务器的字符编码在哪设置,我也遇到了这个问题。不知道是 ...
ognl.MethodFailedException: Method "setEndtime" failed for object
Meera Subbarao说道
许多开发者理解,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
发表评论
-
深入探讨Java类型提升的约定[转]
2010-09-30 10:28 968转: http://doc.chinaunix.net ... -
java 条件表达式(即三元操作符)的陷阱[转]
2010-09-30 10:22 8419转: http://apps.hi.baidu.com/s ... -
response的 encodeUrl方法的使用[转]
2010-09-29 11:17 1364转自 :http://edu.codepub.com/2009 ... -
java序列化的作用[转]
2010-09-20 11:31 1172转: http://hi.baidu.com/springwu ... -
java transient简介[转]
2010-09-20 11:22 1422转:http://blog.csdn.net/zxl315 ... -
Collection和Collections的区别[转]
2010-09-17 15:37 1456转: http://hanhongke123.blog.163 ... -
HashMap和HashTable的区别[转]
2010-09-17 15:24 1055转: Hashtable和HashMap类有三个重要的不同 ... -
Java 中Vector、ArrayList和LinkedList 的区别[转]
2010-09-17 14:43 1601转:http://pterodactyl.iteye.com/ ... -
Java中ArrayList和LinkedList区别[转]
2010-09-17 12:01 1112转:http://pengcqu.iteye.com/bl ... -
String 中的split()[转]
2010-09-12 22:38 650转:http://www.iteye.com/topic/32 ... -
Java中的this和super[转]
2010-09-09 16:41 1234转自:http://student.csdn.ne ... -
java继承容易犯的错误[转]
2010-09-09 09:32 1061在网上看见一个关于java ... -
Java内部类与匿名内部类
2010-09-08 15:19 973定义在类中方法之外的内部类分为实例内部类和静态内部 ... -
javap的使用
2010-09-08 14:48 1204javap是jdk自带的一个工具,可以反编译,也可以查看jav ... -
JAVA匿名内部类(from thinking in java 3th)[转]
2010-09-08 14:13 1263简单地说:匿名内部类 ... -
Java内部类
2010-09-05 17:32 1411在一个类内部定义类,这就是嵌套类(nested classes ... -
java 静态块 非静态块
2010-08-22 16:41 1879转自:http://blog.sina.com.cn/s/bl ... -
java static
2010-08-22 16:20 999请先看下面这段程序:public class Hello{ p ... -
JNDI API
2010-08-20 14:40 1078JNDI API由5个包组成: 1、Javax.nami ... -
理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc/datas
2010-08-20 14:34 972http://futureinhands.iteye.com/ ...
相关推荐
**小结:**EJB3.0和Spring在供应商独立性方面都有很好的表现,但Spring通过其灵活的DI机制,在这一领域提供了一种更为简单的方法来实现组件之间的解耦和管理。 #### 二、服务集成(Service Integration) EJB3.0在...
标题 "EJB3+Spring2.5+Struts2和EJB3+Servlet实现增删改查" 描述了一个集成的Java企业级应用开发场景,其中涵盖了四个关键的技术框架:Enterprise JavaBeans(EJB)3.0、Spring 2.5、Struts 2以及Servlet。...
在EJB3.0中,这两种注解使接口的使用更加灵活,无需传统的接口实现方式。 总的来说,EJB3.0简化了传统EJB的复杂性,提升了开发效率,同时保持了企业级应用所需的关键特性。通过注解、容器管理和事务支持,EJB3.0...
- EJB 3.0特别强调其在分布式环境中的优势,如支持远程调用、容错机制和集群等功能,这使其成为构建大型分布式系统的理想选择。 #### 六、是否应该学习EJB 3.0 - **就业市场现状**:目前市场上对EJB 3.0的需求相对...
- **项目经理和技术架构师**:本书对于那些负责设计和规划大型企业级项目的人员也非常有用,可以帮助他们更好地理解EJB 3.0在系统架构中的作用。 #### 六、总结 《精通企业级Java Beans (EJB) 3.0》是一本全面覆盖...
这是一个基于Java技术栈的银行系统实现,主要利用了EJB3.0、Spring和Struts框架,这三者是企业级Java应用开发中常见的核心技术。EJB(Enterprise JavaBeans)3.0是Java EE平台的核心组件之一,用于构建可复用的、...
它可以在配置元数据中使用,也可以在运行时动态操作对象。 6. **国际化(I18N)**:Spring 2.5提供了更好的国际化支持,包括对`ResourceBundleMessageSource`的改进,使得开发者可以更方便地管理多语言资源。 7. **...
Struts、Spring 和 EJB 3.0 是Java企业级开发中的三个重要框架,它们各自在应用程序的不同层面发挥着核心作用。Struts 是一个用于构建 MVC(Model-View-Controller)架构的开源Web应用程序框架,Spring 是一个全面的...
在基于MVC的应用中,EJB用于处理应用程序的核心业务规则和数据操作,分离显示层(View)和控制层(Controller)的职责,使系统结构更加清晰,易于维护。 【EJB3.0的优势】 1. **服务提供**:EJB3.0提供了一整套...
EJB3.0是EJB规范的一个重大改进版本,吸取了其他框架如Hibernate和Spring的优点,极大地简化了开发过程,使其变得更加易用。 在EJB3.0中,主要定义了三种类型的Bean: 1. **会话Bean(Session Bean)**:会话Bean...
尽管Spring在某些方面可能更为灵活和细致,但在涉及大规模分布式处理时,EJB3.0展现出了其不可替代的价值。 ### EJB3.0的学习价值与发展前景 尽管EJB3.0在当前市场中的应用并不广泛,但它依然值得学习。掌握EJB3.0...
在"精通EJB3.0源码,书本《精通EJB3.0》的源码,EJB3实例"这个主题中,我们将深入探讨EJB3.0的关键特性、源码解析以及实例应用。 1. **EJB 3.0的主要改进**: - **注解驱动**:EJB 3.0引入了大量的注解,如`@Entity...
1. **注解驱动**:EJB3.0引入了注解(Annotation),使得开发者无需编写大量的XML配置文件,可以直接在类、方法或字段上使用注解来声明其角色和行为。例如,`@Entity`用于标记实体类,`@Stateless`和`@Stateful`分别...
此外,EJB3.0的许多设计原则和模式,如依赖注入和持久化,也在现代Java框架中广泛使用,掌握这些技能对于提升职业竞争力大有裨益。 **教程资源** 《EJB3.pdf》这本书应该包含了详细的EJB3.0实例和讲解,可以帮助...
在"最新EJB 3.0实例教程.pdf"中,你将找到一系列具体的操作步骤和示例代码,帮助你理解和实践上述知识点。教程可能涵盖了创建简单的会话bean,使用JPA进行数据操作,以及如何在JBOSS环境中部署和运行EJB应用等内容。...
EJB3.0引入了大量的注解,如`@Entity`、`@Stateless`、`@Stateful`、`@MessageDriven`等,这些注解使得开发者可以直接在类和方法上标记其功能,减少了XML配置文件的使用,大大提高了开发效率。 2. **实体Bean...
本章将阐述如何使用消息驱动Bean来接收和处理来自JMS的消息,以及如何在EJB 3.0中实现异步处理和消息队列管理。 ### 第五章:深入学习高级EJB概念 随着对EJB的理解加深,本章将探讨更高级的主题,如拦截器、定时...
- 注解参考:详细列出了EJB 3.0中使用的注解及其含义。 - 部署描述符参考:提供了一个详细的部署描述符指南,帮助开发者正确地配置EJB应用程序。 以上是根据提供的信息整理出的主要知识点,这些内容对于想要深入...
### EJB3.0核心知识点概述 #### 一、EJB3.0简介与特性 **EJB(Enterprise JavaBeans)3.0** 是Java EE平台中的一个重要组成部分...通过对EJB3.0的理解和掌握,开发者可以更好地应对现代企业级应用程序开发中的挑战。