动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.优化Java动画编程中的显示效果.
.Spring Framework中的面向方.
.使用Properties类带来的好处.
.EJB应用技术的体系结构详解(1).
.Java 2源码解读:java.util.Arra.
.基于MIDP1.0实现组合按键.
.JNDI目录服务及LDAO服务器使用入.
.Java事件模型详解.
.Java设计模式之迭代器模式.
.JavaBean 与 Ejb 的区别.
.也来谈Java集合框架.
.JAVA与数据库连接方法(三).
.一个正则表达式网站.
.如何计算java对象占用的内存.
.专家和您一起谈谈java加壳的问题.
.使用WEBLOGIC PORTAL规则引.
.技术分享 在Spring中实现事务挂起.
.优化 Java 垃圾收集器改进系统性.
.EJB的专用术语解释.
.Java的秘密:将应用程序的设定存.

Jive笔记--Database Package下面的暗黑世界

发表日期:2008-1-5 |



  Jive再牛B,归根到底还是要和Database打交道的。
  还不一样要调用getConnection(),CreateStatement(),ResultSet.next()。
  那么,我的疑问是,Jive是怎样处理低层操作类(DBForumMessage/DBForumThread/DBForum)之间的耦合关系的呢?
  由于存在了Cache,所以,DBForumFactory/DBCacheManager/DBForumXXX这些类之间的关系可谓是错综复杂。
  
  (1)真正实作中,我们怎样来完成加载一个ForumMessageObject? 还有thread的增加删除Message是怎样完成的?
  打开DBForumMessage.Java,发现,除了完成ForumMessage Interface的方法以外,还有几个Private的方法和Protected的方法。
  分别是:
  private void loadFromDb();
  private void saveToDb();
  protected void insertIntoDb();等
  
  上面三个函数分别用来完成对jiveMessage表的SELECT/UPDATE/INSERT操作。
  所以初步可以判定,对jiveMessage表的操作,基本上封装在了DbForumMessage里边了。但不是全部,为什么?慢慢往下看。
  
  a.加载DbForumMessage
  非常简单,地球人都知道的代码。在一个构造函数中调用loadFromDb(),然后执行SELECT xxx,xxx,..WHERE id=...,假如rs为空则抛出
  MessageNotFoundException,否则,一个一个的把字段内容复制给DBForumMessage的成员变量。
  (顺便这里提一下,这些映射数据库字段的成员变量有些是Private的,有些是Protected,为什么呢?呵呵。)
  对于这样的加载方法,假如没有Cache,将会非常慢的。试想,每次显示一个Message都要一次Select,我浏览Thread页面的时候,一次显示n个Thread/Message,....
  还不要数据库的小命啊。
  
  在我克隆Jive的过程中,由于Cache机制将在以后实现,所以采取了一个折衷的办法。改写了DBMessageIterator()类,改原来的只取ID
  为 取回除了Body以外的所有的内容,并且 直接就地New DBForumMessage,然后复制到ArrayList。
  至于Body,则采用LazyLoad的方法,等用到了才去SELECT body FROM ...
  这样处理,由于有ResultFilter的限制,最多复制几十个没有Body的DBForumMessag 对象,这对于AppServer来说,我想影响不大吧?
  
  b.增加DBForumMessage
  也就是调用INSERT INTO jiveMessage啦。不过,注重到,在插入新的ForumMessage纪录的时候,ThreadID是必须的,
  所以看起来只能让DBForumThread来调用这个方法了。难怪!!用了protected insertIntoDb(DbForumThread)!! 原来,同在一个包下的class是
  可以互相访问protected的方法的。偶java基本功不行,呵呵,到了今天才发现的这种现象。
  
  c.删除DBForumMessage
  这个比较有趣,DBForumMessage没有任何执行DELETE FROM jiveMessage的代码,看起来一定是在外边DBThread实现了。
  究竟,这个是thread的事情嘛。果不出所料,DbForumThread::deleteMessage()里边直接执行了DELETE SQL.
  我自己在Clone Jive的时候,还是作了小改动,给DbForumMessage添加了protected deleteFromDb()方法,把执行SQL的操作放给Message完成了。
  
  在对Message进行Add/Delete操作过程中,可不能忘记了Cache List的更新,所以必须记得在DbForumMessage中调用cacheManager的一些方法
  来更新Cache,虽然目前在我的系统中,这些函数是空的 :)。
  
  明白了Thread/Message之间的"父子关系",Forum/Thread Category/Forum之间的关系也就差不多啦。哦,Jive中的Category似乎有点非凡,
  等偶下次看了代码再另外具体汇报。
  
  (2)DBForumFactory是个什么东西?
  Jive2.1.1以后,DbForumFactory不给Source了,而且,JAD还很难反编译,因为我发现JAD无法反编译诸如synchronized(Object){}这样的代码。
  还好我们有Jive 2.1.1的代码。哈哈。看看再说。
  先把DBForumFactory的身份给揭穿。其实DbForumFactory是个总管。总管Forum/Thread/Message。
  所以,我们在调用API的时候,都是通过Factory.getForum()/getThread()/getMessage()来获得那些对象。
  Jive用了SingleTon保证DbForumFactory()唯一,即静态方法DbForumFactory.getInstance()。
  同时,DBForumFactory在构造函数中New了一个DatabaseCacheManager。因此Factory和CacheManager就这样勾结起来了。
  所有调用getForum(),getThread(),getMessage(),都是调用DatabaseCacheManager的相关方法来实现的。
  例:
  
  DBForumFactory::getThread() ==> DatabaseCacheManager.getThread() ==> Search Cache or new DbThread object
  
  结论,DbForumFactory不是东西。除了检测Licese是否合法,其它基本上就是一个二道贩子。
  
  (3)其实还有那些Thread/Message的DbIterator,在Jive笔记4中已经提到了。不必再罗嗦一遍。
  
  写了这么多,感觉还有好多东西没有讲。我希望大家能够仔细体味里边的protected 属性/方法,我认为,这些东西其实和友元差不多,
  它们部分的打破了封装,但是获得了很大的灵活性。
  退后一步想想,我们只要把那些东西一股脑儿的限制在database package里边,对于整体上的封装,还是没有什么影响的。
  
  呵呵,一家之言,请大家不吝指教
上一篇:JCA: Java步入应用集成时代 人气:570
下一篇:谈谈JAVA的反编译 人气:785
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-6 Movie34电影搜索引擎 v3.0
2008-9-6 wap2.0仿帝国建站喜用 v2.0
2008-9-6 免费人才招聘网 宽屏版 v3.01
2008-9-6 喜喔喔视频采集程序 v1.0 beta
2008-9-6 ASP客户管理系统
2008-9-6 主流驿站中秋祝福程序
2008-9-6 php实现msn协议的类
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号