ejb串讲1.docx
- 文档编号:6166724
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:629.98KB
ejb串讲1.docx
《ejb串讲1.docx》由会员分享,可在线阅读,更多相关《ejb串讲1.docx(12页珍藏版)》请在冰豆网上搜索。
ejb串讲1
Ejb内容:
概念
会话bean
实体编程
事务
消息驱动bean
标注,新特征
安全:
不适用,作为了解
什么是ejb
采用java语言,开发部署服务器端的,分布式组件的标准(规范)
Sun公司对ejb架构的定义:
一个用于开发和部署基于组件的分布式业务应用的组件架构。
采用ejb架构编写的应用是可伸缩的、事务性的、多用户安全的。
可以一次编写这些应用,然后部署于任何支持EnterpriseJavaBeans规范的服务器平台。
另:
jsr(javaspecificationRequest)java规范请求
Jcp(javaCommunityProcess):
sun在95年组建的开放性组织(金蝶软件就是其成员)。
Sun要推行一个技术,就要写一个jsr文档交给成员去讨论。
分布式组件:
可以部署在应用服务器之上的组件,可以被远程客户透明(不用关心网络调用的细节)
的访问。
实现位置透明性
Ejb优点,价值:
1.可以享受ejb容器提供的中间件服务
2.开发人员只需要关注业务逻辑
3.不依赖特定容器,可移植
4.快速开发
什么场合使用ejb
1.构建大型的分布式应用:
a)ejb,
b)CORBA(OGM组织开发的,不依赖于语言。
只符合idl协议就可以,最强大的分布式组件技术,远远复杂于ejb):
通用对象请求代理架构。
c)Dcom(微软的分布式应用,依赖与微软的平台)
d)webservice(缺点:
性能差,优点:
不依赖)
2.原理:
委托、代理
委托模型如下:
目标类C不允许客户端A直接调用,客户端A又必须要调用C,就产生了委托类B
作用:
解耦合,提供增值服务
代理模型:
要求B和C实现同一个接口
RMI
RemoteMethodinvocations:
跨虚拟机透明(屏蔽网络调用细节)访问对象,调用对象的方法。
涉及名词:
分布式对象:
相对于调用者而言,在另一个jvm中。
Stub:
分布式对象的本地代理,实现了远程接口,编码,解码,网络连接,寻址
Skeleton:
接收stub请求,解码,将请求交给分布式对象。
编码
整个过程由jdk工具rmic来完成。
Ejb的六个角色
Ejb的开发人员
Ejb的架构师
Ejb部署人员
系统管理员
应用服务器开发商
工具提供商
开源:
jboss、sunAS、sunglassfish。
商用:
websphere、weblogic(Oracle.<--bea.),
J2ee
使用java简化开发企业级的分层的、分布式的平台和标准。
分层结构
技术:
jsp、servlet、jdbc、ejb、jca、jms、jaw,jndi,
常见的名词:
怎么去写一个ejb
SLSB:
1.只存在romote接口的statelessSessionBean
1)定义一个回话bean,首先要定义一个包含其所有业务方法的接口。
不需要任何注释,只是一个普通的接口。
条用ejb的客户端通过使用这个接口引用从ejb容器得到回话bean对象的stub。
2)实现上面的接口并加入如下标注:
@stateless@Remote({****.class})
3)打包或用ide发布,浏览器中打开http:
//localhost:
8080/jmx-console查看发布的jndi名称。
当一个无状态会话bean发布到ejb容器时,容器就会为它创建一个对象stub,并把它注册进jndi目录,客户端代码通过jndi名获得stub,通过stub,客户端就可以调用业务方法。
Jndi默认命名规则:
1)如果ejb应用打包为:
*ear、则规则如下:
本地接口:
earfilename/ejbclassname/local
远程接口:
earfilename/ejbclassname/remote
例如:
HelloWorld应用打包为HelloWorld.ear发布到ejb容器,则远程调用时使用的jndi名为:
HelloWorld/HelloWorldBean/remote
2)如果打包为*.jar、规则如下:
本地接口:
ejbclassname/local
远程接口:
ejbclassname/remote
例如:
HelloWorld应用打包为HelloWorld.ear发布到ejb容器,则远程调用时使用的jndi名为:
HelloWorldBean/remote
注意:
ejbclassname不包含包名
2.只存在local接口的statelessSessionBean(不指定采取的默认方式)
注意:
同一个jvm称为local
应用:
在独立的tomcat服务器中执行客户端代码将出现
3.存在local接口和remote接口的statelessSessionBean(在实际应用中的选择)、
当会话bean的某些方法只提供ejb容器内部调用时,可以定义在local接口。
无状态sessionbean不记录使用者状态,一旦实例化就会被加入到池中,各个用户都可以共用。
自己的属性(变量)会收到所有调用者的影响。
SFSB:
1.特点:
可以维持自身状态的会话Bean,容器针对每一个用户都创建一个对象,在用户的生存期内,SatatefulSessionbean保持了用户的状态。
用cache提高并发性。
2.激活、钝化机制:
Ejb容器对最近最少使用的bean保存到持久化设备就叫钝化,恢复操作就是激活。
SLSB和SFSB的区别:
开发的区别:
1,不同的标注
2,sfsb必须实现序列化接口
其他:
Slsb不记录状态,换句话说,slsb很有可能是同一个实例服务多个调用者
Sfsb记录用户的状态
Sfsb比slsb消耗资源。
注:
jndi名称可以自行定义,格式如下:
RemoteBinding(jndiBinding=”aa/bb”)
SessionBean的生命周期:
前提:
一般情况下,ejb容器会管理sessionbean的实例。
但如下情况可能要自己定制sessionbean的管理过程:
1,在创建实例的时候初始化字段变量
2.在销毁实例的时候关闭外部资源
----生命周期的回调方法:
@remove修饰的方法只是ejb容器销毁其实例
1.对于SLSB不会正在删除
2.对于SFSB会删除
回调方法注意:
不能够在事务安全上下文环境中运行
对调方法定义在单独的类里要给方法传参数InvocationContext
@PostConstruct、@PreDestroy只能在方法前面
拦截器
可以监听一个或多个方法,拦截器对方法调用流提供了细粒度控制。
可以在sessionbean和message-Drivenbean上使用。
规则1:
@interceptor({*.class})
实现:
在上面定义的*的类中使用如下标注完成拦截器的定义:
@AroundInvoke:
指定了要用作拦截器的方法,该方法遵循一下格式:
publicObjectxxx(InvocationContextctx)throwsException{
}
xxx代表任意方法名
规则2:
直接在bean中定义上面的方法,无需写@interceptor。
Chapter3.jpa
Jpa背景:
在2.x中,entitybean需要实现Home接口,哪么现在所有的持久化操作都要借助javax.persistence.EntityManager完成。
注意:
javax.persistence.EntityManager的应用并非限制于这样的环境,普通的java应用程序中同样可以使用。
Jpa的概念,特点;
JavaPersistenceapi:
一套标准的持久化接口。
解耦合了应用程序与具体的持久化提供者
可以脱离ejb容器使用
实体:
用来建模数据与关系的pojo类
被jpa操作
不能被远程客户直接使用
生命周期长。
持久上下文与实体管理器的关系:
PersistenceContext是由一组被托管的实体对象实例构成的集合,它受entityManger的管理。
entityManger追踪PersistenceContext中所有对象的修改、更新操作。
并根据默认的flush模式保存到数据库。
Jpa编程
实体bean由实体类和Persistence.xml文件组成。
Persistence.xml存在与META-INF目录
A.实体编写注意事项:
1.实现序列化接口
2.缺省构造器
3.不能是final的
4.属性和setter/getter方法
5.实现equals和hashcode方法
6.可编写少量的业务逻辑
B.标注:
注意:
在采用mysql时,指定表名或列名时如果碰到数据库关键字,如order时,将报错。
解决方案:
@Table(name=”’Order’”)
Sqlserver中用【】括起来。
C.Persistence.xml:
数据源配置:
略。
示例:
如果在Persistence.xml中配置多个持久化单元,则需要指定单元名:
@PersistenceContext(unitName=”xxx”);
注意:
如果在Persistence.xml中指定自动建表,则表名实体bean在发布和卸载的时候会自动创建和删除表。
实体管理器提供的操作:
1.Find、getReference:
find查询不到,返回null,getReference报错
2.Remove:
删除一个实体
实体生命周期的管理
除了find和getReference都会引发flush操作。
实体回调方法:
Hibernate中要求我们在实体类中实现特定的接口
当实体执行:
persistremove,update,query操作的时候,持久化提供着会在执行之前,之后做一些附加的操作。
如:
日志,记录实体数据等附加操作。
实体被持久化提供者回调。
乐观锁:
需要有权限改表结构,
与数据库本身无关
使用方式:
@Version
privateintversion;
注意:
有类型的要求:
int,Integer,long,Long,short,Short,Timestamp
不需要程序员干预,由持久化提供者来维护。
悲观锁:
泛指数据库的一种锁机制。
Jpa中无法直接使用。
事务的隔离性是事务性系统的关键。
事务的隔离性是由隔离条件定义的,隔离条件有:
脏读(dirtyreads)。
可重复读(repeatablereads),幻读(phantomreads)。
这些是由俩个或多个事务对相同数据操作引起的。
脏读:
一个事务读取了前一事务尚未提交的修改。
解释:
如果前一事务回滚,读到数据就是无效数据
可重复读:
如果同一事务再次读取数据时,能够保证数据原样不变,就是可重复读。
实现:
锁定所读数据,不允许修改。
所读数据是一个不反应修改的快照。
幻读:
如果添加到数据库中的新记录在执行实际插入之前被其他事务检测到,就是幻读。
对应数据库中:
读锁,写锁,独占锁。
读锁:
不允许其他事务在当前事务结束之前修改读取的数据。
避免不可重复读
写锁:
在数据更新时使用。
不允许其他事务在当前事务结束前修改数据,但是允许其他事务或自身进行脏读。
独占锁(排他写锁):
也用于更新。
不允许其他事务在当前事务结束前修改或读取数据。
隔离级别:
ReadUncommitted:
可以读取未提交数据:
可能出现脏读,不可重复读,幻读
Readcommitted:
不可读取未提交数据。
避免脏读
Repeatableread:
不能修改其他事务读取的数据。
避免脏读,不可重复读
Serializable:
具有排他的读写权限。
不同事务不能同时读或修改相同的数据。
避免脏读,不可重复读,幻读。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ejb 串讲
![提示](https://static.bdocx.com/images/bang_tan.gif)