(计算机系统结构专业论文)具有动态载入的分布式可编程环境的构建方法研究.pdf_第1页
(计算机系统结构专业论文)具有动态载入的分布式可编程环境的构建方法研究.pdf_第2页
(计算机系统结构专业论文)具有动态载入的分布式可编程环境的构建方法研究.pdf_第3页
(计算机系统结构专业论文)具有动态载入的分布式可编程环境的构建方法研究.pdf_第4页
(计算机系统结构专业论文)具有动态载入的分布式可编程环境的构建方法研究.pdf_第5页
已阅读5页,还剩64页未读 继续免费阅读

(计算机系统结构专业论文)具有动态载入的分布式可编程环境的构建方法研究.pdf.pdf 免费下载

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

文档简介

摘要 摘要 互联网给人们带来了很大的便利 基于互联网的数据互访是技术基础 s u n 公司提出的砌 远程方法调用 对数据访问提供了一层逻辑封装 随后c o r b a 的出现 s u n 公司推出了e j b 企业级j a v a b e a n e j b 技术的出现给分布式编 程带来便利 程序员不必再去关心网络通信协议 通信过程中安全 事务等 但e j b 规范中并没有涉及分布动态载入 即时调用等条例 这使得对e j b 程序 的调试 维护带来诸多不便 本文主要分析了o p e n e j b 容器的实现技术 以及基于o p e n e j b 的e j b 动态 载入 即时调用的有关技术细节 在分析了e j b 技术以及开发方法的基础上 对o p e n e j b 容器进行改造 使其具备动态载入 即时调用等特性 论文中还讨 论了如何开发e j b 打包e j b 使用o p e n e j b 工具在线部署e j b 在讨论如何 开发e j b 的同时 论文中还涉及了系统架构 设计模式 数据库连接池技术 在文章的最后 作者阐述了在具有新特性的o p e n e j b 容器上将如何承载 北 京市重大危险源监控软件 的运行情况 关键字 e j b 分布式编程动态载入即时调用 ab s t r a c t b e c a u s eo ft h ed a t ae x c h a n g eo nt h ei n t e m e t t h ei n t e r n e th a sb r o u g h tu st o o m u c hc o n v e n i e m r m i r e m o t em e t h o di n v o c a t i o n d e v e l o p e db ys u nc a p s u l a t e t h e d a t ae x c h a n g e t h e nc o r b aa p p e a r e d n o wt h es u ng i v eu st h ee j b e n t e r p r i s ej a v a b e a n e j bl e a dt h ed i s t r i b u t e dp r o g r a m m i n gt o t h es p r i n gs e a s o n p r o g r a n u n e r s d o n tn e e dc a r ea l b o u tn e t c o m m u n i c a t i o np r o t o c o l s e c u r i t ya n d t r a n s a c t i o n h o w e v e r t h e r ei sn os p e c i f i c a t i o na b o u td i s t r i b u t e dd y n a m i cl o a d e da n dr e a l t i m ei n v o c a t i o ni n e m t h i sa r t i c l em a i n l ya n a l y z e d t h e i m p l e m e m o fo p e n e j bc o n t a i n e r t h e t e c i u l o l o g yd e t a i l so fe j bd y n a m i cl o a d e da n dr e a l t i m ei n v o c a t i o nb a s e do no p e n e j b f i r s t l y a r t i c l ed i s c u s s e dt h et e c h n o l o g ya n dd e v e l o p i n g m e t h o do fe j b s e c o n d l y a r t i c l ea n a l y z e dt h ei m p l e m e n ta n dc h a r a c t e r i s t i co fo p e ne j b t h i r d l y a r t i c l ed e a l tw i t hh o wt ob u i l da n dp a c ke j b h o wt o u s eo p e ne j bd y n a m i c e m p l o y i n g e j b f o u r t h l y e x p l a i n e ds y s t e m a r c h i t e c t u r e d e s i g np a t t e m a n d t e c h n o l o g yo f d a t a b a s ed a t ap 0 0 1 a tl a s t am i ss y s t e mo f b e i j i n gd a n g e rs o u r c em o n i t o rs y s t e m w a sd e v e l o p e d o nt h ee j bc o n t a i n e rw i t hn e w c h a r a c t e r i s t i c k e yw o r d s e j b t h e d i s t r i b u t e dp r o g r a m m i n g d y n a m i cl o a d i n g r e a l t i m e i n n v o c a t i o n i i 南开大学学位论文使用授权书 根据 南开大学关于研究生学位论文收藏和利用管理办法 我校的博士 硕士学位获 得者均须向南开大学提交本人的学位论文纸质本及相应电子版 本人完全了解南开大学有关研究生学位论文收藏和利用的管理规定 南开大学拥有在 著作权法 规定范围内的学位论文使用权 即 1 学位获得者必须按规定提交学位论文 包 括纸质印刷本及电子版 学校可以采用影印 缩印或其他复制手段保存研究生学位论文 并编入鬈南开大学博硕士学位论文全文数据库 2 为教学和科研目的 学校可以将公开 的学位论文作为资料在图书馆等场所提供校内师生阅读 在校园网上提供论文目录检索 文 摘以及论文全文浏览 下载等免费信息服务 3 根据教育部有关规定 南开大学向教育部 指定单位提交公开的学位论文 4 学位论文作者授权学校向中国科技信息研究所和中国学 术期刊 光盘 电子出版社提交规定范围的学位论文及其电子版并收入相应学位论文数据库 通过其相关网站对外进行信息服务 同时本人保留在其他媒体发表论文的权利 非公开学位论文 保密期限内不向外提交和提供服务 解密后提交和服务同公开论文 论文电子版提交至校图书馆网站 h t t p 2 0 2 1 1 3 2 0 1 6 1 8 0 0 1 i n d e x h u n 本人承诺 本人的学位论文是在南开大学学习期间创作完成的作品 并已通过论文答辩 提交的学位论文电子版与纸质本论文的内容一致 如因不同造成不良后果由本人自负 本人同意遵守上述规定 本授权书签署一式两份 由研究生院和图书馆留存 作者暨授权人签字 2 0 年月日 南开大学研究生学位论文作者信息 论文题目 姓名 学号答辩日期年 月e 论文类别博士口学历硕士口硕士专业学位口高校教师口同等学力硕士口 院 系 骶专业 联系电话e m a i l 通信地址 邮编 备注 是否批准为非公开论文 注 本授权书适用我校授予的所有博士 硕士的学位论文 由作者填写 一式两份 签字后交校图书 馆 非公开学位论文须附 南开大学研究生申请非公开学位论文审批表 南开大学学位论文原创性声明 本人郑重声明 所呈交的学位论文 是本人在导师指导下 进行 研究工作所取得的成果 除文中已经注明引用的内容外 本学位论文 的研究成果不包含任何他人创作的 已公开发表或者没有公开发表的 作品的内容 对本论文所涉及的研究工作做出贡献的其他个人和集 体 均已在文中以明确方式标明 本学位论文原创性声明的法律责任 由本人承担 学位论文作者签名 年月日 第一章引言 1 1 1s u nr m i 第一章引言 第一节分布式编程现状 r m i 1 1 远程方法调用 r e m o t em e t h o di n v o c a t i o n 是e n t e r p r i s ej a v a b e a n s 的 支柱 是建立分布式j a v a 应用程序的方便途径 r m i 易于使用 并且非常强大 r m i 的基础是接口 r m i 构架基于一个重要的原理 定义接口和定义接口 的具体实现是分开的 一个正常工作的r m i 系统由下面几个部分组成 远程服务的接口定义 远程服务接口的具体实现 s t u b 和s k e l e t o n 文件1 2 1 一个运行远程服务的服务器 一个r m i 命名服务 它允许客户端去发现这个远程服务 类文件的提供者 一个h t t p 或者f t p 服务器 一个需要这个远程服务的客户端程序 1 1 2 公共对象请求代理体系结构 c o r b a 3 1 是由o m g 组织制订的一种标准的面向对象应用程序体系规范 或 者说c o r b a 体系结构是对象管理组织 o m g 为解决分布式处理环境 d c e 中 硬件和软件系统的互连而提出的一种解决方案 c o r b a 标准由对象管理组织 o m g 设立并进行控制 c o r b a 定议了一 系列a p i 通信协议 组件朋艮务信息模型用于使得异质应用程序能够互相操作 这些应用程序用不同的程序语言编写 运行在不同的平台上 c o r b a 因此为定 义明确的组件提供了平台和位置的透明性 这些组件是分布式计算平台的基础 c o b r a 标准主要分为3 个层次 对象请求代理 公共对象服务和公共设施 最底层是对象请求代理o r b l 4 1 规定了分布对象的定义 接口 和语言映射 实 第一章引言 现对象间的通讯和互操作 是分布对象系统中的 软总线 在o r b 之上定义了 很多公共服务 可以提供诸如并发服务 名字服务 事务 交易 服务 安全 服务等各种各样的服务 最上层的公共设施则定义了组件框架 提供可直接为 业务对象使用的服务 规定业务对象有效协作所需的协定规则 1 1 3 企业j a v a b e a n e j b t 5 i 是j 2 e e 重量级的框架 其特点包括网络服务支持和核心开发工具 s d k e j b 有三种b e a n 分别是会话b e a n s e s s i o nb e a n 实体b e a n e n t i t y b e a n 和消息驱动b e a n m e s s a g e d r i v e nb e a n 1 s e s s i o nb e a n 用于实现业 务逻辑 它可以是有状态的 也可以是无状态的 每当客户端请求时 容器就 会选择一个s e s s i o nb e a n 来为客户端服务 2 e n t i t yb e a n 是域模型对象 用于 实现o r 映射 负责将数据库中的表记录映射为内存中的e n t i t y 对象 事实上 创建一个e n t i t yb e a n 对象相当于新建一条记录 删除一个e n t i t yb e a n 会同时从数 据库中删除对应记录 修改一个e n t i t yb e a n 时 容器会自动将e n t i t yb e a n 的状态 和数据库同步 3 m e s s a g e d r i v e nb e a n 是e j b 2 0 中引入的新的企业b e a n 它 基于j m s 消息 只能接收客户端发送的j m s 消息然后处理 m d b 实际上是一个异 步的无状态s e s s i o nb e a n 客户端调用m d b 后无需等待 立刻返回 m d b 将异步 处理客户请求 这适合于需要异步处理请求的场合 比如订单处理 这样就能 避免客户端长时间的等待一个方法调用直到返回结果 第二节基于r m i 方式的分布式编程举例 下面我们将逐步建立一个简单的r m i 系统 一个完整的系统需要以下几个 步骤 编写并且编译接口的j a v a 代码 编写并且编译接口实现的j a v a 代码 从接口实现类中生成s t u b 和s k e l e t o n 类文件 编写远程服务的主运行程序 编写r m i 的客户端程序 安装并且运行r m 系统 2 第 章引言 1 第一步就是建立和编译服务接口的j a v a 代码 这个接口定义了所有 的提供远程服务的功能 下面是源程序 i m p o r tj a v a r m i r e m o t e p u b l i ci n t e r f a c ec a l c u l a t o re x t e n d sr e m o t e p u b l i cl o n ga d d 1 0 n ga l o n gb t h r o w sj a v a r m i r e m o t e e x c e p t i o n p u b l i cl o n gs u b 1 0 n g 如l o n gb t h r o w sj a v a r m i r e m o t e e x c e p t i o n p u b l i cl o n gm u l 1 0 n ga l o n gb t h r o w sj a v a r m i r e m o t e e x c e p t i o n p u b l i cl o n gd i v 1 0 n ga l o n gb t h r o w sj a v a r m i r e m o t e e x c e p t i o n 这个接1 2 1 继承自r e m o t e 每一个定义的方法都必须抛出一个 r e m o t e e x c e p t i o n 异常对象 2 编写远程服务的具体实现 这是一个c a l c u l a t o r l m p l 类文件 1 i m p o r tj a v a r m i s e r v e r u n i c a s t r e m o t e o b j e c t 2 p u b l i cc l a s sc a l c u l a t o r l m p l e x t e n d su n i c a s t r e m o t e o b j e c ti m p l e m e n t s c a l c u l a t o r 3 4 p u b l i cc a l c u l a t o r l m p l 5 t h r o w sj a v a r m i r e m o t e e x c e p t i o n 6 s u p e r o 7 8 p u b l i cl o n ga d d 1 0 n g 如l o n gb 9 t h r o w sj a v a r m i r e m o t e e x c e p t i o n 1 0 r e t u r n a b 1 1 3 0 1 2 l 2 3 4 5 6 7 8 9 l 1 l 第一章引言 12 p u b l i cl o n gs u b 1 0 n g 如l o n gb 1 3 t h r o w s j a v a r m i r e m o t e e x c e p t i o n 1 4 r e t u r na b 1 5 16 p u b l i cl o n gm u l 1 0 n ga l o n gb 17 t h r o w sj a v a r m i r e m o t e e x c e p t i o n 1 8 r e t u r na 木b 1 9 2 0 p u b l i cl o n gd i v 1 0 n ga l o n gb 21 t h r o w s j a v a r m i r e m o t e e x c e p t i o n 2 2 r e t u l t l a b 2 3 2 4 这个实现类使用了u n i c a s t r e m o t e o b j e c t 去联接r m i 系统 在这个例子中 我们是直接的从u n i c a s t r e m o t e o b j e c t 这个类上继承的 事实上并不一定要这样 做 如果一个类不是从u n i c a s t r m e o t e o b j e c t 上继承 那必须使用它的e x p o r t o b j e c t 方法去连接到r m i 如果一个类继承自u n i c a s t r e m o t e o b j e c t 那么它必须提供一个构造函数并 且声明抛出一个r e m o t e e x c e p t i o n 对象 当这个构造函数调用了s u p e r 它久激 活u n i c a s t r e m o t e o b j e c t 中的代码完成r m i 的连接和远程对象的初始化 3 下一步就是要使用r m i 编译器r m i c 来生成桩和框架文件 这个编译 运行在远程服务实现类文件上 r m i cc a l c u l a t o r l m p l 4 远程r m i 服务必须是在一个服务器中运行的 c a l c u l a t o r s e r v e r 类是 一个非常简单的服务器 1 i m p o r tj a v a r m i n a m i n g 2 p u b l i c c l a s sc a l c u l a t o r s e r v e r 3 p u b l i cc a l c u l a t o r s e r v e r 4 t r y 5 c a l c u l a t o rc n e w c a l c u l a t o r l m p l 6 n a m i n g r e b i n d r m i l o c a l h o s t 10 9 9 c a l c u l a t o r s e r v i c e c 4 第一章引言 c a t c h e x c e p t i o ne s y s t e m o u t p r i n t l n e p u b l i cs t a t i cv o i dm a i n s t r i n ga r g s n e wc a l c u l a t o r s e r v e r 客户端源代码如下 i m p o r tj a v a r m i n a m i n g i m p o r tj a v a r m i r e m o t e e x c e p t i o n i m p o r tj a v a n e t m a l f o r m e d u r l e x c e p t i o n i m p o r tj a v a r m i n o t b o u n d e x c e p t i o n p u b l i cc l a s sc a l c u l a t o r c l i e n t p u b l i cs t a t i cv o i dm a i n s t r i n g a r g s t r y c a l c u l a t o rc c a l c u l a t o r n a m i n g 1 0 0 k u p r m i l o c a l h o s t c a l c u l a t o r s e r v i c e s y s t e m o u t p r i n t l n c s u b 4 3 c a t c h m a l f o r m e d u r l e x c e p t i o nm u r l e c a t c h r e m o t e e x c e p t i o nr e c a t c h n o t b o u n d e x c e p t i o nn b e 运行r m i 系统 5 5 o l 2 3 4 z 殳m n 他b h 0 l z王乱生 z戬殳m n 屹b m 埒m 博拽加 第一章引言 首先运行注册程序r m i r e g i s t r y 你必须在包含你刚写的类的那么目录下运 行这个注册程序 r m i r e g i s t r y 在第二个控制台里 我们运行服务器c a l c u l a t o r s e r v i c e 因为r m i 的安全机 制将在服务端发生作用 所以你必须增加一条安全策略 以下是对应安全策略 的例子 g r a n t p e r m i s s i o nj a v a s e c u r i t y a l l p e r m i s s i o n 现在为了运行服务端 需要除客户类 c a l c u l a t o r c l i e n t c l a s s 之外的所有的 类文件 确认安全策略在p o l i c y t x t 文件之后 使用如下命令来运行服务器 j a v a o j a v a s e c u r i t y p o l i c y p o l i c y t x tc a l c u l a t o r s e r v e r 为了在其他的机器运行客户端程序你需要一个远程接口 c a l c u l a t o r c l a s s 和一个s t u b c a l c u l a t o r i m p s t u b c l a s s 使用如下命令运行客户端 j a v a d j a v a s e c u r i t y p o l i c y p o l i c y t x tc a l c u l a t o r c l i e n t 从上述r m i 编程的例子中能够得出分布式编程的基本结构 分布式系统以 s t u b 和s k e l e t o n 程序为基本框架 而分布式编程设计方法则以接口为中心 所 以设计良好的接口定义是成功实现分布式编程的关键 第三节c o r b a 与r m i 的比较 从编码的角度看 很明显r m i 更易于使用 因为j a v a 开发者不需要熟悉接口 定义语言 i d l 1 6 1 但是总的说来 c o r b a 在以下方面与r m i 有所不同 c o r b a 接口用i d l 定义 r m i 接口用j a v a 定义 r m i i i o p 允许你用j a v a 定义所有接口 请参见r m i i i o p c o r b a 支持i i l 和o u t 参数 而r m i 不支持 因为本地对象是通过复制传 送的 远程对象是通过引用传送的 c o r b a 被特意设计成与语言不相关 这意味着可以用j a v a 编写一些对象 用c 编写其他对象 而它们仍然可以协同工作 所以 作为不同编程语 言间的桥梁 c o r b a 是一种理想机制 与此不同 r m i 为一种单独的语 言设计 所有对象都可用j a v a 编写 但是用r m i i i o p 有可能达到协同工 6 第一章引言 作的能力 c o r b a 对象彳 能进行碎片收集 c o r b a 与语言无关 某些语言 比如 c 不支持碎片收集 可以认为这是项缺点 因为c o r b a 对象一旦创 建 就一直存在 直至被除去为止 而决定何时除去一个对象的工作量很 大 与此相反 r m i 对象会自动收集碎片 第四节本文研究的意义及目的 企业级应用程序的开发技术层出不穷 但提供更加灵活的编程环境 减少 程序员的工作量 保证程序的质量需要更多的探究 在前面已经简单介绍了目 前流行的分布式编程技术 以及每种技术自身的优缺点 对于目前更为流行的 e j b 分布式编程技术 也同样存在自身的优缺点 所以本文以目前比较流行的开 源e j b 容器o p e n e j b 为背景 在对其分析实现的基础上对其进行多项功能上的 改进 这些功能主要体现在 对企业级应用程序的动态载入 即时调用 远程 管理等方面 接着讲述了编写怎么样的e j b 程序可以运行在这种具有新特性的 平台之上 最后以 北京市重大危险源监控 系统为具体环境 描述具有新特 性的o p e n e j b 容器可以如何为 北京市重大危险源监控 系统提供服务 第五节本文的主要内容 本文的主要内容如下 1 首先介绍了分布式编程现状 对比了c o r b a 与r m i 编程方式的不同 2 o p e n e j b 容器的实现 主要阐述了企业应用程序的部署 加载 以及如 何提供服务 3 o p e n e j b 新特性 是在o p e n e j b 容器基础之上提供动态载入 即时调用 节点管理 用户管理等实现细节 4 怎样编写e j b 程序 5 具有新特性的o p e n e j b 容器向 北京市重大危险源监控 系统提供服务 7 第二章现有o p e n e j b 容器实现技术分析 第二章现有o p e n e j b 容器实现技术分析 第一节o p e n e j b 容器的系统结构 2 1 1o p e n e j b 系统结构示意图 囝图圈 图2 1 系统结构 如图2 1 所示 系统提供了多种服务 包括h t t p e j b d 服务 t e l n e t 服务 e j b d 服务 h s q l 服务 a d m i nt h r e a d 服务 并且这些服务是动态加载的 2 1 2 应用服务动态加载 1 类结构 所有服务类都实现了s e r v e r s e r v i c e 接口 其中s e r v e r s e r v i c e 的定义如下 p u b l i ci m e r f a c es e r v e r s e r v i c ee x t e n d ss e r v i c e p u b l i cv o i ds t a r t t h r o w ss e r v i c e e x c e p t i o n p u b l i cv o i ds t o p t h r o w ss e r v i c e e x c e p t i o n 8 第二章现有o p e n e j b 容器实现技术分析 p u b l i cv o i ds e r v i c e i n p u t s t r e a mi n o u t p u t s t r e a mo u t p u b l i cv o i ds e r v i c e s o c k e ts o c k e o p u b l i cs t r i n gg e t n a m e 0 p u b l i cs t r i n gg e t l p o p u b l i ci n tg e t p o r t 0 以t e l n e t 服务类为例 p u b l i cc l a s st e l n e t s e r v e ri m p l e m e n t ss e r v e r s e r v i c e 在t e l n e t s e r v e r 中实现了启动 停止 服务等接口 2 动态加载方法 j v m 可以使用不同的类装载器 c l a s s l o a d e r 7 1 装载器的不同 系统启动环 境设置也不同 界面开发部分 使用了r c p 富客户端 技术 这种技术依赖的 开发工具s w td e s i g n e r 就使用独有的l o a d e r 因此 系统提供两种动态加载方法 第一 默认l o a d e r 方法 在系统启动时 将系统依赖的j a r 包添加到装载路径上 s y s t e m l n s t a n c es y s t e m 2 s y s t e m l n s t a n c e g e t f i l el i b s s y s t e m g e t h o m e o g e t d i r e c t o r y l i b s y s t e m g e t c l a s s p a t h a d d j a r s t o p a t h 1 i b s 然后使用c l a s s l o a d e r g e t r e s o u r c e s m e t a i n f s e r v e r s e r v i c e 获取实现 s e r v e r s e r v i c e 所有的u r l 资源 并以e n u m e r a t i o n 的形式返回 第二 s w td e s i g n e r 独有l o a d e r 方法 这种独有的l o a d e r 方式改变了资源管理方法 因此使用上述方式将不能获 取到正确的资源 所有需要手动编写系统的g e t r e s o u r c e s 方法 首先获取所有服务的名称 比如 o r g a p a c h e o p e n e j b s e r v e r t e l n e t t e l n e t s e r v e r 然后根据这个名称使用 c l s c l a s s f o r n a m e 0 将其装载 最后使用 p r o t e c t i o n d o m a i np d c l s g e t p r o t e c t i o n d o m a i n 0 c o d e s o u r c ec s p d g e t c o d e s o u r c e 0 9 第二章现有0 p e n e j b 容器实现技术分析 r e s u l t c s g e t l o c a t i o n 0 便可以获取到 o r g a p a c h e o p e n e j b s e r v e r t e l n e t t e l n e t s e r v e r 对应的u r l 2 1 3 系统工程结构 在2 1 2 应用服务动态加载中讲述了动态的加载方法 这两种方法都是依赖 于i a r 包 每一个j a r 包可以对应一个开发工程 p r o j e c t o p e n e j b 容器以 o p e n e j b c o r e 为中心 以o p e n e j b h t t p o p e n e j b e j b d o p e n e j b c x f o p e n e j b h t t p o p e n e j b h s q l o p e n e j b m u l t i c a s t 为服务 以o p e n e j b c l i e n t 为客户端的形式开发 而工程o p e n e j b 使用了上述j a r 包 为用户提供界面操作 工程s e r v e r e j b 为系统e j b 组件包 这两个工程为o p e n e j b 容器提供了新特性 第二节e j b 容器实现细节描述 由于篇幅限制 本文只介绍o p e n e j b e j b d 提供的容器服务 因为e j bd e a m o n 需要建立在已经加载的e j b 基础上 所以这部分将主要讲述e j b 的加载过程 以及在此基础上c o n t a i n e r 如何向客户端提供服务 2 2 1e j bj a r 包格式 系统能够识别以i a r e a r 和w a r 为后缀的文件 在文件结构上 三者并没有 什么不同 它们都采用z i p 或j a r 档案文件压缩格式 但是它们的使用目的有所 区别 j a r 文件 扩展名为 j a r 包含j a v a 类的普通库 资源 r e s o u r c e s 辅助文 件 a u x i l i a r yf i l e s 等 w a r 文件 扩展名为 w a r 包含全部w e b 应用程序 在这种情形下 一个 w e b 应用程序被定义为单独的一组文件 类和资源 用户可以对j a r 文件进行封 装 并把它作为小型服务程序 s e r v l e t 来访问 本文并不更多涉及 e a r 文件 扩展名为 e a r 包含全部企业应用程序 在这种情形下 一个企 业应用程序被定义为多个i a r 文件 资源 类和w e b 应用程序的集合 对于i a r 文件的详细介绍 请参看后文 e j b 应用开发 部分 1 0 第二章现有o p e n e j b 容器实现技术分析 2 2 2e j b 文件加载 1 e j b 加载工厂 系统启动时 根据系统配置获取加载配置类 具体实现如下 首先从系统启动的环境变量中获取配置工厂名称 c l a s s n a m e p r o p s g e t p r o p e r t y e n v p r o p s c o n f i g u r a t i o n f a c t o r y 如果启动的环境变量中没有找到相应配置 就使用默认值 i f c l a s s n a m e n u l l e l a s s n a m e2p r o p s g e t p r o p e r t y c o n f i g u r a t o r p r o p e r t y d e f a u l t c o n f i g u r a t o r 获取一个工厂对象 c o r t f i g f a c t o r y o p e n e j b c o n t i g u r a t i o n f a c t o r y t o o l k i t n e w l n s t a n c e c l a s s n a m e 当成功获取工厂对象后 便可以从这个对象中获取到相应的加载配置类对 象 这个加载配置类包括了系统容器信息 一个o p e n e j b c o n f i g u r a t i o n 对象包含一个c o n t a i n e r s y s t e m l n f o 对象和一个 f a c i l i t i e s l n f o 对象信息 关于这两个对象的详细信息请参看下文 2 使用j a x b 加载o p e n e j b 系统信息 一个x m l 模式 s c h e m a 用x m l 语法表达了一个x m l 文档的结构 j a v a x m l 绑定架构 j a x b 提供了一个绑定编译器x j c 来从一个x m l 模式中生 成j a v a 类 用j a x b 的x j c 生成的j a v a 类代表了在x m l 模式中不同的元素和 复杂类型 c o m p l e x t y p e 一个复杂类型通过指定属性和元素内的元素来提供 对一个元素的限定 一个符合x m l 模式的x m l 文档可以从这些j a v a 类中构 建出来 关于j a x b 并不是本文的重点 详细信息请参看参考内容 在o p e n e j b x m l 中定义了相关容器 信息如下 c m pc o n t a i n e r 容器持久化容器 这个容器能够为c m p1 1 和2 x 的实体 b e a n s 提供服务 s t a t e f u lc o n t a i n e r 有状态的回话b e a n 容器 这个容器能够为类型为 s t a t e f u l 的b e a n s 提供服务 第二章现有0 p e n e j b 容器实现技术分析 s t a t e l e s sc o n t a i n e r 无状态的回话b e a n 容器 这个容器能够为类型为 s t a t e l e s s 的b e a n s 提供服务 m d bc o n t a i n e r 消息b e a n 容器 这个容器能够为类型为m e s s a g e 的 b e a n s 提供服务 o p e n e j b x m l 系统中使用的h s q l 数据库的相关信息 例如 用户名 密码 等 3 初始化容器和设施 在 e j b 加载工厂 一节中 已经提到o p e n e j b c o n f i g u r a t i o n 对象的有关信 息 其中拥有 个容器对象和设施对象信息 所谓容器是指在 使用j a x b 加 载o p e n e j b 系统信息 一节中从o p e n e j b x m l 获取的容器信息 加载这些信息过 程如下 f o r c o n t a i n e rd e c l a r a t i o n o p e n e j b g e t c o n t a i n e r 0 根据配置信息获取一个容器对象 c o n t a i n e r i n f oi n f o c r e a t e c o n t a i n e r l n f o d e c l a r a t i o n 将这个容器添加到系统配置中 s y s c o m a i n e r s y s t e m c o n t a i n e r s a d d i n f o 创建容器信息工作具体有c r e a t e c o n t a i n e r l n f o 完成 欲完成此项工作 需要 一些前提 在系统中预先定义了各种容器类型映射 格式如下 c o n t a i n e r t y p e s p u t b e a n t y p e s b m p e n t i t y b m p e m i t y c o n t a i n e r l n f o c l a s s c o n t a i n e r t y p e s p u t b e a n t y p e s c m p e n t i t y c m p e m i t y c o n t a i n e r i n f o c l a s s 而后有一个静态映射容器存储这些类型的名称和值 对于不确定类 型的定义 使用如下格式 m a p s t r i n g c l a s s c o n t a i n e r t y p e s n e w h a s h m a p s t r i n g c l a s s 其中c l a s s 是指这是一个 类 类型 这个类型扩 展了c o n t a i n e r l n f o 类型 当获取类型后 根据不同类型获取到不同的系统默认服务类实例 然后构 造容器对象 这些对象包括以下信息 p u b l i cc l a s ss e r v i c e l n f oe x t e n d si n f o o b j e c t 1 2 第二章现有o p e n e j b 容器实现技术分析 服务名称 p u b l i cs t r i n gs e r v i c e 服务类型 p u b l i cl i s t t y p e s 2 n e wa r r a y l i s t 0 描述 p u b l i cs t r i n gd e s c r i p t i o n 服务标示符 p u b l i cs t r i n gi d 显示的名称 p u b l i cs t r i n gd i s p l a y n a m e 相关联类的名称 p u b l i cs t r i n gc l a s s n a m e 关联属性 p u b l i cp r o p e r t i e sp r o p e r t i e s 服务器的构造参数 p u b l i cf i n a ll i s t c o n s t r u c t o r a r g s n e wa r r a y l i s t 0 4 创建应用程序 根据配置文件构造完成容器和设施 其中一项为 d e p l o y m e n t sd i 产 a p p s 胁这个元素表明系统启动时部署应用程序文件位置 有两种形式 d i r 是以目 录方式 j a r 是以文件方式 创建应用程序语句如下 f o r a p p i n f oa p p l n f o c o n t a i n e r s y s t e m l n f o a p p l i c a t i o n s t r y c r e a t e a p p l i c a t i o n a p p l n f o c r e a t e a p p c l a s s l o a d e r a p p l n f o c a t c h d u p l i c a t e d e p l o y m e n t l d e x c e p t i o ne 首先 创建应用程序对应的c l a s s l o a d e r 有c r e a t e a p p c l a s s l o a d e r 完成 这 个方法是通过 l i s t c l a s s l o a d e r s c l a s s l o a d e r s b y a p p g e t a p p l d 1 3 第二二章现有o p e n e j b 容器实现技术分析 上述语句 其q b c l a s s l o a d e r s b y a p p 是在系统初始化时已经定义好的类加载 器的名称与值的映射器 当获取加载器之后 将应用程序对应的j a r 文件都加载 到相应的装载器中 对于某个应用程序 可能有很多不同的特性 所以在创建的过程中要有不 同的方法处理 容器持久化应用程序 通用c m p1 0 和2 0 都是有j p a j a v ap e r s i s t e n c e a p i 支持的 j p a 通过j d k5 0 注解或x m l 描述对象一关系表的映射关系 并将 运行期的实体对象持久化到数据库中 a j p a 包括以下3 方面的技术 o r m 映射元数据 j p a 支持x m l 和j d k5 0 注解两种元数据的形式 元数据 描述对象和表之间的映射关系 框架据此将实体对象持久化到数据库表中 j p a 的a p i 用来操作实体对象 执行c r u d 操作 框架在后台替我们完成 所有的事情 开发者从繁琐的j d b c 和s q l 代码中

温馨提示

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

评论

0/150

提交评论