- 浏览: 7254211 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
1.
<!-- [endif]-->@EJB 注释
其常用属性如下:
beanName: 指定 EJB 的类名(不带包名),
mappedName: 指定 Bean 实例的 JNDI 名。
例如:
A 、 @EJB(beanName=” A”)
IA a;
A 就是 IA 的实现类,如果 IA 的实现只有一个,那么这里可以不指定。
注意: 学习 EJB3.0 时,我用的是 JBoss-4.0.5.GA 。 JBoss-4.0.5.GA 把以前版本 @EJB 注释从 javax.annotation 包移到了 javax.ejb 中了。
B 、依赖注入之 @Resource
@Resource 注释,注入来自 JNDI 的任何资源。
例如:
@Resource (mappedName=”java:/DefaultMySqlDS”)
DataSource myDb;
“java:/DefaultMySqlDS” 是数据源 DefaultMySqlDS 的全局 JNDI 名。如果 JNDI 对象在本地 (java:comp/env)JNDI 目录中,则只需给定它的映射名称即可。
<!-- [if !supportLists]-->2. <!-- [endif]-->实体Bean
一个实体 Bean 由实体类和 persistence.xml 文件组成。 Persistence.xml 文件在 Jar 文件的 META-INF 目录。 Persistence.xml 文件指定实体 Bean 使用的数据源及 EntityManager 对象的默认行为。 Persistence.xml 文件的配置说明如下:
<persistence>
<persistence-unit name="xxx">
<jta-data-source>java:/ MySqlDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
Persistence-unit 节点可以一有一个或多个,每个 persistence-unit 节点定义了持久化内容名称、使用的数据源名称及 Hibernate 属性。 Name 属性用作设置持久化名称。 jta-data-source 节点用作指定实体 Bean 使用的数据源名称,指定数据源名称时 java:/ 前缀不能缺少,数据源名称大小写敏感。
Properties 节点用过指定 Hibernate 的各项属性,如果 hibernate.hbm2ddl.auto 的值设为 create-drop ,在实体 Bean 发布及卸载时将自动创建及删除相应数据表。
注意: 在编写 EJB 的实体 Bean 时一定要注意,必须有一个无参数的构造函数,当然如果你没写任何构造函数, java 会自动给你一个默认的无参数的构造函数。但是当你自己写了有参数的构造函数时,千万别忘记了加上一个无参数的构造函数,最好的习惯是在建类时就把无参数构造函数写上,这样就不会出错。
<!-- [if !supportLists]-->A. <!-- [endif]-->写在类声明之前的有:
<!-- [if !supportLists]-->a. <!-- [endif]-->@Entity ,以表明此 Bean 为 EntityBean 。
<!-- [if !supportLists]-->b. <!-- [endif]-->@Table(name=”TableName”) ,表示此实体 Bean 对应的数据库表名。
<!-- [if !supportLists]-->B. <!-- [endif]-->写在 getXxx() 方法声明之前的有:
<!-- [if !supportLists]-->a. <!-- [endif]-->@Column 注释定义了映射到列的所有属性,如:列名是否唯一,是否允许为空,是否允许更新等,它的属性介绍如下:
<!-- [if !supportLists]-->n <!-- [endif]-->name: 映射的列名。如:映射 Person 表的 PersonName 列,可以在 name 属性的 getName 方法上面加入 @Column(name=”PersonName”) ,如果不指定映射列名,容器将属性名称作为默认的映射列名。
<!-- [if !supportLists]-->n <!-- [endif]-->unique: 是否唯一
<!-- [if !supportLists]-->n <!-- [endif]-->nullable: 是否允许为空
<!-- [if !supportLists]-->n <!-- [endif]-->length: 对于字符型列, length 属性指定列的最大字符长度
<!-- [if !supportLists]-->n <!-- [endif]-->insertable: 是否允许插入
<!-- [if !supportLists]-->n <!-- [endif]-->updatable: 是否允许更新
<!-- [if !supportLists]-->n <!-- [endif]-->columnDefinition: 定义建表时创建此列的 DDL
<!-- [if !supportLists]-->n <!-- [endif]-->secondaryTable: 从表名。如果此列不建在主表上 ( 默认建在主表 ) ,该属性定义该列所在从表的名字。
<!-- [if !supportLists]-->b. <!-- [endif]-->@Id 注释指定 personid 属性为表的主键,它可以有多种生成方式:
<!-- [if !supportLists]-->n <!-- [endif]-->TABLE :容器指定用底层的数据表确保唯一。
<!-- [if !supportLists]-->n <!-- [endif]-->SEQUENCE :使用数据库的 SEQUENCE 列来确保唯一
<!-- [if !supportLists]-->n <!-- [endif]-->IDENTITY :使用数据库的 INDENTIT 列来保证唯一
<!-- [if !supportLists]-->n <!-- [endif]-->AUTO :有容器挑选一个合适方式来保证唯一
<!-- [if !supportLists]-->n <!-- [endif]-->NONE :容器不负责主键的生成,由调用程序来完成
<!-- [if !supportLists]-->c. <!-- [endif]-->@GeneratedValue 注释定义标识字段的生成方式。
<!-- [if !supportLists]-->3. <!-- [endif]-->复合主键(Composite Primary Key)
当需要使用多个属性变量(表中的多列)联合起来作为主键时,我们需要使用复合主键。复合主键要求我们编写一个复合主键类 ( Composite Primary Key Class ) 。复合主键类需要符合以下一些要求:
<!-- [if !supportLists]-->A. <!-- [endif]-->复合主键类必须是 public ,必须具备一个没有参数的构造函数
<!-- [if !supportLists]-->B. <!-- [endif]-->复合主键类的每个属性变量必须有 getter/setter ,如果没有,每个属性变量则必须是 public 或者 protected
<!-- [if !supportLists]-->C. <!-- [endif]-->复合主键类必须实现 java.io.Serializable 接口
<!-- [if !supportLists]-->D. <!-- [endif]-->复合主键类必须重写 equals() 和 hashcode() 方法
<!-- [if !supportLists]-->E. <!-- [endif]-->复合主键类中的主键属性变量的名字必须和对应的 EntityBean 中主键属性变量的名字相同
<!-- [if !supportLists]-->F. <!-- [endif]-->一旦主键值设定后,不要修改主键属性变量的值
<!-- [if !supportLists]-->4. <!-- [endif]-->JBoss 的目录结构
安装 JBoss 会创建下列目录结构:
目录 描述
bin 启动和关闭 JBoss 的脚本
client 客户端与 JBoss 通信所需的 Java 库( JARs )
docs 配置的样本文件(数据库配置等)
docs/dtd 在 JBoss 中使用的各种 XML 文件的 DTD 。
lib 一些 JAR , JBoss 启动时加载,且被所有 JBoss 配置共享。(不要把你的放在这里)
server 各种 JBoss 配置。每个配置必须放在不同的子目录。子目录的名字表示配置的名字。 JBoss 包含 3 个默认的配置: minimial , default 和 all ,在你安装时可以进行选择。
server/all JBoss 的完全配置,启动所有服务,包括集群和 IIOP 。 ( 本教程就采用此配置 )
server/default JBoss 的默认配置。在没有在 JBoss 命令航中指定配置名称时使用。 ( 本教程没有安装此配置,如果不指定配置名称,启动将会出错 )
server/all/conf JBoss 的配置文件。
server/all/data JBoss 的数据库文件。比如,嵌入的数据库,或者 JBossMQ 。
server/all/deploy JBoss 的热部署目录。放到这里的任何文件或目录会被 JBoss 自动部署。 EJB 、 WAR 、 EAR ,甚至服务。
server/all/lib 一些 JAR , JBoss 在启动特定配置时加载他们。 (default 和 minimial 配置也包含这个和下面两个目录。 )
server/all/log JBoss 的日志文件
server/all/tmp JBoss 的临时文件。
<!-- [if !supportLists]-->5. <!-- [endif]-->持久化实体管理器 EntityManager
EntityManager 是由 EJB 容器自动地管理和配置的,通常声明方式如下:
@PersistenceContext(unitName="xxx")
EntityManager em;
unitName 属性的值 xxx 对应 persistence.xml 文件中的 <persistence-unit name="xxx"> 元素的 name 属性的值。如果只有一个持久化内容配置,不需要明确指定。
其常用的 API 如下:
<!-- [if !supportLists]-->n <!-- [endif]-->增加数据: persist() 方法
<!-- [if !supportLists]-->n <!-- [endif]-->删除数据: remove() 方法
<!-- [if !supportLists]-->n <!-- [endif]-->合并数据: merge() 方法
<!-- [if !supportLists]-->n <!-- [endif]-->查询数据: find() 或 getReference() 方法
<!-- [if !supportLists]-->n <!-- [endif]-->执行 JPQL 操作: createQuery ()方法
<!-- [if !supportLists]-->n <!-- [endif]-->执行 SQL 操作 createNativeQuery() 方法
<!-- [if !supportLists]-->6. <!-- [endif]-->会话Bean
<!-- [if !supportLists]-->A. <!-- [endif]-->在类名前声明:
@Stateless 注释定义这是一个无状态会话 Bean
@Remote 注释指明 Bean 的 remote 接口
@Local 注释指明 Bean 的 local 接口
@Stateful 注释定义这是一个有状态会话 Bean
@SuppressWarnings("serial") 注释屏蔽缺少 serialVersionUID 定义的警告
注意: Stateless Session Bean 与 Stateful Session Bean 的区别
这两种 Session Bean 都可以将系统逻辑放在方法之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此一个使用者会有自己的一个实例。 Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候, EJB 容器并不会寻找特定的 Stateless Session Bean 的实体来执行这个 method 。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的实例在执行。从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。
<!-- [if !supportLists]-->B. <!-- [endif]-->如何改变 Session Bean 的 JNDI 名称
默认的 JNDI 命名规则前面已经介绍过,但有些情况下需要自定义名称。要自定义 JNDI 名称,可以使用 @LocalBinding 和 @RemoteBinding 注释:
@LocalBinding 注释指定 Session Bean 的 Local 接口的 JNDI 名称,
@RemoteBinding 注释指定 Session Bean 的 Remote 接口的 JNDI 名称
例如,在类声明之前加上:
<!-- [if !supportLists]-->n <!-- [endif]-->@Stateless
<!-- [if !supportLists]-->n <!-- [endif]-->@Remote ({RemoteOperation.class})
<!-- [if !supportLists]-->n <!-- [endif]-->@RemoteBinding (jndiBinding="xxx/RemoteOperation")
<!-- [if !supportLists]-->n <!-- [endif]-->@Local ({LocalOperation.class})
<!-- [if !supportLists]-->n <!-- [endif]-->@LocalBinding (jndiBinding="yyy/LocalOperation")
<!-- [if !supportLists]-->C. <!-- [endif]-->Session Bean 的生命周期
通过使有下面所列的注释, EJB 3.0 允许你将任何方法指定为回调方法。 EJB 3.0 中, bean 可以有任意数量,任意名字的回调方法。
<!-- [if !supportLists]-->n <!-- [endif]-->@PostConstruct :当 bean 对象完成实例化后,使用了这个注释的方法会被立即调用。这个注释同时适用于有状态和无状态的会话 bean 。
<!-- [if !supportLists]-->n <!-- [endif]-->@PreDestroy :使用这个注释的方法会在容器从它的对象池中销毁一个无用的或者过期的 bean 实例之前调用。这个注释同时适用于有状态和无状态的会话 bean 。
<!-- [if !supportLists]-->n <!-- [endif]-->@PrePassivate :当一个有状态的 session bean 实例空闲过长的时间,容器将会钝化 (passivate) 它,并把它的状态保存在缓存当中。使用这个注释的方法会在容器钝化 bean 实例之前调用。这个注释适用于有状态的会话 bean 。当钝化后,又经过一段时间该 bean 仍然没有被操作,容器将会把它从存储介质中删除。以后,任何针对该 bean 方法的调用容器都会抛出例外。
<!-- [if !supportLists]-->n <!-- [endif]-->@PostActivate :当客户端再次使用已经被钝化的有状态 session bean 时,新的实例被创建,状态被恢复。使用此注释的 session bean 会在 bean 的激活完成时调用。这个注释只适用于有状态的会话 bean 。
<!-- [if !supportLists]-->n <!-- [endif]-->@Init :这个注释指定了有状态 session bean 初始化的方法。它区别于 @PostConstruct 注释在于:多个 @Init 注释方法可以同时存在于有状态 session bean 中,但每个 bean 实例只会有一个 @Init 注释的方法会被调用。这取决于 bean 是如何创建的(细节请看 EJB 3.0 规范)。 @PostConstruct 在 @Init 之后被调用。
<!-- [if !supportLists]-->n <!-- [endif]-->@Remove: 对于有状态 session bean 。当应用通过存根对象调用使用了 @Remove 注释的方法时,容器就知道在该方法执行完毕后,要把 bean 实例从对象池中移走。
<!-- [if !supportLists]-->D. <!-- [endif]-->拦截器 (Interceptor) :
拦截器可以监听程序的一个或所有方法。拦截器对方法调用流提供了细粒度控制。可以在无状态会话 bean 、有状态会话 bean 和消息驱动 bean 上使用它们。拦截器可以是同一 bean 类中的方法或是一个外部类。
发表评论
-
[转]EJB3.0中的依赖注入,截获器及其在WebLogic Server 10中的扩展
2013-03-02 13:21 22791 前言 与EJB2.1相比,EJB3.0规范引入了两个重要 ... -
[转]通过struts2-ejb3-plugin把Struts2与EJB3.0整合
2013-03-02 13:01 2207本文是讲述使用struts2- ... -
Ejb3.0的安全访问
2010-05-05 21:03 2299package com.easyway.tbs;/** * e ... -
EJB3.0 TimerService的使用
2010-05-05 21:01 2352package com.easyway.tbs;/** * T ... -
EJB3.0 中远程本地bean访问使用
2010-05-05 20:59 2470package com.easyway.tbs;/** * 远 ... -
EJB3.0的生命周期
2010-05-05 20:57 2274package com.easyway.tbs;/** * E ... -
Hibernate和EJB3.0的属性注解必须注意的
2010-01-19 15:38 2393枚举类型: ... -
JPA规范的主要内容
2009-08-16 08:35 2089Entity Identity 实体标识一般采用单一值做为en ... -
EJB3.0-JPA实体的注解规范以及Hibernate特有的扩展(上)
2009-07-15 12:48 2284本章内容覆盖了EJB3.0(也就是JPA)实体的注解规范以及H ... -
JPA注解
2009-06-10 13:46 17731、@Entity(name="EntityNa ...
相关推荐
EJB3课堂笔记,通俗易懂,很简洁,PDF格式
学习EJB3过程中自己总结的一些关于学习EJB3的技术点,以及可能遇到的问题
Ejb3中的注释 @EJB注释,其常用属性
Weblogic EJB 学习笔记 ejb 基础知识 EJB 组成 EJB 配置描述器 建立ejb 档案文件 容器管理的事务 ejb 引用
平时学习笔记 java ejb3相关 开发技术
EJB中的注释是EJB中的重点,也是难点,EJB注释精解主要用于对其进行讲解,希望对正在学习EJB的朋友有所帮助。
EJB学习笔记 自己的学习心得
非常不错的EJB新手学习资料!!包含EJB概述 部署与使用
比较实用的东西,具体介绍了Weblogic Ejb的使用
EJB学习笔记2,希望大家多多进步
EJB学习笔记.doc
EJB工作原理学习笔记.pdf EJB工作原理学习笔记.pdf
记录自己学习EJB3.0中学到的各个章节的一些东西.
经典资料+个人心得,希望大家能喜欢
ejb3中文版
EJB简单入门,是自己在学习过程做好的笔记。里面有很多具体的实例。
EJB3的三本好书之三,也很不错的一本ejb3的书籍,是英文版,附带源代码,这本书的好处是与Mastering EJB 3ed有一定的继承性,可以对比来看. 3本书的地址 1. Beginning EJB3 Application Development From Novice to ...
EJB3的三本好书第二本,最好的介绍ejb3的书,看过之后,其他的书都送人了,而且附带的源代码,几乎包括了所有的主流应用服务器的例子,glassfish, jboss, weblogic, oracleAS 3本书分别是: 1. Beginning EJB3 ...
EJB3一对多和多对一关系映射实例