基于EJB分布式业务应用组件规范说明.doc_第1页
基于EJB分布式业务应用组件规范说明.doc_第2页
免费预览已结束,剩余11页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于ejb分布式业务应用组件规范说明大连诚高科技股份有限公司第一章 前言1. 目的2. 适用范围ejb组件开发人员,ejb组件维护人员,组件使用人员3. 参考文档4. 术语说明5. 文档变更说明第二章 平台架构简介1、各引擎功能说明服务引擎:查询应用的服务化,将查询引擎转化为实际业务应用,同时也可以提供查询应用 的公共服务接口。查询引擎:使用ejb封装对查询业务的操作,实现对查询业务管理的组件化,引擎的应用,采用本地jar包+ejb本地(远程调用)的形式日志引擎:使用ejb封装对日志记录的操作,实现对日志管理的组件化,采用ejb拦截器机制,记录内容包括,用户信息、操作内容等,并可回溯操作结果(包括第三方应用)。搜索引擎:使用ibm omnifind api 实现搜索引擎的功能.安全认证:包括ejb自定义安全域、用户key验证等多种安全认证。 权限管理:对用户信息和权限进行统一管理,提供安全认证接口。将用户的部门、角色、权限统一划分分配,同时通过对用户信息的管理,可以拓展业务需求,如短信通知、邮件通知、绩效考核、签到等增值服务和人员管理的服务2、关于ejb技术所有的ejb实例都运行在ejb容器中。容器提供了系统级的服务,控制了ejb的生命周期。因为容器掌握了绝大多数系统级的事件。ejb的开发者只需要考虑应用逻辑。通常来说,ejb容器提供了以下的一些系统服务。1、安全管理:控制了客户能够访问的不同的应用函数。容器通过只允许授权的客户访问这些函数来达到这个效果。2、远程调用; 容器为远程链接管理着低层的通信,而且对ejb的开发者和客户都隐藏了底层的通信过程。ejb的开发者在编写应用方法的时候,就像是在调用本地的平台一样。客户也不清楚他们调用的方法可能是在远程被处理的。3、对象管理:客户简单的创建一个ejb的实例,并通常取消一个实例。而容器管理着ejb的实例,使ejb实现最大的效能和内存利用率。容器能够激活和钝化ejb对象,保持众多客户共享的实例池。等等。4、事务管理: 控制了ejb的事务处理的需求。容器管理着复杂的事务处淫。这些事务这些事务可能在不同的平台之间更新数据库。容器使这些事务之间相互独立,互不干扰。保证所有的更新数据库都是成功发生的,否则,就回滚到事务处理之前的状态。5、持久管理:提供实体对象到关系数据库的映射,包括基于对象查找的查询语言在关系数据库上的实现,对象之间的关系在数据库的表中的体现等。6、集群服务:为容器提供集群服务,使多个物理上分离的容器能够提供同样的服务,同时保持服务的一致性。让用户感觉在同一个容器上执行操作。3、各个组件的开发(实现)的总体流程3.1 会话bean(接口)远程接口:根据需求建立业务方法本地接口:继承远程接口所有方法,根据需求添加本地方法l 如果会话 bean 没有定义ejb3.0 业务接口, 则不允许调用getbusinessobject 方法。l 如果会话 bean 没有定义ejb3.0 业务接口或不是通过业务接口调用会话bean,则不允许调用getinvokebusinessinterface 方法。l 如果会话 bean 没有定义远程客户端视图,则不允许调用getejbobject和getejbhome 方法。l 如果客户端没有定义本地客户端视图,则不允许调用getejblocalobject和getejblocalhome 方法。l 对于没有有意义的事务上下文的会话 bean 方法和所有bean 管理事务分割的会话bean,不允许调用getrollbackonly 和setrollbackonly。l 由容器通过会话 bean 的web 服务终端调用的会话bean 方法中不允许调用getmessagecontext 方法。getmessagecontext 方法返回实现了jax-rpc web 服务终端的无状态会话bean 的javax.xml.rpc.handler.messagecontext接口。l 对于没有有意义事务上下文和/或客户端安全上下文的会话bean 方法,不允许调用资源管理器、企业bean 和entitymanager。l 使用容器管理事务分割的企业 bean 不能获取usertransaction 接口。会话 bean 类的名称必须遵循这些规则:l 方法名可以是任意的,但不能以“ejb”开头以避免与ejb 架构使用的回调方法冲突。l 业务方法必须声明为 public。l 方法不能声明为 final 获static。l 如果方法对应于会话 bean 远程业务接口或远程接口的业务方法,那么它的参数和返回类型必须是rmi/iiop 的合法类型。l 如果方法是 web 服务方法或对应于会话bean 的web 服务终端接口的方法,那么它的参数和返回类型必须是jax-ws/jax-rpc 的合法类型。l throws 子句可以定义任意的应用异常。下面是对会话 bean 业务接口的要求:l 接口不能继承 javax.ejb.ejbobject 或javax.ejb.ejblocalobject 接口。l 如果业务接口是远程业务接口,则参数和返回类型必须是rme/iiop 的有效类型。远程业务接口不要求或不希望是java.rmi.remote 接口。throws 子句不应当包含java.rmi.remoteexception。如果接口继承了java.rmi.remote , 则业务接口的方法只可以抛出java.rmi.remoteexception。l 接口可以有父接口。l 如果接口是一个远程业务接口,那么它的方法不能暴露本地接口类型、计时器或计时器句柄、或用于实体bean 的受管理集合类来作为参数或返回值。l bean 类必须实现业务接口,或者业务接口必须使用local 或remote 注释符或部署文件被指定接口为bean 的本地或远程业务接口。应用以下规则:u 如果 bean 类只实现了一个接口,则这个接口被认为是bean 的业务接口。这个业务接口将是本地接口,除非它被用remote 注释符或部署文件指派为远程业务接口。u bean 类可以有多个接口。如果bean 类有多个接口,bean 类的任何业务接口必须显式地使用local 或remote 注释符或部署文件被指派。u 当 bean 类有多个接口时, 这些接口不包括下列的接口:java.io.serializable;java.io.externalizable;javax.ejb 包内的任何借口。u 同一个业务接口不能既是本地接口又是远程接口(注:如果local和/或remote 注释符既被指定bean 类上又被指定到引用的接口上,则它们的值必须相同)。u bean 类通常都实现它的业务接口,如果bean 类使用注释符或部署文件来指派业务接口,那么不要求指明bean 类为接口的实现。下面是对会话 bean 远程接口的要求:l 接口必须继承 javax.ejb.ejbobject 接口。l 在接口内定义的方法必须遵循 rme/iiop 的规则。这意味着它们的参数和返回值必须是rmi/iiop 的有效类型,且它们的throws 子句必须包含java.rmi.remoteexception。l 对于定义在远程接口内的每个方法,必须在会话 bean 类中有一个对应的方法。这个对应的方法必须有:u 相同的名字。u 相同的参数数量和类型,和相同的返回值。u 定义在会话 bean 类中对应方法的throws 中的所有异常,也必须在远程接口中的方法的throws 子句中定义。l 远程接口不能暴露本地接口类型、本地 home 接口类型、计时器或计时器句柄、或由容器管理持久化的实体bean 使用的受管理集合类作为参数或返回值。下面是对会话 bean 本地接口的要求:l 接口必须继承 javax.ejb.ejblocalobject 接口。l 在本地接口中的方法的 throws 语句不能包含java.rmi.remoteexception。l 本地接口可以有父接口。l 对于定义在本接口内的每个方法,必须在会话 bean 类中有一个对应的l 方法。这个对应的方法必须有:u 相同的名字。u 相同的参数数量和类型,和相同的返回值。u 定义在会话 bean 类中对应方法的throws 中的所有异常,也必须在本地接口中的方法的throws 子句中定义。3.2 会话bean实现类在会话bean实现类中,加入拦截器和自定义安全域(安全认证)远程接口实现:实现远程接口中的方法。本地接口实现:实现本地接口中的方法。3.3 拦截器(日志)定义在外部类的拦截器执行的优先级比定义在bean类中的拦截器要高。主要功能:封装应用的公用行为,使这些行为与业务逻辑分离;调用日志组件,对会话bean的使用进行日志记录。对一个单一业务方法的调用,invocationcontext 对象的上下文数据可以穿越多个拦截器方法调用。拦截器类必须有一个 public 的无参构造器。对企业 bean 的组件的编程限制同样适用于拦截器缺省拦截器,缺省拦截器应用于ejb-jar包内的所有组件上。部署文件用于定义缺省拦截器及他们的顺序。在bean的拦截器被调用之前调用缺省拦截器。方法级的拦截器,业务方法上可以定义业务方法拦截器方法。 拦截器方法可以定义在会话 bean 的业务方法和消息bean 的消息监听器方法上。业务方法拦截器通过aroundinvoke 或around-invoke 配置元素指定。aroundinvoke 方法可以定义bean 的超类或拦截器类上。但是,在这些类上只能有一个aroundinvoke 方法。aroundinvoke 方法不能是bean 的业务方法(即不能是bean 的业务接口内定义的方法)。aroundinvoke 方法可以是public,private,protected,或包层级的方法。aroundinvoke 方法不可以声明为final 或static。aroundinvoke 方法有下面的标志符:object (invocationcontext) throws exceptionaroundinvoke 方法可以调用任何业务无法方法可以调用的组件或资源。业务方法拦截器方法可以只应用到单个的业务方法上,而不是 bean 的所有方法上拦截器规范:配置interceptor用于指定拦截器类的方法。拦截方法用around-invoke,pre-contsturct,pre-destory,pre-passivate,post-activate元素来指定。拦截器类最多能有一个around-invoke,pre-contsturct,pre-destory,per=passivate,post-activate方法。如果为 bean 定义了多个拦截器方法,则使用下面的规则来管理拦截器方法的调用顺序。部署文件可以覆盖在注释符内定义的拦截器顺序l 如果可能,首先调用缺省的拦截器方法。缺省的拦截器只能在部署文件中指定。按照在部署文件中指定的顺序执行缺省拦截器。l 如果在 bean 的类上指定了拦截器类,则在执行bean 本身的拦截器方法之前执行拦截器类上的拦截器方法。l 按照在 interceptors 注释符中的顺序执行在拦截器类内定义的aroundinvoke 方法。l 如果拦截器类有超类,则先执行它父类的拦截器方法。l 在执行完拦截器类上拦截器方法后,那么按下述顺序执行:u 如果业务方法上定义有方法级的拦截器类,那么按照在业务方法上interceptors 注释符指定的顺序执行拦截器类上的aroundinvoke 方法。u 如果 bean 有超类,那么执行超类上的aroundinvoke 方法。u 执行 bean 类本身的aroundinvoke 方法。l 如果 aroundinvoke 方法被另一个方法重载(不过这个方法是否是自己的aroundinvoke 方法),则不会被调用。部署文件可以用于覆盖在注释符内指定的拦截器调用顺序。invocationcontext 对象提供了可以使拦截器方法控制拦截器链的元数据,包括是否调用下一个链中的拦截器方法以及它的参数和返回的值。3.4 安全认证(自定义安全域)ejb自定义安全域进行组件使用权限和安全的验证,需要到指定的表中进行验证。3.5 实体bean对数据库中的表映射,生成数据客户化实体(1)实体bean使用entity注释来标记,所有实体bean中的属性如果不需要持久就用transient注释来标记。实体bean的持久化字段可以通过javabeanstyle机制或者声明为public/protected字段来实现。(2)实体bean中的关系可以通过manytomany、onetomany、onetoone等标记说明二者是多对多、一对多还是多对多的关联关系,这些标记直接使用在bean文件中,以减少部署描述符的使用。(3)实体bean和数据库的字段映射可以通过column进行说明,这个标记所起的作用是把bean中的属性和数据库的字段一一对应起来。(4)多对多映射采取中间表连接的映射策略,建立的中间表将分别引入两边的主键作为外键。ejb3.0对于中间表的元数据提供了可配置的方式,可以自定义中间表的表名、列名。3.6 ejb ql(数据持久层)组件实现业务的核心,实现对数据库的操作第三章 业务流程与规范1查询组件 1.1 接口根据业务定义对数据库的查询方法,要能够通用的覆盖未来扩展功能的方法下面介绍一下用来执行ejb ql的query接口的主要方法在queryimpl中的实现,public list getresultlist()方法查询数据库并返回查询结果集合,首先如果flushmode的类型是auto,那么就要用session对象的flush方法提交与当前session相关的数据。然后调用query实例的list方法返回查询结果的列表。public object getsingleresult()方法查询数据库并只返回一条数据记录,首先如果flushmode的类型是auto,那么就要用session对象的flush方法提交与当前session相关的数据。然后调用query实例的uniqueresult方法返回一条查询结果。public query setparameter(string name,object value)方法通过调用query实例的setparameter设置查询的参数。setfirstresult 和 setmaxresults 方法实现数据分页功能。public int executeupdate()方法执行批量更新。 1.2 拦截器调用日志组件,对查询操作进行日志添加。缺省拦截器方法名(或配置文件):参数:使用者信息,操作内容,操作时间,操作ip等返回值:纪录成功、记录失败、其他方法级拦截器:方法名:参数:使用者信息,操作内容,操作时间,操作ip等返回值:纪录成功、记录失败、其他 1.3 自定义安全域对组件自定义的用户权限校验 1.4 实体bean参照第二章3.5 1.5 数据持久层 对数据库查询的具体方法2日志组件2.1 接口日志记录增删改查public list getresultlist()方法查询数据库并返回查询结果集合,首先如果flushmode的类型是auto,那么就要用session对象的flush方法提交与当前session相关的数据。然后调用query实例的list方法返回查询结果的列表。public object getsingleresult()方法查询数据库并只返回一条数据记录,首先如果flushmode的类型是auto,那么就要用session对象的flush方法提交与当前session相关的数据。然后调用query实例的uniqueresult方法返回一条查询结果。public query setparameter(string name,object value)方法通过调用query实例的setparameter设置查询的参数。setfirstresult 和 setmaxresults 方法实现数据分页功能。public int executeupdate()方法执行批量更新。public int executedel()方法执行批量删除。 2.2 拦截器调用日志组件,对查询操作进行日志添加。缺省拦截器方法名(或配置文件):参数:使用者信息,操作内容,操作时间,操作ip等返回值:纪录成功、记录失败、其他方法级拦截器:方法名:参数:使用者信息,操作内容,操作时间,操作ip等返回值:纪录成功、记录失败、其他 2.3 自定义安全域2.4 实体bean 2.5 数据持久层3安全组件3.1 接口 3.2 拦截器调用日志组件,对查询操作进行日志添加。缺省拦截器方法名(或配置文件):参数:使用者信息,操作内容,操作时间,操作ip等返回值:纪录成功、记录失败、其他方法级拦截器:方法名:参数:使用者信息,操作内容,操作时间,操作ip等返回值:纪录成功、记录失败、其他 3.3 自定义安全域3.4 实体bean 3.5 数据持久层4服务组件4.1 接口 4.2 拦截器调用日志组件,对查询操作进行日志添加。缺省拦截器方法名(或配置文件):参数:使用者信息,操作内容,操作时间,操作ip等返回值:纪录成功、记录失败、其他方法级拦截器:方法名:参数:使用者信息,操作内容,操作时间,操作ip等返回值:纪录成功、记

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论