??xml version="1.0" encoding="utf-8" standalone="yes"?>
p搞定Q这样只需要用参数如 saveSnippet.html?decorator=simple&confirm=true Q就能让它用指定的 decorator 。然后做一个去?/span> head ?/span> footer 只保留必要的 js ?/span> css 引用?/span> simple.jsp 面Q同时在 decorator.xml 中配
应该可以搞定?/span>
但怎么,是不用这?/span> simple decorator 。没办法Q只好跟q?/span> sitemesh 源码中去调试Q进?/span> ParameterDecoratorMapper c,它承了 AbstractDecoratorMapper c,然后有一?/span> init Ҏ一?/span> getDecorator Ҏ。各打一个断点, init Ҏ?/span> tomcat 启动׃执行Q也正常初始化了Q?/span> getDecorator Ҏ却始l不调用Q一时想不出办法。看到篇文章说不自己?/span> sitemesh.xml 而用自带的 com/opensymphony/module/sitemesh/factory/sitemesh-default.xml 也可以,于是备䆾q删除我写的 sitemesh.xml Q居然成功了。ؓ什么我写的׃行呢Q差别一是我的简化了很多Q只?/span>
和刚加的
ParameterDecoratorMapper Q二是序Q我?/span> ParameterDecoratorMapper 攑֜?/span> ConfigDecoratorMapper 后面Q会不会是顺序原因呢Q调换一下,果然成功了。问题是解决了,原理呢?再花Ҏ间跟一下代码了解下原理Q原来用了 Factory Q它会调用各个配|的 Mapper ?/span> init ҎQƈ攑օ map 中,然后到时选择一?/span> Mapper Q如果符合条件就使用Q否则l往下找。这里就有了序的问题,因ؓ我在 decorator.xml 中用了
获取L查了?/span>
hibernate
?/span>
reference,
试了几次才明白用?/span>
:
q里?/p>
sql 是?/span> select count(*) 开头的”。这里大家可能要问,Z么要使用 BigInteger Q因为如果用 uniqueResult() 默认p?/span> BigInteger Q?/span> BigInteger cast ?/span> Integer 会出错。那么如果我是要返?/span> Integer 呢,可以通过下面的办法实玎ͼ
大家注意_体的部分,q里是给一?/p>
alias 赋予cdQ那?/span> sql 需要变成以 ”select count(*) as count ?/span> 开头了?/span>因ؓ目需要,d下半q开始全面接触开源YӞ使用?/span> spring Q?/span> maven Q?/span> hibernate Q?/span> ibatis {众多开源YӞ也对开源Y件生了厚的兴,于是拿这些开源Y件做?/span> openfans Q一斚w是推q开源Y件在中国的用的交流Q一斚w也ؓ自己在实践中更多使用q些软gQ因为没有项目和利益因素Q可以做惛_的事Q用想用的YӞ。用这些开源Y件倒很是顺利,很多软g拿来p用,都有 sample Q简单用还是不隄?/span>
但一些关键的问题一直悬而未冻I比如 tag 的设计:我现在简单的使用q铺的模型, tag 没有层次之分Q?/span> tag 间生双向关联。但q样是最W合 tag Ҏ的模型吗?如何对这?/span> tag q行分类Q如何定?/span> tag 的多U关联(?/span> spring ?/span> hibernate 有关联, hibernate 又与持久层关联, spring 是否与持久层有间接关联,依次cLQ。。。。。。而做Z个好?/span> tag 模型Q可能就需要图论方面的知识。再比如用户怼度设计(L是豆瓣的核心Q难以复ӞQ每个用h有了一?/span> tag Q如何根据这?/span> tag 定义用户的相似度Q一个用h spring Q?/span> hibernate q?/span> 2 ?/span> tag Q一个用h spring Q?/span> ibatis q?/span> 2 ?/span> tag Q他们相似度为多,如果每个?/span> tag 都很多,再加上权重的概念Q问题又复杂的多。简单的做法是每个用户 tag 一个个匚wQ匹配的多怼度越大,但这栯计一是不准确Q二是时间复杂度很大Q最坏情况ؓ n*n*m*m Q?/span> n 为用hQ?/span> m 为每个用L tag 数?/span>
q些都需要扎实的法基础。而我的基很薄弱Q本U学的比文科q文U的专业Q研I生又学的比较上层的东西Q?/span> UML Q?/span> RUP Q?/span> PM {,也都一知半解)Q选修了一门算法导论,又被 1000 多页的经典英文教材吓下了,上了几次译ְ直接攑ּQ没敢参加最后考试。现在想临时׃脚,谈何Ҏ?/span>
所以算法也q没有用处Q关键要看你在做什么,惛_什么。想?/span> google 、百度不用会 spring Q算法基扎实Q只?/span> c 语言都行Q一些行业如电信、金融也很是需要算法高手。而国内更多的企业做企业应用,一般是q连数据库,写写面Q最多引入些开源框架和软gQ如 spring Q?/span> hibernate Q?/span> struts {。这斚w的需求较大,会了 spring Q省了公司的培训成本Q自然还是给扑ַ作加了一些砝码?/span>
所以有时听到某些hҎҎ术不以ؓӞ说“这些东西有什么是我在几个星期学不会的”的时候,一斚w是对其狂妄进行些鄙视Q一斚w也真要问问自己,我的核心价值到底在哪。这个问题很重要Q涉及面很广Q选择也很多,而我也只是有些模p的{案Q等以后再仔l写写?/span>
不管如何Q我是要开始研I算法了Q得解决问题阿!先在 openfans 开个算法的 tag Q一边学一边积累,对算法有兴趣的同学也可以跟我一块进步?/span>
PS Q做个广告, blogjava 很多好的 bloger Q能否到 www.openfans.net 导入?/span> blog Q跟大家分n下你的感悟,谢谢Q?/span>
你是开源Y件的传播者,你希望更多的Z解和使用开源YӞ希望你的文章被更多的人阅读,q展开更深ȝ讨论?/span>
你是开源Y件的参与者,qx参与参与国外的开源项目,也希望中国能有更多的开源团体,大家一起做国h自己的开源Y件。。。。。?/span>
只要你对开源Y件保持着一份热爱,Ƣ迎来到 openfans(www.openfans.net) ?/span>
非常方便?b style="mso-bidi-font-weight: normal">注册后,你就可以点击?b style="mso-bidi-font-weight: normal">提交 feed ”,只要输入你的 rss 地址Q由于时间原因,q没做直接从 web 地址发现 feed Q,可以将你的 feed 加入Q同时我们对一些网站提供了单的匚wQ如 blogjava Q只需输入你在 blogjava 的用户名Q系l会自动匚w成你?/span> blogjava ?/span> feed Q。完成后Q点几Z?b style="mso-bidi-font-weight: normal">立即导入”,可以将你的文章入库Q点几Z?b style="mso-bidi-font-weight: normal">最新日?/b>”可以查看。以后系l会每日定期d你的 feed Q自动将新的文章加入。由于你提供的是 rss Q内容应该是文章的简短描qͼ视你?/span> blog 提供商而定Q,而且我们会ؓ每篇文章提供原文链接Q直接指向你?/span> blog 原文?/span>
导入的日志一般是没有q行分类的,不方便大家的查找。在每篇日志上都有个?b style="mso-bidi-font-weight: normal">我要推荐”链接,点击q输入你认ؓ适合的标{(?/span> spring Q?/span> hibernate Q?/span> cms Q等Q就可以把这日志Ş成文章,攑֜相应的标{下Q永久保存。需要学?/span> spring Q?/span> hibernate Q?/span> cms 的后来者,可以方便的查扑ֈ标签和YӞ扑ֈ你的文章Q进而进入你?/span> blog ?/span>
同时你也可以发表文章Q推荐YӞ创徏和加入小l,q行评论。。。。。。我们会不断完善功能Q给大家提供更方便的功能和更好的用户体验?/span>
׃现在人员较少Q开发进度较慢。但先做个广告,下一步会?/span> digg Q提供对软g、文章、用L?/span> digg 。做对一?b style="mso-bidi-font-weight: normal">标签?/b> rss Q如 springframework |站?/span> rss Q自动获?/span> spring 的版本更C息。还要完?b style="mso-bidi-font-weight: normal">组功能?b style="mso-bidi-font-weight: normal">好友功能Q给大家提供一个方便交的q_?/span>
|站?/span> java 的一堆开源Y件做成,同时本n也是开源YӞ希望参与的同学可?/span> email l?/span> pesome@gmail.com Q大家一块ؓ推动开源Y件在中国的发展做q贡献?/span>
<
plugin
>
<
artifactId
>
maven-compiler-plugin
</
artifactId
>
<
configuration
>
<
source
>
1.5
</
source
>
<
target
>
1.5
</
target
>
</
configuration
>
</
plugin
>
我一看就明白了,
mvn
时是?/span>
1.3
l我~译的,得告诉它?/span>
1.5
。拷?/span>
pom
文g中,?/span>
mvn eclipse:eclipse
搞定。问题是很快解决了,同时却留下了很多思考:
1Q?span style="FONT: 7pt 'Times New Roman'">
技术没有止境,做h一定要谦虚?/span> Maven2 我用的也比较早Q还曄被白衣说是对maven2的推q做了A献的Q自׃颇以为然。而现在这个简单的问题却不知道了,q得google或问冟뀂还好我一直比较谦虚(本n也没啥可骄傲的资本)Q否则要狂被鄙视了?span lang="EN-US">2Q?span style="FONT: 7pt 'Times New Roman'">
技术的推广要不遗余力,好的东西要让大家都知道?/span> Maven2 我也只是使用Q了解ƈ不深入(目中碰C的知道,没碰到的׃懂了Q,但我是到处推荐,到个hpq个好。这下很多朋友都知道了,也引入项目实践了。一斚w他们用的舒服Q提高了效率Q有炚w题还可以向我q个所谓的maven2高手hQ我自是“知无不aQ言无不”;另一斚wQ他们也许就到其它问题了,然后知道如何解决Q在我碰到类似问题时Q就可以向他们请教了。你看,多好的良性@环,x都美滋滋的?span lang="EN-US">3Q?span style="FONT: 7pt 'Times New Roman'">
多进行知识共享,大家的智慧比个h强?/span> q是从更高的角度看了Q通过知识的共享,能迅速集合大家的l验和智慧,让个体更快的q行学习Q少走弯路。你׃n自己知识的同Ӟ也能获得别h的成果。如果你知道?span lang="EN-US">spring比较强,?span lang="EN-US">hibernate比较强,谁在?span lang="EN-US">mavenQ而且到问题能看他们的文章或直接向他们请教,做v目来是不是都安心的多。可能有?span lang="EN-US">googleQ但google信息量太大,而且很多文章是处处{载千一律,l常半天找不Cѝ我是深有体会,所以想到做openfansQ做一个知识共享的q_Qƈ做到ȝ取精。现在还q远达不到要求,但我会努力的?span lang="EN-US">
svn
地址?/span>
:https://svn.sourceforge.net/svnroot/openfans/
然后拿小龟试了?/span>
,
可以讉K
.
?/span>
svn
?/span>
eclipse
插g下蝲也成功了
,
通过
updatesite
可以下蝲q个插g
(http://www.polarion.org/projects/subversive/download/update-site/)
。打开插gH口Q界面跟
cvs
基本cMQ我先试
commit
功能Q正好把前面
cvs
的本机改动提交上厅R?/span>
l果?/span> 403 forbiden 错?/span> Google Q看到白衣也到同样问题Q结果迁?/span> scud 上去了。我只好点些老外的论坛回复看Q看C个解决问题的回复。号U要 admin->member Q我便照做,一看多了个 svn ?/span> permission 框,把自q先勾上, Update 。然后重?/span> commit Q搞定?/span> Sf ?/span> svn 速度飞快Q比 cvs 快多了,q下也省得自己搞 svn 了。把q个成功l验写出来,也可以给后面的h一个参考?/span>
如果使用 eclipse Q在目根目录,也就?/span> pom.xml 所在目录,q行 mvn eclipse:eclipse( 如初ơ用,会花较长旉到网上下?/span> plugin ?/span> jar Q徏议去喝杯咖啡 ) ?/span> mvn eclipse:eclipse 会生?/span> .class ?/span> .project 文gQ可以进入项目的 build path 查看Q会自动?/span> output 路径设ؓ target/classes 。默认数据库使用 mysql Q如果希望马上运行,则创Z个新数据库,可以命名?/span> openfans Q如?/span> mysql 采用默认安装Q则用户?/span> root Q密码ؓI,可以无需更改 jdbc 配置文g。要更改也很单,?/span> main/src 下面有一?/span> jdbc.properties 文gQ可以在q里更改数据库类型和用户名密码。这里有一?/span> hibernate.hbm2ddl.auto=update Q表C?/span> hibernate 会自动更新徏表语句,也就是新q行或更C hbm 文g再运行, hibernate 都会自动帮你完成数据表的重徏工作Q这样你可以不用再考虑数据库徏表脚本了?/span>
如果惛_ tomcat 里直接运行,则可以执?/span> mvn package Q会q行所?/span> test case 。目前的 test case 通过l承 AbstractTransactionalDataSourceSpringContextTests Q能够方便的实现数据库回滚,?/span> BaseTest cM有一?/span> this.setDefaultRollback(false) Q如果希望通过E序填充数据Q就 uncomment 它。这里有一个地方要注意一下,是 web/WEB-INF/urlrewrite.xml Q这?/span> urlrewrite 的配|文Ӟ urlrewrite 的描q在 openfans |站里有Q可以通过搜烦 urlrewrite 快速的扑ֈ。因为我把文档根设ؓ?/span> / ”,所以有 <to type="redirect">/view$1.html\?id=$2</to> Q如果文档根?/span> openfans 则需?/span> /view 前加?/span> /openfans Q然后再q行 mvn package 。测试全部通过Q就会在 target 目录下生?/span> openfans-o.1.war Q将q个 war 攑ֈ tomcat ?/span> webapps 下,启动 tomcat Q应该就能通过 http://localhost:8080/openfans 讉K了(假定你采用默认端?/span> 8080 Q?/span>
如果q行开发,可以安装 eclipse-tomcat 插gQ插件也可以?/span> openfans |站输入 tomcat q行搜烦。可以在 tomcat ?/span> conf/Catalina/localhost 下创Z?/span> openfans.xml Q内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/openfans" reloadable="true" docBase="D:/javaproject/openfans/web">
</Context>
docBase Ҏ你的 openfans 所在的路径?br /> q里因ؓpom文g定义的默认输Z|ؓtargetQ需改ؓweb-inf/classesQ这时会有一个src冲突Q需把src/web/里的web-inf/classes exclude掉就可以了?br />然后?/span> eclipse 启动 tomcat Q同样可以通过 http://localhost:8080/openfans 讉K了。用q种方式启动 tomcat 可以q行调试?/span>
roadmapQ暂定)Q?
0.1Q?月底完成Q?-注册Q登陆,权限理Q标{֊能,发表软g介绍和文?
0.5Q?月底完成Q?-评分体系Q同城,组和朋友管?
0.8Q?月底完成Q?-sns功能Q投功?
1.0Q?月底完成Q?-开始Ş成专家小l,提供目外包和咨询管理^?
更多--随着q_的用和更多的成员加入,不断加入新的功能
同时启动开源项?span id="highlight_tag" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; PADDING-BOTTOM: 0px; COLOR: #ee6600; PADDING-TOP: 0px; BACKGROUND-COLOR: yellow; EE6600: ">openfansQ用开源YӞeclipse,
maven2, spring(包括spring mvc), hibernate,
mysql,common-validator,sitemesh.....
目的是提供web2.0应用的基本模型,同步?a href="http://www.openfans.net? target="_blank">www.openfans.net?/font>q行验证和用,q能够方便的UL到其它领域?
目前目在sourceforge上,由pesome和oofrank共同理?.1版基本完成?
cvs -d:pserver:anonym...@cvs.sourceforge.net:/cvsroot/openfans login
希望参与开发的同学请mailto:pes...@gmail.comQ简单介l自己ƈ注明在sf上的用户名?
在google上开了一个站务论坛:http://groups.google.com/group/openfans
Ƣ迎大家多来讉KQ推荐Y件和文章Q方便大家更快更好的扑ֈ自己最需要的东西Q?/p>
试Ҏ1Q?/SPAN>在本Z直接试Q@环从metabase库中?/SPAN>process_info表取得数据(表中只有2条记录)比较使用cache和不使用cache的性能Qؓq_|?/SPAN>
代码如下Q?BR>
Ø 循环100ơ,使用cache用时578msQ直接从数据库取用时2015ms?/SPAN>
Ø 循环1000ơ,使用cache用时719msQ直接从数据库取用时13984ms?/SPAN>
Ø 循环10000ơ,使用cache用时2016msQ直接从数据库取用时131188ms?/SPAN>
使用图例比较Q系?/SPAN>1表示循环的次敎ͼpd2Z?/SPAN>cache的用Ӟpd3Z使用cache的用时。可以看出,随着循环ơ数的增多,使用cacheҎ的性能优势更加明显?BR>
l论Q?/SPAN>cacheQ随着循环的增多,用时增长较缓慢,而不使用cache基本是等比例增长。在循环ơ数较多Ӟ使用cache cpu利用率显著提高,能达?/SPAN>90Q以上。不使用cache则只能上?/SPAN>50%左右Q更多是在等待数据库q回l果。所以?/SPAN>cache能大大减L据库的压力,提高应用服务器的利用率,W合我们对应用服务器q行水^扩展的要求?/SPAN>
我通过在实际项目中自行设计和?/SPAN>cacheQ逐渐提高了系l的q发能力Q但同时也感觉到了很多的不Q?/SPAN>
1. 因ؓ是在原有pȝ基础上优化,cache的处理没有统一的规划,而是头痛dQ脚痛医脚?/SPAN>cache分散在系l各个模块,很难惌v哪些模块使用?/SPAN>cache
2. cache的实现各U各P有的是单例、有的是static对象Q?/SPAN>cache对象与数据库的交互也是直接硬~码在原有系l中Q难于维?/SPAN>
3. cache的参数如h间隔。。。。。。未使用配置文gQ而是直接定义?/SPAN>cache的类文g中,寚w|的更改需要更新整个类Q进而媄响系l的q行
4. ~少?/SPAN>cache的监控机制和log机制Q出现问题很隑֎跟踪和解冟?/SPAN>
l过一D|间具体项目的z礼Q对java也有了进一步的认识Q我也可以有能力来解决一直困扰心中的cache的这些问题了。想法很单,是能够通过单一的配|文Ӟ对系l中的所?/SPAN>cacheq行l一的管理,各个cache所在的模块Q和cache的配|参敎ͼ都能够一目了然。而对配置文g的重载功能也是我要考虑的问题,希望Ҏ?/SPAN>cache的配|的更改能够对其?/SPAN>cache无媄响,同时q些更改也能在不影响应用q行状态的情况下进行。当然既然是l一理Q就需要做到接口的l一。我定义?/SPAN>Cache?/SPAN>CachePersistence两个接口Q然后不同的cache可以提供不同的实玎ͼ实现c需要在配置文g中指定,同时pȝ提供默认的实玎ͼ以满简单的应用。想了就要开始做Q我也没想一开始就做出?/SPAN>OSCache?/SPAN>JbossCache那样通用?/SPAN>cache来,也许l过不断的交,不断的完善最l可以做到。经q简单的设计Q我开始写代码了,我一个hQ也是XP~程了,呵呵Q?/SPAN>cache的配|参敎ͼ我根据项目经验想C几个Q可能还可以有,但目前我不知道,需要在更多的项目应用中d玎ͼ具体可以看我的包中的cache.xml文gQ有寚w|项的具体说明?/SPAN>
从开始开发到最后写完测试类Q也׃C个星期的旉Q上班的IZ旉和加班写Q,当中也进行了几次重构。ȝ来说Q还满意,q也俺的第一个开源项目啊Q呵呵!
具体如何使用Q很单,你有兴趣可以实现Cache接口Q我内置了基?/SPAN>HashMap?/SPAN>CacheQ应该能满大部分应用的需要?/SPAN>CachePersistence是你的对象与存储设备交互的实现了,你一般需要实现这一接口Q然后配|在配置文g中。然后通过CacheFactory得到CacheQ通过Cache接口使用对象。对Cache的操作你可以当成一?/SPAN>Map来用,由容器来自动处理何时与存储设备的交互Q你只要配置好就ok了。另外可以参?/SPAN>src中的test包,里面是我?/SPAN>Cache的功能测试代码,也能作ؓ使用cache的实例的?/SPAN>
说了q么多,大家如果有兴,可下载我的全部文Ӟ里面包括jar?/SPAN>src?/SPAN>lib?/SPAN>javadocq有配置文gQ点击这?FONT face="Times New Roman">http://www.aygfsteel.com/Files/pesome/pcache.zip。更Ƣ迎大家在实际的目中用我?/SPAN>cacheQ如果有M问题都可以跟我联p,mailto:pesome@163.com。谢谢!