- 浏览: 3502487 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
Contenido[ocultar] |
<script type="text/javascript"></script>
[editar] Creación en EJB 2.x
Spring provee una forma simple y cómoda para crear EJBs de Stateless, Stateful y Message Driven Bean. Esto se hace heredando la implementación de los EJB de alguna de estas clases:
- Abstract Stateless Session Bean
- Abstract Stateful Session Bean
- Abstract Message Driven Bean
Estas clases proveen varios beneficios:
- proveen acceso a un factory de Spring ya inicializado
- implementan ya varios métodos obligatorios de EJB
Las clases brindan un factory de Spring ya creado e inicializado, el cual se accede a través del método heredado getBeanFactory(). Este factory se configura a través de variables de entorno en el archivo ejb-jar.xml.
El método ejbCreate() se encuentra implementado (para poder inicializar el factory y otras tareas). Spring provee el método onEjbCreate() el cual implementaremos para inyectar "a mano" las dependencias de nuestro EJB.
[editar] Ejemplo de creación de un EJB Stateless
Supondremos que ya contamos con un objeto de negocio FlotaEspacialBO de la siguiente forma:
public class FlotaEspacialBoImpl implements FlotaEspacialBo { public Collection<Invasor> buscarInvasores(Long idFlota) { ... buscar los invasores de la flota indicada ... } }
Expondremos este EJB (el cual lo tenemos ya declarado en Spring) usando un EJB Stateless. Para el EJB crearemos todas las interafaces necesarias (Home, Remote, Local, etc). La diferencia estará en el bean:
public class FlotaEspacialBean extends AbstractStatelessSessionBean { private FlotaEspacialBo flotaEspacialBo; public Collection<Invasor> buscarInvasores(Long idFlota) { return flotaEspcialBo.buscarInvasores(idFlota); } @Override protected void onEjbCreate() throws CreateException { flotaEspcialBo = (FlotaEspacialBo) getBeanFactory().getBean("business.FlotaEspacialBo"); } }
Como se ve, el bean hereda de !AbstractStatelessSessionBean, clase que ya provee varios métodos implementados para los EJB. Así, el EJB queda muy simple, invocando al objeto de negocio directamente para resolver la lógica. El método onEjbCreate() se encarga de inyectar las dependencias del EJB utilizando el método getBeanFactory() que viene heredado.
Falta entonces indicarle a Spring los archivos de configuración que deberá levantar el factory, lo cual va en el ejb-jar.xml
<ejb-jar> <enterprise-beans> <session> <ejb-name>FlotaEspacialBean</ejb-name> <home>com.dosideas.business.ejb.flota.FlotaEspacialRemoteHome</home> <remote>com.dosideas.business.ejb.flota.FlotaEspacialRemote</remote> <ejb-class>com.dosideas.business.ejb.flota.FlotaEspacialBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <env-entry> <env-entry-name>ejb/BeanFactoryPath</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>application-ejb.xml,application-negocio.xml</env-entry-value> </env-entry> </session> </enterprise-beans> </ejb-jar>
Los tag env-entry contienen la ubicación de los archivos de Spring para inicializar.
[editar] Creación en EJB 3.x
EJB 3 contiene muchas mejoras y simplificaciones al momento de crear EJBs. Integrar EJB3 y Spring es una tarea muy sencilla, que se resuelve con el uso de Anotaciones.
import javax.interceptor.Interceptors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor; @Stateless @Interceptors(SpringBeanAutowiringInterceptor.class) public class PaisSessionBeanBean implements PaisSessionBeanRemote { @Autowired private PaisBo paisBo; public Pais buscarPaisPorId(Long id) { return paisBo.buscarPaisPorId(id); } }
La anotacion @Interceptors(SpringBeanAutowiringInterceptor.class) prepara un factory para ser usado en el EJB. A su vez, se encarga de inyectar todos los atributos marcados con @Autowired.
El interceptor busca un archivo beanRefContext.xml en el classpath, que contenga una instancia de un ApplicationContext, el cual referencia a los archivos de Spring a cargar. Por ejemplo:
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean name="applicationContext-main" class="org.springframework.context.support.ClassPathXmlApplicationContext"> <constructor-arg> <list> <value>application-business.xml</value> <value>application-dao.xml</value> <value>application-db.xml</value> <value>application-hibernate.xml</value> </list> </constructor-arg> </bean> </beans>
[editar] Acceso de EJBs
Uno de los usos más interesantes es la posibilidad de dejar a Spring realizar el lookup del EJB e inyectar la interfaz de negocio directamente en nuestros objetos.
Así, delegamos a Spring la localización y creación del EJB.
Para esto, se utilizan 2 clases principales:
- JndiTemplate, que contiene la información para realizar la búsqueda del EJB.
- En el caso de EJB 2.x, usaremos la clase SimpleRemoteStatelessSessionProxyFactoryBean, que realizará la instanciación de nuestro EJB. Este Proxy será el que inyectaremos en nuestros otros beans.
- En el caso de EJB 3.x, usaremos la clase JndiObjectFactoryBean, que realizará la búsqueda del EJB. Este proxy será el que inyectaremos en nuestros beans.
[editar] Ejemplo de acceso a EJB 2.x
Este ejemplo funciona con EJB 2.x.
[editar] El EJB
Supongamos que tenemos un EJB llamado PersonaServiceBean. Esta EJB está compuesto de las siguiente clases:
- com.dosideas.business.ejb.persona.PersonaServiceRemote (interfaz de negocio remota)
- com.dosideas.business.ejb.persona.PersonaServiceBean (implementación del EJB)
[editar] Archivo de configuración de Spring
En un archivo de Spring, podemos declarar una referencia a nuestro EJB, que luego podremos inyectar como un bean normal.
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"/> <bean id="ejb.PersonaServiceBean" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"> <property name="jndiName"> <value>ejb/PersonaServiceBean</value> </property> <property name="jndiTemplate"> <ref local="jndiTemplate"/> </property> <property name="businessInterface"> <value>com.dosideas.business.ejb.persona.PersonaServiceRemote</value> </property> </bean> </beans>
El bean con id ejb.PersonaServiceBean es un proxy que cumple con la interfaz indicada en el atributo "businessInterface". En el ejemplo, se declaró la interfaz de negocio remota del EJB. Este bean puede ya ser inyectado en cualquier otro lado y utilizado normalmente.
Spring realizará la creación del bean igual que con el resto de los objetos. En este caso, al iniciarse el factory de Spring se realizará el lookup e instanciación correspondiente del EJB. Es posible demorar esta acción con los medios tradicionales que provee Spring (lazy-init, etc.).
[editar] El atributo businessInterface
El atributo businessInterface indica la interfaz que implementará el Proxy de Spring. Un detalle interesante es que esta interfaz no tiene porqué ser la interfaz de negocio del EJB.
Así, podriamos crear una interfaz "nuestra", que cumpla con los métodos que están en la interfaz de negocio del EJB. De esta manera, nuestra aplicación queda independiente de cambios en la interfaz del EJB (y la posiblidad, además, de intercambiar libremente entre interfaces remotas y locales del EJB).
[editar] Ejemplo de acceso a EJB 3.x
Este ejemplo funciona con EJB 3.x.
[editar] El EJB
Supongamos que tenemos un EJB llamado PersonaServiceBean. Esta EJB está compuesto por la siguiente interfaz:
- com.dosideas.business.ejb.persona.PersonaServiceRemote (interfaz de negocio remota)
[editar] Archivo de configuración de Spring
En un archivo de Spring, podemos declarar una referencia a nuestro EJB, que luego podremos inyectar como un bean normal.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" /> <bean id="ejb.PersonaServiceBean" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="ejb/PersonaServiceBean"/> </bean> </beans>
Una forma alternativa es utilizando los tags propios para jee que trae Spring.
<jee:jndi-lookup id="ejb.PersonaServiceBean" jndi-name="ejb/PersonaServiceBean" cache="true" />
[editar] Reconexión automática de EJBs
Si por algún motivo se reinicia el servidor de EJBs, podría ser necesario reiniciar también a los clientes.
Podemos usar el atributo refresh-home-on-connect-failure para forzar una nueva búsqueda de nuestro cliente en el caso de un error de conexión. Para EJB 3.0, esto funciona a partir de Spring 2.5.5 (ya que las versiones anteriores contenían un bug).
<jee:remote-slsb id="miServicio" jndi-name="ejb/MiServicio" business-interface="com.dosideas.business.ejb.MiServicio" cache-home="false" lookup-home-on-startup="false" home-interface="com.dosideas.business.ejb.MiServicioHome" resource-ref="false" refresh-home-on-connect-failure="true"> <jee:environment> <!-- Incluir información del entorno aquí --> </jee:environment> </jee:remote-slsb>
[editar] Ver también
- EJB
- MockEjb
- JndiTemplate
- Manual de Referencia de Spring, Capítulo 18: integración de EJB
- Pro Spring: Spring and EJB
发表评论
-
说明SOA监管(SOA Governance)实例(收录备查)
2012-12-19 11:35 1750SOA 已经不是单纯技术问 ... -
Injecting Spring Beans into Java Servlets
2012-11-01 10:21 1935If you are working in a Java ... -
用 HttpServletResponseWrapper 实现 Etag 过滤器
2012-07-09 16:58 3758原文出处:http://blog.chenlb.com/200 ... -
Eclipse Indigo - Cannot install Android ADT Plugin
2012-02-29 01:17 3883When I try to install the And ... -
Eclipse Indigo - Cannot install Android ADT Plugin
2012-02-29 01:13 1988When I try to install the And ... -
[转]mybatis下的分页,支持所有的数据库
2011-07-21 13:21 14841大 家都知道,mybatis的自带分页方法只是逻 ... -
Java framework for text- & console-based forms?
2011-07-21 01:06 1711charva jcurses JNA , ... -
JNA(Java Native Access)学习入门
2011-07-21 01:04 22621Java Native Access 项目 在 ... -
使用IntrospectorCleanupListener 解决quartz引起的内存泄漏
2011-04-20 11:59 13362"在服务器运行过程中,Spring不停的运行的计划任 ... -
DBCP代码研读以及就数据库连接失效的解决
2011-03-31 11:03 3764问题 网上很多评论说DBCP有很多BUG,但是都没有指明是什 ... -
ContextLoaderListener
2010-12-06 15:58 8464(1) org.springframework.web.c ... -
Servlet3.0新功能: 异步处理
2010-12-06 15:22 3181J2EE 6和Glassfish 3V正式发 ... -
Servlet3.0引入的新特性
2010-12-06 15:20 3058Servlet3.0规范的新特性主要是为了3个目的: ... -
100個節點上運行群集亞馬遜EC2上Hazelcast
2010-12-03 23:59 3317本文的目的,適是给妳湮示的細節集群的100個節點。此湮示記錄, ... -
Spring Properties Reloaded
2010-12-02 14:54 4372Spring Properties Reloaded Som ... -
为spring2.5中的jpetstore增加perf4j监控
2010-09-02 13:51 2645perf4j是一款类似于log4j的性能检测工具. 它 ... -
语义网的学习资源大汇集(备忘)
2010-06-23 22:48 1734网上资源 http:/ ... -
使用 JOLAP 实现复杂分析查询
2010-06-06 13:42 1963Shashank Tiwari 在本文中对 ... -
HTML5 Canvas for Internet Explorer
2010-06-04 21:16 1857Canvascape http://www.benjoff ... -
大型网站架构演变和知识体系
2010-06-01 23:47 1969架构演变第一步:物 ...
相关推荐
### EJB与Spring详细对比分析 #### 一、引言 在现代企业级应用开发领域,EJB(Enterprise JavaBeans)与Spring框架均扮演着重要角色。随着技术的发展与需求的变化,两者之间的对比成为了业界广泛关注的话题。本文...
**ejb与Spring框架整合详解** ejb(Enterprise JavaBeans)是Java EE平台中的核心组件,主要用于构建可扩展的企业级应用程序。它提供了服务器端的组件模型,包括会话bean(Session Beans)、实体bean(Entity Beans...
### Spring与EJB3.0的关键区别及其优劣分析 #### 一、Spring框架概述 **1.1 引言** Spring作为一个广受欢迎的开源框架,最初被设计用于减轻企业级应用开发中的复杂性问题。它的一个显著特点在于模块化的分层架构...
【EJB3.0与Spring比较】 EJB3.0和Spring是两种广泛使用的Java企业级应用程序开发框架,它们在很多方面有所不同,这些差异主要体现在以下几个关键点: 1. **厂商无关性(Vendor Independence)** - EJB3.0遵循开放...
【标题】:“深入理解J2EE技术:EJB与Spring框架解析” 【描述】:本文集专注于J2EE领域的核心组件——Enterprise JavaBeans (EJB) 和流行轻量级框架Spring,旨在帮助开发者掌握这两者的关键概念和技术,为你的学习...
精通JSF-基于EJB Hibernage Spring整合开发与项目实践代码.part1.第3部分。三部分全下完再解压第一部分!
精通JSF-基于EJB Hibernage Spring整合开发与项目实践代码.part1,第一部分,。将三部分一起下载完后再解压第一部分!
在本章中,我们将深入探讨如何在Java企业级开发中集成和使用JavaScript Faces(JSF)、Enterprise JavaBeans(EJB)、Hibernate以及Spring框架。这些技术是构建高效、可扩展的企业级应用的重要工具,它们各自拥有...
《精通JSF基于EJB Hibernate Spring整合天发与项目实践》是一本深入讲解Java服务器页面(JavaServer Faces,简称JSF)、企业级JavaBean(Enterprise JavaBeans,简称EJB)、Hibernate对象关系映射(Object-...
**EJB(Enterprise JavaBeans)和Spring框架是Java企业级应用开发中的两个核心组件,它们在不同的场景下各自发挥着重要作用。EJB是Java EE(Java Platform, Enterprise Edition)的一部分,提供了一种标准的方式来...
在本资源中,"精通JSF-基于EJB Hibernate Spring整合开发与项目实践-第16章代码",我们探讨的是一个使用JavaServer Faces (JSF)、Enterprise JavaBeans (EJB)、Hibernate以及Spring框架进行企业级Web应用开发的实际...
在本文中,我们将探讨如何将三个流行的Java EE框架——Struts2、EJB3和Spring——集成在一起,形成一个强大的企业级应用。这个整合过程对于初学者来说可能会有些复杂,但通过逐步指导,我们将简化这一过程。我们使用...
在IT行业中,Hibernate、Spring、EJB(Enterprise JavaBeans)和Ajax是四个非常重要的技术,它们各自在软件开发的不同方面发挥着关键作用。下面将分别详细介绍这些技术,并探讨它们之间的协同工作方式。 **...
Spring 集成 EJB(Enterprise JavaBeans)是将轻量级的 Spring 框架与企业级的 EJB 3.x 技术相结合的一种方式,以实现更灵活且高效的企业应用开发。Spring 提供了一个丰富的IoC(Inversion of Control,控制反转)和...
【Java Jsp EJB Spring 学习】 Java Jsp EJB Spring 是企业级软件开发中的核心技术,它们在构建高效、可扩展的Web应用程序方面发挥着关键作用。让我们逐一深入探讨这些技术及其相互间的关联。 首先,JavaServer ...
在"精通JSF-基于EJB Hibernate Spring整合开发与项目实践-第15章代码"中,我们可以推测这章内容可能涉及以下知识点: 1. **JSF与Spring的集成**:如何在JSF应用中利用Spring进行依赖注入,以及如何在JSF的managed ...
因本人现在工作中需要到ejb2.0,考虑到现在ejb2.0资料匮乏,故整理献上。具体步骤:把项目导出jar文件,在weblogic8中部署,运行Client.java即可。由于weblogic不支持jdk1.4以上版本,请使用jdk1.4编译
【ejb3+spring+struts实现简单银行系统】 在Java开发领域,EJB(Enterprise JavaBeans)3、Spring框架和Struts框架是常见的企业级应用开发技术,它们结合使用可以构建高效、可扩展的Web应用程序,特别是对于复杂的...
精通JSF-基于EJB Hibernage Spring整合开发与项目实践代码.part1.第二部分。三部分全下完再解压第一部分!