January6208面向对象分析与设计课程报告 论坛的读写权限包括:读权限,创建一个新主题,创建一个新的帖子等 Jve中没有明确定义普通用户和管理员角色,而是直接通过以上权限组合和具 体用户直接建立联系,并将这种直接联系保存到数据库中。在权限不是很复杂 的情况下,这种没有引入角色的做法比较简单直接。但由于用户和权限直接挂 钩,而用户和权限都可能在不断地动态变化,那么它们之间由于联系太直接和 紧密,对各自变化形成了限制。所以,对于复杂的权限系统,引入了基于角色 的权限系统,这将在以后章节中进一步讨论。jve论坛业务对象主要分为 Forum、 Forum thread和 ForumMessage,它们之间的关系如下图所示 [ 基本对象关系图 每个论坛 Forum包含一系列 Forumthread(主题),而每个主题都是由很多 内容帖子 ForumMessage组成的,这是一个聚集关系。这3种对象中每一个对 象都涉及到对象数据的创建、编辑、査询和删除,这些对象数据分别保存在数 据库中。这3个对象对于不同的角色可操作访问权限是不一样的,只有系统管 理员和论坛管理员可以对 Forum相关数据实行操作,普通用户可以创建或编辑 Forum Thread Fl Forum Message Jive论坛为了实现不同用户对不同基本对象的不同操作权限,通过设定一个 统一的入口,在这个入口将检查客户端每次对数据的操作权限,如下图所示。 软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 11 软件学院 04 级 论坛的读写权限包括:读权限,创建一个新主题,创建一个新的帖子等。 Jive 中没有明确定义普通用户和管理员角色,而是直接通过以上权限组合和具 体用户直接建立联系,并将这种直接联系保存到数据库中。在权限不是很复杂 的情况下,这种没有引入角色的做法比较简单直接。但由于用户和权限直接挂 钩,而用户和权限都可能在不断地动态变化,那么它们之间由于联系太直接和 紧密,对各自变化形成了限制。所以,对于复杂的权限系统,引入了基于角色 的权限系统,这将在以后章节中进一步讨论。Jive 论坛业务对象主要分为 Forum、ForumThread 和 ForumMessage,它们之间的关系如下图所示。 基本对象关系图 每个论坛 Forum 包含一系列 ForumThread(主题),而每个主题都是由很多 内容帖子 ForumMessage 组成的,这是一个聚集关系。这 3 种对象中每一个对 象都涉及到对象数据的创建、编辑、查询和删除,这些对象数据分别保存在数 据库中。这 3 个对象对于不同的角色可操作访问权限是不一样的,只有系统管 理员和论坛管理员可以对 Forum 相关数据实行操作,普通用户可以创建或编辑 ForumThread 和 ForumMessage。 Jive 论坛为了实现不同用户对不同基本对象的不同操作权限,通过设定一个 统一的入口,在这个入口将检查客户端每次对数据的操作权限,如下图所示
January6208面向对象分析与设计课程报告 客尸漓 ForaaPaetery fervefacteryfroay 入口示意图 客户端每次对数据库的操作,都要经过 Forum Factory入口进入。在 Forum Factory中会动态生成一个访问控制代理 Forum Proxy,通过 ForumFactory Proxy检査客户端访问方法是否符合整体权限访问控制要求。 4.3.Jive中的缓存系统 431使用缓存的动机 在两个存取速度差距很大的对象之间,比如数据库和内存,通常要加 个缓存来匹配二者的速度。为了弥补数据库操作与内存读取之间的速度差 距,Jve也使用缓存来加快帖子的显示。 432Jive中的缓存结构 涉及Jive缓存机制的Java类大致可以分为以下四个部分: ·第一部分,提供基本等数据结构,以便实现缓存机制。 ·第二部分,提供以自己编写的哈希表文基础的数据结构以实现 缓存机制。第一部分中的哈希使用jdk中的哈希表,其key为 Object类型。而第二部分中的哈希表,其Key为Long型。 ·第三部分,调用底层数据结构以提供论坛对象的缓存。该部分 包括了管理缓存的结构。jve中的缓存分布在 Forum, Thread, Message各类中。由于jve缓存采取延迟写入数据库技术,一个 系统中不能存在多个缓存的副本,因此jve设计者在此使用了 singleton模式。 12软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 12 软件学院 04 级 入口示意图 客户端每次对数据库的操作,都要经过 ForumFactory 入口进入。在 ForumFactory 中会动态生成一个访问控制代理 ForumFactoryProxy,通过 ForumFactoryProxy 检查客户端访问方法是否符合整体权限访问控制要求。 4.3. Jive 中的缓存系统 4.3.1.使用缓存的动机 在两个存取速度差距很大的对象之间,比如数据库和内存,通常要加 一个缓存来匹配二者的速度。为了弥补数据库操作与内存读取之间的速度差 距,Jive 也使用缓存来加快帖子的显示。 4.3.2.Jive 中的缓存结构 涉及 Jive 缓存机制的 Java 类大致可以分为以下四个部分: • 第一部分,提供基本等数据结构,以便实现缓存机制。 • 第二部分,提供以自己编写的哈希表文基础的数据结构以实现 缓存机制。第一部分中的哈希使用 jdk 中的哈希表,其 key 为 Object 类型。而第二部分中的哈希表,其 Key 为 Long 型。 • 第三部分,调用底层数据结构以提供论坛对象的缓存。该部分 包括了管理缓存的结构。jive 中的缓存分布在 Forum, Thread, Message 各类中。由于 jive 缓存采取延迟写入数据库技术,一个 系统中不能存在多个缓存的副本,因此 jive 设计者在此使用了 singleton 模式
January6,2008面向对象分析与设计课程报告 第四部分,向jsp页面提供访问接口。该部分和第三部分联系紧 密 433Jive中的三层缓存结构 Jive中的缓存结果可以划分为三层,即第一和第二部分的底层数据结构, 第三部分的中间层和第四部分的上层访问接口 底层数据结构 Jive缓存机制的原理其实很简单,就是把所要缓存的对象加到 HashMap哈希映射表中,用两个双向链表分别维持着缓存对象和每个 缓存对象的生命周期。如果一个缓存对象被访问到,那么就把它放到 链表的最前面,然后不定时地把要缓存的对象加入链表中,把过期对 象删除,如此反复。 底层结构的类图 实际上比较第一和第二部分就可以发现,它们的代码几乎完全 相同。差别就在第二部分的哈希映射表没有采用JDK提供的类,而是 采用了作者自己编写的一个类,将原来哈希映射表的Key类型由 object改为Long。这样做虽然在一定程度上加快了缓存的速度,并减 小了缓存的大小,但无形之中也减低了程序的稳定性和可读性。 中间层 1软件学院04级
January 6, 2008 [面向对象分析与设计课程报告] 13 软件学院 04 级 • 第四部分,向 jsp 页面提供访问接口。该部分和第三部分联系紧 密。 4.3.3.Jive 中的三层缓存结构 Jive 中的缓存结果可以划分为三层,即第一和第二部分的底层数据结构, 第三部分的中间层和第四部分的上层访问接口。 • 底层数据结构 Jive 缓存机制的原理其实很简单,就是把所要缓存的对象加到 HashMap 哈希映射表中,用两个双向链表分别维持着缓存对象和每个 缓存对象的生命周期。如果一个缓存对象被访问到,那么就把它放到 链表的最前面,然后不定时地把要缓存的对象加入链表中,把过期对 象删除,如此反复。 底层结构的类图 实际上比较第一和第二部分就可以发现,它们的代码几乎完全 相同。差别就在第二部分的哈希映射表没有采用 JDK 提供的类,而是 采用了作者自己编写的一个类,将原来哈希映射表的 Key 类型由 Object 改为 Long。这样做虽然在一定程度上加快了缓存的速度,并减 小了缓存的大小,但无形之中也减低了程序的稳定性和可读性。 • 中间层