openfans整体设计介绍

         先说一下openfans最早版本的整体设计。首先是用Equinox直接new出项目来,它默认是springmvc+spring+hibernate再加­上一些常用的组件,如sitemesh,common-validator,dwr等。而这些都是我们想要的。 
         有了这个大的框架,我们可以进行业务建模了,我们采用的是领域模型驱动的设计方案。首先考虑的是对象以及对象间的关联,我们也没用什么建模工具和自动生成工具,­先自己写java类,写好属性,用eclipse生成get和set。然后手写hibernate的hbm配置文件,有点土,这也是我第一正式的使用hiber­nate。开始我用了dao模式,写了好多dao,后来和oofrank讨论,一直认为hibernate就是我们的持久层,完全没有必要为了移植性(如将来使­用ibatis)而引入dao。所以抛弃了dao模式,而由一个façade处理持久。这样的设计跟一般的三层模型略有不同,hibernate就是我们的持久­层,然后通过一个façade提供对上层的接口。领域模型和mvc中的c充当我们的业务层。我们的对象不是贫血模型,而是有能力的。当然现在这种能力更多是对象­间的关联,而对持久层无能为力,但也已经方便了很多。Controller现在具有较多的功能,它能调领域对象,也能直接使用façade。然后是jsp+js­tl+el做纯粹的展现层。C和V的分类原则是这样的:一类是查看,一类是form提交。所有查看由一个viewController统一处理(这样增加了一些­耦合,但效果还可以),一个对象的增、删、改由一个formController处理。 
           有了这些设计原则,做起来倒是很快,几天就核心功能出来了。对于数据库,只要建一个库就行,其余的如建表,改表等都由hibernate来自动帮你完成,数据库­就是在写hbm时关心下,其它完全对我们透明,感觉还是挺爽的。 最初版一共就20几个类,完成了很多的功能,可以具体看 www.openfans.org
           下一篇写怎么使用maven和tomcat,让openfans在自己机器上跑起来。先去吃饭了,^_^。大家有任何疑问和好的改进意见,都可以提,跟帖。

posted @ 2006-03-28 11:51 pesome 阅读(1696) | 评论 (3)编辑 收藏

给我的openfans再做下广告

本网站旨在推动opensource软件在中国的传播和使用。应用web2.0的思想,提倡大家都来参与和有收获有贡献的风气。注册后就可以直接登录(将来需发email进行验证),登录近来就可以进行所有的操作了。
     操作很简单,先可以点击上面的修改用户链接,补充自己的信息(现在只要填入blog地址、简单描述和所在地),这样能够让其它用户更好的了解你,还可以加一个你喜欢的图像上传(现在大小限制在10k以内)。
      点击推荐软件链接,可以推荐你喜欢的开源软件。填入名称,主页,加上你的介绍或官方的介绍,然后给它个图标,就可以了。图标可以在它的主页上找到,然后将其url拷贝下来,就可以了。
     在浏览软件时,你可以随时增加认为与其相关的标签(我们把软件认为是一种特殊的标签)。标签标题是不带空格的,我们可以填入用空格分割的多个标签,系统会依次增加这些标签关联。如hibernate,你认为它是持久层,也可以认为是O/Rmapping,已经关联的标签也可以再加,我们会增加其关联度。一个标签下的相关标签会按关联度从高到低排列。
     更重要的是你说明自己对这个软件的使用情况,如熟练掌握、正在使用还是准备使用。简单的点击,会给软件和你增加有用的信息。我们会看到一个软件有多少人熟练掌握,有多少人正在使用,在进行同类软件横向比较时非常有用。而如果你在准备使用一个软件时,就可以看看有谁熟练掌握了这个软件,可以看他(她)的blog,或直接跟他(她)联系,更快的掌握这个软件。
     如果你有好的心得体会或看到网上有好得相关文章,也可以在浏览标签的页面,点击发表文章链接,跟大家进行分享。别人也许就因为你的一篇文章快速入门了呢,呵呵!
     将来还会有更多更好更酷的功能出来,我们永远会从用户角度出发,力求做到最好的用户体验。欢迎进入openfans的世界!

posted @ 2006-03-25 23:04 pesome 阅读(1211) | 评论 (0)编辑 收藏

启动openfans网站和项目

注册网站www.openfans.org以www.openfans.net
(现在www.openfans.net开通了),提供对开源软件的介绍和评论。应用web
2.0思想,体现社区自管理的原则,提倡对开源软件学习和交互。期望成为中国开源软件介绍和交流的主流平台之一,为开源软件在中国的传播和使用贡献自己的力量。

