全部博文(626)
分类: Java
2013-09-22 09:47:42
J2EE Architecture(19)
1、会话Bean
会话Bean有两种类型:无状态的会话Bean和有状态的会话Bean。
两者区别在于:在参与和维护与客户端的会话状态时,所用的方法和参与程度不同。
具体来说,有状态的会话Bean能为企业提供全面或局部的工作流及流程支持。
无状态会话Bean没有对话状态,这些Bean的实例相互等同。即可方便地使用池化概念重用此类实例。
有状态会话Bean能与客户端长期保持会话状态,在完成特定业务流程前,可在Bean和客户端之间执行若干次对话交换。
2、实体Bean
实体Bean是企业的持久数据组件,可表示各种信息,如所有经常账户持有者的银行账户明细、某个公司专用的保险单等。
实体Bean可能包含核心业务数据,这些关键数据用于满足企业功能需求。
实体Bean与企业数据相伴而生。即实体Bean直接指向数据库表中的特殊记录。
与会话Bean不同,实体Bean在容器活服务器崩溃时,能够生存下来。对企业而言,这是一个至关重要的特性。
在存储实体Bean的容器和服务器发生任何重大故障时,企业可以恢复这些实体Bean。
1)主键
它由“EJB对象”表示容器利用这个对象与实体Bean的特殊实例关联。
2)关系
企业处理大量持久数据,这些数据在本质上非常复杂。不同持久数据之间的关系归结为以下一些重要的类型:
(1)基数;
(2)方向;
(3)聚合、复合和级联删除
(4)递归、循环和钝化加载
(5)引用完整性
3)实体Bean和池化
实体Bean实例池
(1)BMP(Bean Managed Persistence,Bean管理的持久性)
(2)CMP(Container Managed Persistence,容器管理的持久性)
4)EJB查询语言——EJB-QL
EJB-QL为CMP实体Bean的finder和select方法定义了查询。
生成的EJB-QL的查询字符串通常包括SELECT、FROM、WHERE三个子句。
EJB-QL的设计基于SQL92规范。
3、服务
1)JDBC
2)JTS/JTA
3)JNDI
4)JMS
5)JavaMail API
6)JAF
7)J2EE连接器架构
8)JAAS
4、事务
“事务”指企业的逻辑工作单元,最终将更改持久数据,以满足所有数据参与者和相关方的要求。
事务的性质:原子性、一致性、隔离性、持久性。
1)企业使用4种事务模型:
(1)普通事务
大多数数据库和EJB都采用普通事务模型。
(2)嵌套事务
其原子工作单元嵌入到其它事务中。嵌套事务可表示成树状结构。
(3)链式事务
一组互连的原子工作单元,链在一起。
在该模型中,前一个提交事务的资源可用于下一事务。
(4)Sagas
类似于链式模型,也是将多个事务链在一起。如某个具体事务失败,将“补偿”该具体事务。
2)J2EE的事务参与者
在J2EE程序中,将有大量组件和容器参与事务。Web层的Servlet、Servlet Filter和JSP组件,业务层的会话Bean、实体Bean和MDB式事务流程的主要参与者。可统称为“事务应用程序”。
数据库通常是执行事务的终点。——称为“资源管理器”。
事务边界称为“事务分界线”。任何特殊事务都有两条分界线。第一条分界线标志事务开始,而第二条标志事务结束。开始是起始分界线标志,而提交活回滚是事务结束标志。
分布式事务本身十分复杂,因为事务发生在多个层并跨越网络。企业应用程序场景可使用多个事务资源,使问题更加复杂。为控制这种局面,事务管理器使用X/Open XA特殊协议,以交流信息,管理使用多个资源管理器的事务。参与企业分布事务的资源管理器互不知情,事务管理器可使用两阶段提交协议,以有效管理事务。J2EE为企业应用程序提供分布式、两阶段提交事务支持。
两阶段提交协议将事务过程分为两个阶段。在第一阶段,事务管理器所涉及的资源做好提交准备,接着等候资源管理器的响应。此时,任何资源管理器都可以向事务管理器发出明确的“不提交”要求。在第二阶段,如果一切正常,事务管理器将命令资源管理器提交;而如果发生任何意外,则命令资源管理器回滚。
3)JTS和JTA
JTS模型在CORBA OTS(Object Transaction Service,对象事务服务)的基础上建立,可确保移植性和可交互性。JTA指定用来定义和控制分布式事务的接口。
在JTA设计中,资源管理器、容器以及应用服务器使用这些API将事务作为“服务”提供给应用程序。
JTA包含以下三个重要接口:
(1)javax.transaction.TransactionManager接口由应用服务器实现,目的是提供事务管理器支持。此类服务能代替用户应用程序管理事务。
(2)javax.transaction.UserTransaction接口供用户应用程序使用。管理组件事务的方法有3种:begin()、commit()、rollback()。
(3)javax.transaction.xa.XAResource接口用于为分布式应用程序提供两阶段提交支持。这个接口由参与分布式事务活动的服务器和资源管理器实现。
4)业务层的事务
企业Bean组件包含以下两类事务:
(1)BMT(Bean Managed Transaction,Bean管理的事务)
使用BMT时,Bean开发人员必须编写代码,以启动和完成事务。Bean需要使用javax.transaction.UserTransaction引用,需要在部署描述符中声明这个事务模式。
(2)CMT(Container Managed Transaction,容器管理的事务)
CMT是标准的事务边界声明方式,边界将由企业Bean的EJB容器指定划定。
在使用CMT边界时,容器将使用“应用程序组装者”在部署描述符中提供的“属性”设定期限。
容器可以利用这些“事务属性”确定是否在特定事务上下文运行企业Bean的方法。
有六个方法帮助容器在方法执行期间管理事务:Required必需、Requires New需要新事物、Supports支持、Not Supported不支持、Mandatory强制、Never不参与。
5)会话同步
使用CMP的有状态会话Bean也可以实现一个特殊事务接口javax.ejb.SessionSynchronization。在实现这个接口后,有状态会话EJB可了解事务状态:准备提交、事务是否已提交、事务是否回滚。
有状态会话EJB实现的三个方法:afterBegin()、beforeCompletion()、afterCompletion()。都是容器回调方法。
5、安全
1)身份验证
单向身份验证
双向身份验证:即参与双方互相验明身份,相互验证。
可在J2EE应用程序的Web层和业务层实施身份验证:
2)WEB层的身份验证
(1)基本身份验证
Web应用程序通过检索“用户名”和“密码”来辨别真伪。最简单,但它允许采用base64编码格式的用户名和密码在Internet上传输,不能为企业应用程序提供可靠的安全保障。
(2)摘要身份验证
使用更安全的算法,如MD5,对来自浏览器的用户名和密码执行编码。
(3)基于表单的身份验证
基本同基本身份验证。
(4)HTTPS相互身份验证
客户端和服务器将相互验明身份。相互验证通过SSL(Secure Socket Layer,安全套接字层)进行,客户端和服务器应用程序都需使用X.509证书。
3)业务层的身份验证
在接收客户端调用时,业务层通常会利用Web层的身份验证。如果调用来自Web层,且经过合理身份验证,该调用将获得业务层的信任。
信任又称“保护域”。保护域是一组实体,这些实体相互了解。处在同一个域的实体没必要进行身份验证。
为成分利用“保护域”的概念,Web资源必须首先验证客户的身份,接下来,Web组件就可以与业务层组件在保护域内部进行交互。
4)授权
J2EE平台在两个级别上实施授权:
(1)声明化授权
部署描述符用于两个级别,即业务层级别和Web层级别,为调用者分配访问权限。
宏观级别,是粗粒度授权模型。
(2)编程化授权
核心J2EE API通过提供一些嵌入Servlet和EJB API的方法执行精细控制。
5)消息保护
有必要确认在调用者和被调用者间交换的信息前后是一致的。
一种消息保护方法是给消息附加消息签名。可用单向散列算法,将消息签名计算为“摘要”,这是使用公钥机制的加密方法。
6)审计
审计指随着时间的推移,在企业中记录各个级别和各个位置的事件。
审计的作用是明确责任,并确保符合政府制定的规章制度。