Tin's Blog

You are coming a long way, baby~Thinking, feeling, memory...

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  128 随笔 :: 0 文章 :: 221 评论 :: 0 Trackbacks

2006年3月6日 #

     摘要: 自己申请域名把blog迁移了一下。因为内容也很少和Java相关,感兴趣的朋友轻修改一下订阅地址。
Rss: http://feed.feedsky.com/iamtin
Blog: http://tin.zztin.com  阅读全文
posted @ 2008-06-04 10:00 Tin 阅读(1709) | 评论 (0)编辑 收藏

     摘要: 在中文网织年会上和啄木鸟老大HD讨论了一下好看簿的架构问题,而后老黄写了一个blog entry:
架构考量-选择的难度
里面谈到了架构一个高支撑能力的Web 2.0应用需要考虑的架构选型问题,对我很有帮助。我也回复一下他的建议:  阅读全文
posted @ 2007-11-28 22:39 Tin 阅读(2843) | 评论 (1)编辑 收藏

posted @ 2007-10-24 13:52 Tin 阅读(4680) | 评论 (0)编辑 收藏

     摘要: Twitter的水平扩展的一些关键点,虽然它是个RoR应用,但是这些建议绝对是放之四海而皆准的,非常好的总结。
因为年初Twitter曾经遇到了性能瓶颈,而且几乎束手无策。当初很多人开始怀疑Ruby的性能问题,而后Twitter站起来了 ^__^
有时间的朋友看看这个slide:http://www.slideshare.net/Blaine/scaling-twitter,没有时间的看看我的摘要。  阅读全文
posted @ 2007-10-16 08:42 Tin 阅读(3161) | 评论 (3)编辑 收藏

     摘要: 一位ID是jackson1225的网友在javaeye询问了一个大型Web系统的架构和部署选型问题,希望能提高现有的基于Java的Web应用的服务能力。由于架构模式和部署调优一直是Java社区的热门话题,这个问题引发了很多热心网友的讨论,其中一些意见对其它大型Web项目也有很好的指导意义。  阅读全文
posted @ 2007-09-17 22:48 Tin 阅读(7088) | 评论 (5)编辑 收藏

     摘要: 架构师这个概念比较虚。在国内,架构师其实就是有强烈基础倾向的开发者,他们有很大的热情来实验一个自己熟悉或者感兴趣的东西,从概念上这不是架构师。
我很关注国外的一些架构师描述如何成为架构师。架构师其实最重要的是见识!要无倾向性的研究技术和需求。我很喜欢的印度的一位精神导师克里希姆纳提说过自由的前提是要学会聆听,而聆听就是在听的时候心理不要有任何反抗或者评论的去听,所有的思考都要留在听到以后。电影《教父》里面有一句台词我非常喜欢,不要仇恨你的敌人,因为那会影响你的判断力。我想这都是一个意思。如果想要成为架构师就要多聆听,然后思考,又清楚的判断力,这样选择才会是正确的!  阅读全文
posted @ 2007-09-15 14:57 Tin 阅读(2537) | 评论 (3)编辑 收藏

     摘要: 我觉得fins同学的一些说法会造成没有深入使用这几个框架的朋友的误解。因为这几个框架的思想是不一样的,所以它们的语法也是不同的。fins同学的评价似乎更像从Java的OO想法来评价几个js框架。
其实,moo一开始的想法就是light weight,所以它的很多语法其实就是没有语法。fins说的json语法,其实就是js里面的散列对象嘛,javascript语法本来就是这个样子呀,不包装就是这样。而这种方式如果写的好读起来很像DSL,很舒服,moo充分发挥了这个好处。
prototype和JQuery都没有强调继承这样的概念。javascript的强大很大就来自它的原形继承,如果要用好它就要利用好原形继承。prototype在这方面很像Ruby,比如 Enumerable,这是一种按照行为的抽象,很符合Ruby/Python里面Module的想法,并非所有行为都要抽象到一个对象再继承,行为本身也可以抽象再混入。  阅读全文
posted @ 2007-09-13 08:40 Tin 阅读(8208) | 评论 (9)编辑 收藏

     摘要: javaeye的hax最近在他的blog上进行了一场关于如何写css的讨论,其中反思和讨论了一些关于基于标准或trick进行设计的选择问题,这个问题也是David Heinemeier Hansson对于XHTML/CSS/Javascript标准进行RIA开发话题的一个延展。我们可以从中思考如何在不完美的技术中选择一条相对完美的技术路线?  阅读全文