roadmap(暂定):
0.1(4月底完成)--注册,登陆,权限管理,标签功能,发表软件介绍和文章
0.5(5月底完成)--评分体系,同城,小组和朋友管理
0.8(7月底完成)--sns功能,投票功能
1.0(9月底完成)--开始形成专家小组,提供项目外包和咨询管理平台
更多--随着平台的使用和更多的成员加入,不断加入新的功能

同时启动开源项目openfans,使用开源软件:eclipse,
maven2, spring(包括spring mvc), hibernate,
mysql,common-validator,sitemesh.....
目的是提供web2.0应用的基本模型,同步在www.openfans.net上进行验证和使用,并能够方便的移植到其它领域。
目前项目在sourceforge上,由pesome和oofrank共同管理。0.1版基本完成。
cvs -d:pserver:anonym...@cvs.sourceforge.net:/cvsroot/openfans login

希望参与开发的同学请mailto:pes...@gmail.com,简单介绍自己并注明在sf上的用户名。
在google上开了一个站务论坛:http://groups.google.com/group/openfans

欢迎大家多来访问,推荐软件和文章,方便大家更快更好的找到自己最需要的东西!

posted @ 2006-03-19 10:46 pesome 阅读(1620) | 评论 (6)编辑 收藏

oscache使用和研究

Oscache的使用非常方便,特别是jsp cache用的非常广泛。Oscache的文档中也对jsp cache tag的配置有详细说明,但对如普通pojo对象的cache讲的较少,也许是比较简单的缘故。今天做了个测试方案,写测试案例进行了比较和研究。

测试方案1在本机上直接测试,循环从metabase库中的process_info表取得数据(表中只有2条记录)比较使用cache和不使用cache的性能(为平均值)。

代码如下:

 1public class DatabaseCacheTest extends TestCase {
 2    GeneralCacheAdministrator admin = null;
 3
 4    protected ApplicationContext ctx;
 5
 6    protected ProcessInfoDAO processInfoDAO;
 7
 8    protected void setUp() throws Exception {
 9        String[] paths = "/spring/dataAccessContext.xml",
10                "/spring/spring-biz-db.xml" }
;
11        ctx = new ClassPathXmlApplicationContext(paths);
12
13        processInfoDAO = (ProcessInfoDAO) ctx.getBean("processInfoDAO");
14        admin = new GeneralCacheAdministrator();
15    }

16
17    protected void tearDown() throws Exception {
18        admin.destroy();
19    }

20
21    public void testGetFromCache() {
22        long t1 = System.currentTimeMillis();
23
24        for (int i = 0; i < 10000; i++{
25            ProcessInfoDO pdo = getProcess("65");
26            assertEquals(pdo.getProcessName(), "TestProcess");
27        }

28        System.out.println(System.currentTimeMillis() - t1);
29
30    }

31
32    private ProcessInfoDO getProcessByCache(String id) {
33        ProcessInfoDO pdo;
34        try {
35            pdo = (ProcessInfoDO) admin.getFromCache("65");
36            return pdo;
37        }
 catch (NeedsRefreshException e) {
38            pdo = processInfoDAO.selectById(65);
39            admin.putInCache("65", pdo);
40            return pdo;
41        }

42    }

43
44    private ProcessInfoDO getProcess(String id) {
45        return processInfoDAO.selectById(65);
46    }

47}

48


Ø         循环100次,使用cache用时578ms,直接从数据库取用时2015ms

Ø         循环1000次,使用cache用时719ms,直接从数据库取用时13984ms

Ø         循环10000次,使用cache用时2016ms,直接从数据库取用时131188ms

使用图例比较,系列1表示循环的次数,系列2为使用cache的用时,系列3为不使用cache的用时。可以看出,随着循环次数的增多,使用cache方案的性能优势更加明显。

结论:使用cache,随着循环的增多,用时增长较缓慢,而不使用cache基本是等比例增长。在循环次数较多时,使用cache cpu利用率显著提高,能达到90%以上。不使用cache则只能上到50%左右,更多是在等待数据库返回结果。所以使用cache能大大减轻数据库的压力,提高应用服务器的利用率,符合我们对应用服务器进行水平扩展的要求。

 

 

posted @ 2006-02-16 13:39 pesome 阅读(4088) | 评论 (1)编辑 收藏

log,exception最佳实践

项目组对log和exception的讨论结果。希望更多的人参与讨论。
1
log

1.1 log.error表示系统级错误

1.2 log.warn表示应用级错误

1.3 服务初始化或结束用log.info

1.4 log.debug替代outdebug要判断isDebugEnable

1.5 log.warn("",e)替代e.printstack

1.6 log4e生成log相关代码

1.7 L