一.EJB3.0分为会话Bean(session bean),MDB(message driver bean)消息驱动Bean,实体Bean(Entity Bean)
1.session bean 又分为有状态的(stateful)和无状态的(stateless)
stateful session bean 就相当于一次会话,每个客户端得到的是一个不同的session bean,EJB通过一个Bean工厂生成不的session bean,
并且由一个bena 容器进行统一管理,每生成的一个session bean 都由这个bean容器管理.客户端与session bean 之间是一一对应的.
stateless session bean 在EJB内部是一种单例模式,每个客户端得到的始终都是同一个session bean.
就性能上来说,stateless session bean 优于 stateful session bena ,因为stateless session bean 较stateful session bean 占用更少
的少的系统资源.但就EJB本身来说,它是一种提供分布式调用的组件,其性能肯定不是很理想,所以在开发EJB时要考虑到程序的粗粒细度
用来完成同一件事的逻辑最好写在同一个方法中,不要像我们平时写程序那样把完成一件事的逻辑分得很细.
2.EJB3.0有两种调用方式:@Remote 远程调用,@Local 本地调用.
remote 采用传参的形式传送数据, Local 采用传址的方式传送数据,remote 是运行在不同的JVM上,而Local是运行在同一个上JVM的
3.EJB3.0注释
@Stateless //无状态会话EJB
@Remote ({Operation.class}) //远程接口
@Local ({LocalOperation.class}) //本地接口
当一个类实现多个接口时,我们必须申明哪个接口是用来作远程调用的,哪个接口是用来做本地调用的.
@SuppressWarnings("serial") //屏蔽缺少serialVersionUID 定义的警告
@Stateful //有状态会话EJB
@Remote ({Operation.class})
@RemoteBinding (jndiBinding="foshanshop/RemoteOperation") //重新梆定JNDI
@Local ({LocalOperation.class})
@LocalBinding (jndiBinding="foshanshop/LocalOperation") //重新梆定JNDI
@PostConstruct:当bean对象完成实例化后,使用了这个注释的方法会被立即调用。这个注释同时适用于有状态和无状态的会话bean。
@PreDestroy:使用这个注释的方法会在容器从它的对象池中销毁一个无用的或者过期的bean 实例之前调用。这个注释同时适用于有状态和无状态的会话bean。
@PrePassivate:当一个有状态的session bean实例空闲过长的时间,容器将会钝化(passivate)它,并把它的状态保存在缓存当中。使用这个注释的方法会在容器钝化bean实例之前调用。这个注释适用于有状态的会话bean。当钝化后,又经过一段时间该bean 仍然没有被操作,容器将会把它从存储介质中删除。以后,任何针对该bean方法的调用容器都会抛出例外。
@PostActivate:当客户端再次使用已经被钝化的有状态session bean时,新的实例被创建,状态被恢复。
使用此注释的session bean会在bean的激活完成时调用。这个注释只适用于有状态的会话bean。
@Init:这个注释指定了有状态session bean初始化的方法。它区别于@PostConstruct注释在于:多个@Init
注释方法可以同时存在于有状态session bean 中,但每个bean实例只会有一个@Init注释的方法会被调用。这取
决于bean是如何创建的(细节请看EJB 3.0规范)。@PostConstruct在@Init之后被调用。
@Remove //移除EJB
@Interceptors 注释指定一个或多个在外部类中定义的拦截器。上面拦截器HelloInterceptor 对HelloChinaBean中的所有方法进行监听
@AroundInvoke 注释指定了要用作拦截器的方法。用@AroundInvoke注释指定的方法必须遵守以下格式:public Object XXX(InvocationContext ctx) throws Exception
XXX 代表方法名可以任意。
@EJB (beanName="HelloWorldBean") jndi: @EJB (mappedName="HelloWorldBean/remote") //依赖注入(dependency injection)
消息驱动EJB
@MessageDriven(activationConfig = //指明这是一个消息驱动Bean
{
@ActivationConfigProperty(propertyName="destinationType", //配置消息的各种属性
propertyValue="javax.jms.Queue"), //指定消息的类型 topic 为javax.jms.Topic
@ActivationConfigProperty(propertyName="destination",
propertyValue="queue/foshanshop")}) //指定消息路径,消息驱动Bean在发布时,如果路径不存在,容器会自动创建该路径,当容器关闭时该路径会自动被删除
实体EJB
@Entity
@Table(name = "Person")
@Entity注释指明这是一个实体Bean,每个实体Bean类映射数据库中的一个表
@Table注释的name属性指定映射的数据表名称
@Column注释定义了映射到列的所有属性,如列名是否唯一,是否允许为空,是否允许更新等,他的属性介绍如
下:
·name: 映射的列名。如:映射Person表的PersonName列,可以在name属性的getName 方法上面加入
@Column(name = "PersonName"),如果不指定映射列名,容器将属性名称作为默认的映射列名。
·unique: 是否唯一
·nullable: 是否允许为空
·length: 对于字符型列,length属性指定列的最大字符长度
·insertable: 是否允许插入
·updatable: 是否允许更新
·columnDefinition: 定义建表时创建此列的DDL
·secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。
@Id 注释指定personid属性为表的主键,它可以有多种生成方式:
·TABLE:容器指定用底层的数据表确保唯一。
·SEQUENCE:使用数据库的SEQUENCE 列来保证唯一
·IDENTITY:使用数据库的INDENTIT列来保证唯一
·AUTO:由容器挑选一个合适的方式来保证唯一
·NONE:容器不负责主键的生成,由调用程序来完成。
@GeneratedValue注释定义了标识字段的生成方式,本例personid的值由MySQL数据库自动生成。
分享到:
相关推荐
**EJB3.0 学习笔记** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建可扩展的、安全的、事务处理的分布式应用程序。EJB3.0是EJB的一个重大更新,引入了许多改进,使得开发过程更为简化,降低了...
提供的文档"ejb3.0+Weblogic+Jboss安装配置及入门例子.doc"和"基于weblogic的EJB学习笔记.htm"应该包含详细的安装指南、配置步骤以及基础的EJB编程示例。"基于weblogic的EJB学习笔记-JSP编程-华夏名网资讯中心 虚拟...
在"达内Java软件工程师培训"中,学员们会深入学习EJB3.0的各种概念和技术,通过实际项目锻炼,掌握如何使用EJB3.0进行企业级应用开发。EJB笔记中的内容可能涵盖了上述所有知识点,包括理论讲解、示例代码以及实践中...
EJB(Enterprise JavaBeans)是Java EE(Enterprise Edition)平台中的核心...在实际工作中,EJB 3.0的培训笔记(如达内的培训资料)可以帮助初学者快速掌握这些概念和实践技巧,从而更好地融入到Java EE的开发环境中。
EJB 3.0 版本引入了许多改进,简化了API,降低了学习曲线,使其更易于使用。 在MVC(模型-视图-控制器)架构中,EJB 主要用于开发业务层。它负责处理数据和业务逻辑,而视图层则展示数据,控制器则协调视图和模型...
**ejb3.0详解** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建企业级应用。EJB 3.0是其第三个主要版本,它在前两个版本的基础上进行了重大改进,旨在提高开发效率,简化API,并引入了POJO...
**EJB概述** Enterprise JavaBeans(EJB)是Java平台企业版(Java EE)的核心组成部分,主要用于构建可扩展、安全且事务处理...学习EJB可以帮助理解企业级应用的复杂性,同时也能更好地评估和选择现代化的开发方案。
【EJB学习笔记】 EJB,全称为Enterprise Java Beans,是Java平台上的一个标准,用于开发和部署服务器端的分布式组件。它基于Java语言,为创建高效能、安全且可扩展的企业级应用提供了框架。EJB规范由Java ...
本学习笔记将深入探讨EJB的概念、架构、类型以及如何在实际项目中应用它们。 EJB是一种服务器端的组件模型,它为开发人员提供了面向对象的方法来创建分布式的企业级应用。EJB容器负责管理组件的生命周期、提供安全...
从最初的EJB 1.0到EJB 2.x,再到EJB 3.0,其复杂性和学习曲线逐渐降低。EJB 3.0引入了注解,极大地简化了代码,并且与JPA、JSF等其他Java EE技术更好地集成。最新的EJB 3.2版本继续优化了API,提高了开发效率。 **...
有《Jboss EJB3.0实例教程》和《EJB3.0实例教程》两本pdf书籍,以及两本外文pdf书籍及源码,分别为ejb-3_0-fr-spec-persistence.pdf和ejb-3_0-fr-spec-simplified.pdf,以及EJB课堂笔记.doc和EJB基础.chm、EJB学习...
### EJB学习笔记4:深入理解实体与JPA #### 实体的概念与作用 实体,在企业级Java开发中,特别是EJB(Enterprise JavaBeans)框架下,指的是具有持久化能力的POJO(Plain Old Java Object)类。不同于实体Bean...
本学习笔记将聚焦于Java EE的核心技术和组件,包括Struts、JSTL、Spring以及EJB 3.0,这些都是在实际开发中广泛使用的框架和工具。 首先,Struts是Apache软件基金会的一个开源项目,主要作为MVC(Model-View-...
对于深入学习EJB3.0,可以参考《精通EJB3.0》和《Java Enterprise Bean3.0》这两本书籍。 总结来说,EJB是Java EE的重要组成部分,它提供了一种在服务器端构建可扩展、安全的企业级应用的方法。学习EJB涵盖了从基本...
EJB 3.0引入了注解,大大减少了XML配置,使得EJB更加易用。EJB 3.1和3.2继续优化,支持轻量级的会话Bean和更灵活的部署选项。 总的来说,EJB是Java EE框架中处理企业级服务的核心组件,它提供了强大的功能,如事务...
在技术总述部分,笔记首先阐述了EJB 3.0作为Java EE平台的核心组件之一,是如何简化企业级应用开发的。EJB 3.0引入了许多改进,如注解驱动的编程模型,降低了开发者的门槛,使得开发更加高效和直观。 开发环境的...