posted @ 2007-09-10 08:02 Tin 阅读(2510) | 评论 (1)编辑 收藏

posted @ 2007-08-03 16:42 Tin 阅读(2121) | 评论 (1)编辑 收藏

     摘要: 非常好的职业建议,来自Scott Adams
从一个非常喜欢的人的blog看到的,这个人是Tomcat的作者,现在是Apple的Object C开发者,兼重要的RoR作者,兼资深摄影师,兼Mac大fans,他叫James Duncan Davidson(http://duncandavidson.com/)。
在一篇Blog讲到,Scott Adams说:
每个人都可以找到通过一些努力就可以跻身前25%的行业。例如我,我可以比大多数人画的好,但是我还够不上艺术家的水平。我也没有达到喜剧演员那种好笑的水平,但是我比大多数人好笑。魔法在于没什么人即画得好又会写笑话。所以混合一下我就很稀有了。加上我的商业知识背景,我突然发现我比其它的动画人更能理解它(商务)。  阅读全文
posted @ 2007-08-03 16:06 Tin 阅读(2893) | 评论 (4)编辑 收藏

     摘要: 本文已经发表于InfoQ中文站点(http://www.infoq.com/cn/news/2007/07/light-web-servers)

IBM developerWorks网站上最近发布了一则Cameron Laird的关于轻量级Web服务器的文章,里面列举了很多的轻型的Web服务器实现和它们的特点,Cameron还从自己的经验出发总结了评价Web服务器的一些指标。这篇文章目的在于扩展我们在 Web应用部署时的思路,让我们重新思考Web应用的架构和部署方案。众多的轻量级Web服务器其实见证了动态脚本语言实现Web应用的火爆,给实现 Web应用提供了更多解决方案。

轻量Web服务器这个概念关注“轻巧性”,这意味着简单、易于安装、流线化、要求低和健壮。这种“轻巧”主要是相对于目前市场占有率占优的 Apache和IIS而言的,轻量Web服务器应该更小更简单,并且它们至少要有一些性能/特性超过这两个产品(这样它们才可能分得市场份额)。 Cameron这样对比了“轻量”相比“重量”的一些优势:  阅读全文
posted @ 2007-08-02 10:10 Tin 阅读(2096) | 评论 (0)编辑 收藏

     摘要: 有幸在InfoQ的饭局里面认识了王翔,他对.Net和MS技术的确有非常深的造诣。今天看到他的一篇评论:“C#正变得越来越臃肿”
发表了一些感想:

先进与成熟的确是矛盾,但是现在的新技术成熟的都比较快,可能是人接受新事物的速度提高了吧。
Haskell 这样的语言是函数式编程的代表,更多的需要从头开始。所以国外学计算机理论首选Haskell,很多老外抱怨过上学的时候这个东西学的头疼,但是后来他们也都表示获益匪浅。我们的计算机教育是本末倒置,所以我们这些程序员觉得他们晦涩难懂。但是看到Erlang这样的语言,在未来多核环境下的前途,我们还是会动摇的。  阅读全文
posted @ 2007-07-31 15:41 Tin 阅读(836) | 评论 (0)编辑 收藏

     摘要: 本文已经发布于InfoQ中文站(http://www.infoq.com/cn/news/2007/07/java-securejsh-publish),感谢Complystill为我们贡献了SJSH这个项目。

JavaEye上活跃的开发者Complystill(歆渊)最近发布了自己的开源SecureJSH项目,提供了一个通过SSH交互进行Java应用开发或者管理的工具。

在项目的介绍中可以得知,SecureJSH与Ptyhon里面的ipython或者Ruby里面的irb非常相似。它们都允许交互式运行语言的代码,以方便跟踪或者调试应用。但是,Java与Ruby、Python不同,后者是动态脚本语言,它们天生具有解释执行的特点(注意:当然Python支持预编译,Ruby也将在YARV中开始支持,这里指它们的解释执行状态)。我们常见的Python和Ruby发行版本基本上都包括自己的解释器(这也是它们的核心组件),但是Java是一种需要中间编译过程的语言,默认情况下它无法直接解释运行,也没有相应的解释器。  阅读全文
posted @ 2007-07-27 09:56 Tin 阅读(1516) | 评论 (1)编辑 收藏

     摘要: http://developer.yahoo.com/yslow/

这是一个配合Firebug工作的firefox插件。能够对你访问的页面进行分析。
它可以:
* 性能报告
* HTTP/HTML信息汇总
* 列出页面中的组件
* 包含了JSLint  阅读全文
posted @ 2007-07-27 09:33 Tin 阅读(677) | 评论 (0)编辑 收藏

     摘要: 在这里发现了一个技巧:http://rubyisawesome.com/2007/7/10/mysql-secrets-g-instead-of
在Mysql的命令行工具里面给查询加入一个\G参数。横向的表结构会转为使用纵向表结构输出,利于阅读。  阅读全文
posted @ 2007-07-20 14:41 Tin 阅读(5283) | 评论 (0)编辑 收藏

     摘要: 这是敏捷中国的一个讨论,我问了一下架构设计是否在敏捷迭代过程中有一席之地?大家产生了如下讨论。如果我的引用冒犯了当事人,请email我,我会及时修改的。我希望大家能够一起讨论这个topic。  阅读全文
posted @ 2007-07-20 09:03 Tin 阅读(848) | 评论 (0)编辑 收藏

     摘要: 13日,Joyent宣布基于GPL v2将Slingshot和Connector开源。Joyent Slingshot允许开发者将Rails应用程序部署为与桌面应用行为一致,可以在线或者离线(保持同步),可以拖拽,与所有其它桌面应用程序交互等。另外,Joyent还提供了Connector产品和一组可以与Joyent Slingshot协同工作的第三方应用程序。  阅读全文
posted @ 2007-07-18 14:34 Tin 阅读(1394) | 评论 (0)编辑 收藏

     摘要: JavaEye的站长Robbin Fan在他的博客中对SAAS(软件即服务)进行了一番讨论,他总结了目前常见的一些SAAS应用,并且总结了这些应用的特点,展望了SAAS的发展方向。
2005年,David Heinemeier Hansson将自己在项目中使用的基于Ruby的开发框架剥离并开源,从此世界上有了RoR(Ruby on Rails)的响亮名号。很快,Rails在其它语言中也架设了自己的高速轨道,从此Rails思想处处开花,受到了广大开发者的拥护,这是Rails的敏捷本质决定的。随着RoR闪现在开发者眼前的还有Rails背后的公司37signals,这是一家位于芝加哥的创业型小公司,虽然他们的员工目前还是个位数,但是开发出的产品却有超过100万人在使用……  阅读全文
posted @ 2007-07-18 14:32 Tin 阅读(1495) | 评论 (3)编辑 收藏

     摘要: David Heinemeier Hansson(以下简称DHH,Ruby on Rails作者)在最近的一篇Blog“如果我真的喜欢HTML、CSS和Javascript,那又怎么了?”(What if I actually like HTML, CSS, and JavaScript?)中阐述了他对RIA未来的一种看法。他认为目前在三大Web标准规范下的HTML、CSS和Javascript是一套足够强大的工具箱,这些技术提供给开发人员的功能并没有影响到Web应用的发展,并且随着像Firebug和其他优秀Javascript库的支持下,Web程序员的日常开发工作已经非常惬意了。  阅读全文
posted @ 2007-07-18 14:28 Tin 阅读(1193) | 评论 (0)编辑 收藏

posted @ 2007-06-06 11:12 Tin 阅读(698) | 评论 (0)编辑 收藏

posted @ 2007-05-23 11:44 Tin 阅读(1059) | 评论 (4)编辑 收藏

posted @ 2007-01-26 14:37 Tin 阅读(1899) | 评论 (2)编辑 收藏

     摘要: TSS上面Ganesh同志的文章内容是非常有益的,讨论了session的这两个api的区别。get是每次都会从数据库取数据以保证数据的可靠。而load则会返回一个proxy,相当于一个存根,访问的时候从当前session或者hibernate二级缓存中查找,如果找不到则从数据库中Lazy Load一下。从Hibernate的复杂性上来说,这个概念应该算比较容易理解的,而且这种存在也是非常合理的。顺便里面还补充了一下JPA里面也有类似的getReference方法,行为类似load。看完文章你会开始注意这个细节。
可是,这个细节的下面却引起了n多人的讨论,讨论的核心就是Hibernate是不是有太多细节了?
很多人说这样不是OO的,很多人说Hibernate的细节造成它复杂,有人说Hibernate影响了他们的工作效率,等等,反正反对者站出来很多。我想这是可喜的。
说明在Java的Killer-APP组合Spring+Hibernate后面还是有很多持怀疑态度的人的,我们随时都需要提问题的大脑!
所以,我们也思考一下吧:  阅读全文
posted @ 2007-01-26 14:27 Tin 阅读(5134) | 评论 (2)编辑 收藏

     摘要: 本文翻译自IBM DeveloperWorks上的一篇文章,该文讲述了测试分类(test categorization)的概念,本身这个概念很简单,但是却实际的解决我们常见的问题,在我们的测试庞大到一定地步的时候,测试的运行时间过长,维护成本很高,我们如何能够保证持续集成(CI)的正常运行?那就是通过测试分类。所以我翻译了这片文章,希望对大家有所帮助。  阅读全文
posted @ 2006-12-01 00:30 Tin 阅读(1934) | 评论 (0)编辑 收藏

     摘要: 这个问题出现在这种情况,你的每个testCase都需要使用某一种初始化比较耗时的对象(资源),举例如数据库连接、Spring Context。我们遇到的问题是Selenium测试中开启和关闭浏览器,如果一个test启动关闭(我们的程序还需要登录和注销),这样测试的时间会拖的很长,给持续集成带来了困难。
所以……  阅读全文
posted @ 2006-11-17 17:29 Tin 阅读(13522) | 评论 (1)编辑 收藏

     摘要: Selenium Remote Control项目组很高兴的宣布Selenium Remote Control 0.9.0发布。
你可以在这里察看:
http://www.openqa.org/selenium-rc/
也可以在这里下载:
http://www.openqa.org/selenium-rc/download.action
0.9.0包括很多酷玩意,包括frame支持,多窗口支持(用来测试那些不能够在子frame中运行的应用),一个Konqueror浏览器launcher,新的cookie管理功能,和Firefox 2.0与IE7的支持。还包括一个试验性的在Selenium代理中直接的SSL支持,一个新的实验性的“代理注入(proxy injection)”模式允许我们通过修改HTTP代理来更好的控制我们测试的应用程序。
Have Fun!  阅读全文
posted @ 2006-11-15 15:57 Tin 阅读(1558) | 评论 (3)编辑 收藏

     摘要: 欢迎所有对Selenium感兴趣的(翻译的过程就是很好的学习)或者已经使用Selenium的同学积极参加,参加的方式可以是:直接参与翻译,编写原创学习文章并添加到相关资源列表,交流心得并将心得添加到相关资源列表,提供使用的视频片断,推荐好的Selenium文章进入翻译计划,提出你自己的意见。以上方式都非常欢迎,可以发信给我进行沟通(iamtin AT gmail.com)。
目前我们使用JavaScud的Wiki进行翻译工作,网址如下:
http://wiki.javascud.org/display/SEL/Home  阅读全文
posted @ 2006-11-13 15:31 Tin 阅读(2682) | 评论 (42)编辑 收藏

     摘要: 浓缩一下:
1、何时、何目的来用Selenium选择不同。RC、Fit适合从需求阶段就开始写。而IDE录制则适合后补。
2、重构支持。RC重构友好一些。Fit重构不友好。
3、IDE目前限定于FF,做跨浏览器RC比较好。但是IDE录制后的代码很方便转为RC方式。
4、跨域兼容性问题,IDE解决的比较好。  阅读全文
posted @ 2006-10-30 21:33 Tin 阅读(3223) | 评论 (3)编辑 收藏

     摘要: 我用的是Eclipse 3.2,操作系统是WinXP SP2。
需要把eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar里面的swt-win32-3232.dll解压缩出来拷贝到WINDOWS\SYSTEM32里面。
然后就OK了。
是在Eclipse里面运行Springside的ANT Task的时候,如果需要通过console输入交互信息,则会报这个错。应该是因为Eclipse的console依赖于那个本地库,而平常我们安装Eclipse不会拷贝那个库。大概如此了。  阅读全文
posted @ 2006-09-11 15:10 Tin 阅读(8860) | 评论 (12)编辑 收藏

     摘要: 说说遗憾:
1、OSGi在B/S架构中还不好应用。虽然例子是B/S的,可是居然是Servlet模型,里面解释了目前Equinox项目也在扩展应用服务器支持和JSP支持等,可是起码目前还不成熟。
2、模块的粒度很成问题。目前OSGi的契约机制与java interface机制对比一下。OSGi不可能完全取代本地的interface式的解藕,当然人家也没这么说。只使我担心过渡设计后,过细的Bundle肯定会得不偿失,所以需要有人设计/计划这个粒度。这个可能与基于Web services的SOA架构面临类似的问题,需要好的架构师。
3、文档不友好么?说实话,很感谢BlueDavy和OSGi观察者那些大牛的贡献。但是感觉production的样例工程还是很难搞到(其实Eclipse plugins的例子满多哈,可惜没啥文档,需要硬着头皮看),对应的指导文档还没出现。BlueDavy提供的servlet实现我们不可能跟上,毕竟简单也是一种需求。(那谁说过度设计比设计不足更可怕,那个我不是唱反调,我希望我们都能找到那个sweet point,有个好的参照那最好不过了)。 <  阅读全文
posted @ 2006-09-06 11:27 Tin 阅读(4234) | 评论 (2)编辑 收藏

     摘要: 先分析一下在轻量化的Java EE下面他们存在的意义:
1、有的人说过在Web项目中Manager和DAO是同意的,尤其是在透明ORM存在下,DAO由于往往是CRUD的实现场所,而Manager却往往是薄薄的一层门面,很多人就在质疑两者的合并问题。可是robbin曾经进行过一个精辟的分析,虽然两者做的看起来差不多,可是两者的事务属性却不一样,Manager应该有清晰的事务界限,而DAO不应关心于此。也就是说Manager可能会将几个DAO方法组合调用,然后封装在一个事物中。这样说明确了两者的一个重要区别,我们也能体会在使用声明事务的时候有一个分明的事务界限是很有意义的,否则就有可能把Manager中的一个事物拆分,这样实际上就错误了。
2、有些人质疑透明ORM存在的情况下DAO存在的意义,因为透明ORM基本已经隔离了不同数据库的方言区别。这个也很简单,Rod大叔分析过。透明ORM存在的情况下DAO起到了隔离透明ORM与EJB或者JDBC实现的作用,这几种实现实际上是应该考虑到的。
3、还有一个问题,就是DAO是否应该隐藏透明ORM的API。因为前面说到了DAO起  阅读全文
posted @ 2006-09-05 21:52 Tin 阅读(3630) | 评论 (3)编辑 收藏

     摘要: 今天TSS和InfoQ都转了一篇Spring与EJB3的读后感,我就看了下,标题和介绍满吸引人的。内容嘛其实有点不过瘾,但是先记录下来吧。
http://www.devx.com/Java/Article/32314/0/page/1
总的来看Spring+Hibernate与JPA很相似,它们都是基于pojo的持久化。
Hibernate Session和JPA Entity Manager基本上等价,但是要记住他们的两个重要区别。Hibernate session是一个实体缓存也是一个ORM引擎的接口。而JPA中这两个概念是分开的。Persistence context作为缓存而entity manager则作为ORM引擎的接口。…………  阅读全文
posted @ 2006-09-04 20:45 Tin 阅读(4248) | 评论 (1)编辑 收藏

     摘要: 在Eclipse里面运行functional-test这个target的时候发现报错(test target叶出错的):
Could not create task or type of type: junit.
我就想当然的把junit-3.8.1.jar拷贝到我的%ANT_HOME%/lib下面了,结果问题依旧。
......
解决方法目前看最好的就是在Eclipse的Window->Preferences->Ant->Runtime->Classpath里面Ant_Home你指定一下就可以了,可以是你自己的Ant或者Eclipse/plugins里面的ant,这没关系,然后它就会自动扫描相应/lib目录了(之前你应该已经把junit-3.8.1.jar拷贝过去了)。
然后就搞定了。注意,只有在Eclipse运行Ant才有可能遇上这个问题:D
  阅读全文
posted @ 2006-08-31 13:02 Tin 阅读(1469) | 评论 (0)编辑 收藏

     摘要: 由于失业后家中又有人病了,还有很多乱七八糟的事忙,反正没怎么写也没怎么看程序,很惭愧!有朋友说不厚道,赖我,我不厚。这两天看《应用Rails进行敏捷Web开发》,RoR和去年刚看的时候感觉一样,很舒服,现在可能对Java和Ruby的了解都比以前深一些了,看这本书会有些想法。不过没时间纪录,头脑里也乱七八糟的,我只能说是胡言乱语。这本不是什么文章,这是我的一个工作习惯,只要开电脑就开个Notepad记录工作情况,是个流水账,由于Blog过于冷清,把它贴出来,别拍砖了,我已经蔫了:Q  阅读全文
posted @ 2006-08-30 12:39 Tin 阅读(1075) | 评论 (0)编辑 收藏

     摘要: 今天先看看Springside的bookstore的domain设计,这不是springside的重点,先看看。
从hbm看起,在springside-bookstore/src/org.springside.bookstore.commons.domain.hbm下面放着这些hbm。
在Order.hbm.xml里面可以看到一个list映射。list映射可以按照顺序持久化one-to-many关系。使用了映射后OrderItem就没有单独的class声明了,完全以一种组件的形式被映射到Order里面。  阅读全文
posted @ 2006-08-30 12:30 Tin 阅读(2431) | 评论 (3)编辑 收藏

     摘要: 1、Java从语言转向平台。如同.Net,JVM本身提供了平台的抽象。将会扩展动态语言与脚本语言的支持。
2、企业应用的开发过程将简化,如MDD一类,但目的是集中精力开发商业逻辑,而不是纯简化代码或者什么什么。小型应用可能会转向动态语言或脚本语言所营造的舒适开发框架,如RoR,或其它Rails。
3、富领域模型替代贫血模型,基于JPA。
4、目前的AOP、IoC工具依然会流行,而不一定会限定于EJB3模型中。事实说了算,Spring这种事实性标准影响力还是很大的。
5、分布式的考虑,可伸缩型问题凸显。如何透明实现分布式是个关键性问题,AOP是技术契机。
6、Web2.0会产生巨大影响力,但Java绝不是唯一选择。Java要找好自己的位置,同时在平台上最好能够更多的融合,如让JVM支持PHP/Ruby/Python。
7、Web部分竞争激烈,并会持续。EJB3的JSF命运难测。看Web2.0的浪潮了。  阅读全文
posted @ 2006-07-10 14:09 Tin 阅读(1895) | 评论 (2)编辑 收藏

posted @ 2006-06-06 11:28 Tin 阅读(4602) | 评论 (3)编辑 收藏

     摘要: WebWork的result实现非常实用,它很好的解决了View渲染的灵活性问题。这才是MVC模式的优势所在,而像JSF那样帮定JSP的MVC就吃不到这个甜头了。说WebWork2是Model 2 MVC的巅峰就在这些灵活的地方。
闲扯这个不是主要目的。现在Rome是Java下最常用的RSS包,最近消息似乎要转入Apache的Abdera合并变成更强大的聚合引擎。用Rome生成和解析RSS都很方便。今天讨论一下使用ROME给网站生成RSS,并通过WebWork2的Result机制渲染。
最初是从WebWork的Cookbook上看到的RomeResult的文章,一看就会,我这里其实不过是举个详细点的例子,注意我使用的是WebWork 2.2.2和Rome 0.8:  阅读全文
posted @ 2006-06-05 22:25 Tin 阅读(3362) | 评论 (7)编辑 收藏

posted @ 2006-05-24 09:54 Tin 阅读(772) | 评论 (0)编辑 收藏

     摘要: 在Hibernate中获取有关联关系的pojo。我是指例如一个User(用户)拥有一个many-to-one的属性Unit(单位),但是有时有些用户的Unit属性为空,如果按单位查询用户的时候那些单位为null的用户就会被遗漏,如何调取呢?这本来是很简单的,但是我想当然的使用了Restriction.eq,但是不行,后来看了手册才发现应该使用Restrictions.isNul。下面是Test代码...  阅读全文
posted @ 2006-05-11 13:09 Tin 阅读(2368) | 评论 (0)编辑 收藏

     摘要: 这是擦拭法的本意。
实际上BadClass()实例化以后Class里面就不包括T的信息了,对于Class而言T已经被擦拭为Object。而真正的T参数被转到使用T的方法(或者变量声明或者其它使用T的地方)里面(如果没有那就没有存根,这里指ParameterizedTyp),所以无法反射到T的具体类别,也就无法得到T.class。
而getGenericSuperclass()是Generic继承的特例,对于这种情况子类会保存父类的Generic参数类型,返回一个ParameterizedType,这时可以获取到父类的T.class了,这也正是子类确定应该继承什么T的方法。
我们应该利用这种特性,这对实现模版方法非常有用。  阅读全文
posted @ 2006-05-08 21:37 Tin 阅读(2553) | 评论 (3)编辑 收藏

     摘要: 这两天太忙了,没时间写Blog,业余时间又扒了一次google的拖拽,对比了netvibes的,差不多,让后就写了个注释,顺便学习。
google用了混淆,js里面的命名比较晕。我花了些时间把他们翻译成容易看懂的命名,并且作了注释,希望对大家有帮助。
可以这里下载我的例子:
http://www.blogjava.net/Files/iamtin/google_drag.rar
//可拖拽Element的原形,用来将event绑定到各个钩子,这部分市比较通用的,netvibes也是基本完全相同的实现
//这部分推荐看dindin的这个,也会帮助理解,http://www.jroller.com/page/dindin/?anchor=pro_javascript_12
var Drag = {
//对这个element的引用,一次只能拖拽一个Element
obj:null,
//element是被拖拽的对象的引用,elementHeader就是鼠标可以拖拽  阅读全文
posted @ 2006-04-27 22:40 Tin 阅读(15218) | 评论 (34)编辑 收藏

     摘要: 为我们的项目写的一个轻量的分页API。目的在于将分页与数据查询的逻辑完全剥离。我以前看过robbin发的通过detachedCriteria实现的分页那片贴子,里面把分页和数据查询结合在一起了。而我觉得分开更轻量,而且替换也比较容易。但是这个实现中有一个反模式,在逻辑中生成了代码,无奈之选,为了简便。其中字符生成可以自己扩展i18n实现,应该非常容易。
分页实现的接口:  阅读全文
posted @ 2006-03-31 12:30 Tin 阅读(3462) | 评论 (6)编辑 收藏

     摘要: 使用jakarta commons-upload。
升级到2.2.2后发现上传中文会乱码。
经过跟踪发现在com.opensymphony.webwork.dispatcher.DispatcherUtils的prepare(HttpServletRequest request, HttpServletResponse response)方法。
2.2.1->2.2.2时这个方法发生了非常的的变化。
2.2.1时:
public void prepare(HttpServletRequest request, HttpServletResponse response) {
if (encoding != null) {
try {
request.setCharacterEncoding(encoding);
} catch (Exception e) {
LO  阅读全文
posted @ 2006-03-30 21:40 Tin 阅读(3949) | 评论 (11)编辑 收藏

     摘要: 这是一篇很有趣的文档,所以摘要一下,其实类似阅读笔记,好像是3/25发布的:
这时基于对以下人的采访:
JSF Jacob Hookom
RIFE Geert Bevin
Seam Gavin King
Spring MVC Rob Harrop
Spring Web Flow Rob Harrop and Keith Donald
Stripes Tim Fennell
Struts Action 1 Don Brown
Tapestry Howard Lewis Ship
Trails Chris Nelson
WebWork Patrick Lightbody
Wicket Eelco Hillenius
里面问了每个框架的人6个相同的问题,很好的体现了各个Web框架的不同之处。如果配合Rod Johnson的J2EE Development Without EJB等书中对Web MVC的阐述会更加深刻的理解各种框架的思想和使用场合。我阅读后很有收获,所以将全文摘  阅读全文
posted @ 2006-03-30 16:28 Tin 阅读(3187) | 评论 (0)编辑 收藏

     摘要: 今天浏览WW的Wiki,结果无意发现ww:date标签的用法,挠头一想以前没有见过呀,仔细一看原来是2006/3/21才加上的。
会头看看项目发现用的ww 2.2.1中没有这个标签,心想是不是发布新版本了?
果不出所料!发现OPENSYMPHONY已经发布2.2.2了。
不过2.2.2是在Opensymphony下的最后一个版本了,以后的版本就会以Struts Action 2.0的形式发布了,而后者今年8月才发布,中间的日子估计只能靠nightly build了。
说说变化,发现增加了RichTextEditor,经考察就是我们熟悉的FCK Editor。发现还增加了nifty corners,这是一个不用images的圆角容器(css+js),估计用在了某个theme里面。还有J2SE5的支持也更加完善,现在已经可以支持泛型Collection的反射(无需-conversion文件了),还支持annotation风格的validation声名(如此像Stripes那样的Web框架就没什么可吹嘘的了)。其它的变化请参考他们的ReleaseNotes。   阅读全文
posted @ 2006-03-28 20:00 Tin 阅读(2548) | 评论 (3)编辑 收藏

     摘要: BJUG的Cleverpig说起Stripes,正好前两天在TSS上看到Simon Brown的Blog,对它有点感性认识,所以今天就看了一下,说些粗陋的感受:
皮毛上的观感:
1、使用Annotation配置。将Action影射、返回View、默认Command注册、是否验证这些东西都通过Annotations搞,挺有意思。
2、它也包装了自己的Tag,Tag从感官上感觉很像WebWork的风格(估计Stripes也是过这个来实现bind,和Spring MVC相同吧,不过没仔细看Stripes的bind方式)。但是它好像很方便与JSTL共用,所以我觉得它可能和Spring MVC类似,把变量拷贝到request里面,而不是WebWork那样的VlueStack。
3、它的Validation很Cool,用Annotation设定Validation相当舒适。
4、它里面的event似乎挺有意思,也就是说一个Action可以对应多个method,它管它叫Event。现在WebWokr和Spring MVC对这都有支持,但是Annotation带  阅读全文
posted @ 2006-03-22 21:36 Tin 阅读(1429) | 评论 (0)编辑 收藏

     摘要: 遇到了一个奇怪的“浏览器兼容问题”……
是这样的,登陆页面工作不正常,在firefox下总是没有登陆,根本就没有触发webwork的filter dispatcher。
打开我的三剑客:IE、Firefox、Opera测试,发现只有Firefox不行(Mozzila内核的都不行)。
然后花了3个多小时找原因,翻遍网络:weblogic、webwork、fireforx所有关键词都搜索了,没有收获。
然后开始sniffer,看报文。
经过多次分析,发现firefox根本就没有post那个form!
然后又是继续的分析还是无果,一筹莫展……  阅读全文
posted @ 2006-03-14 21:12 Tin 阅读(517) | 评论 (2)编辑 收藏

     摘要: Webwork是标准的请求风格Web MVC,类似的有Struts、Spring MVC。这这种风格的MVC中都使用了前端控制器模式(企业架构模式),也就是说一个URL会被解析然后派发到对应的Action解析,而View调用的是Action处理后的Form对象或者Command对象(Rod的Without EJB)。
上面引用了一些经典的言论,而它们和“页面控制器风格Action复用”有什么关系呢?
嘿嘿,页面控制器在这里指到了View的Page里面依然可以调用控制器(在Webwork中就是Action)。如果是以前肯定有人会说,如果用JSP我随时可以在Page里面写scriptlet,什么东西都能调用……
可是,现在不一样了。我们希望让View单纯一点,不要有杂乱无章的逻辑参与其中。
可是,如果要是如上面所说那么Action在它的一个请求生命周期就要做所有的事……这样一是使Action逻辑变得复杂,二是会变得难以复用。
所以,说到这里就引出了这个主题:
1、在页面调用控制器
2、复用控制器逻辑  阅读全文
posted @ 2006-03-10 14:45 Tin 阅读(2573) | 评论 (4)编辑 收藏

     摘要: 根据生日计算年龄可以通过Calendar实现。最简单可以考虑get(Calendar.DAY_OF_YEAR)来简单修正年龄,但是遇到生日在闰年的2月29之后,或者今年是闰年的2月29之后可能出现计算不准,误差一天。所以还是老实判断年月日好了。
public static int getAge(Date birthDay) throws Exception {
Calendar cal = Calendar.getInstance();

if (cal.before(birthDay)) {
throw new IllegalArgumentException(
"The birthDay is before Now.It's unbelievable!");
}

int yearNow = cal.get(Calendar.YEAR);
int monthNow =   阅读全文
posted @ 2006-03-10 10:00 Tin 阅读(2601) | 评论 (0)编辑 收藏

     摘要: Hibernate的透明持久化用起来非常舒服,有时甚至忘记了数据库的存在。我身边的朋友经常会分不清save、saveOrUpdate、update的区别,lock、merge、replicate、refresh、evict甚至不知道是干什么用的。而且关于实体对象的生命周期也有很多概念不清,分不清transient、persistent、detached的区别,只是知道PO、VO这样的通俗叫法。其实这些概念都很简单,Hibernate的javadoc写的都很清楚,只需看看就能明白。所以我花了些时间将Hibernate 3.1.2中session的javadoc部分翻译了一下,旨在让那些因为Hibernate的“透明”而忘记了它基本概念的人们停下来再看看这些概念  阅读全文
posted @ 2006-03-06 20:09 Tin 阅读(10707) | 评论 (7)编辑 收藏