Tin's Blog

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

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

Other Project

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

     摘要: 说说遗憾:
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 阅读(4233) | 评论 (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)  编辑

     摘要: 在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)  编辑

     摘要: 今天先看看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)  编辑

     摘要: 这是擦拭法的本意。
实际上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)  编辑

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

     摘要: 这是一篇很有趣的文档,所以摘要一下,其实类似阅读笔记,好像是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)  编辑

     摘要: 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)  编辑

     摘要: 根据生日计算年龄可以通过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)  编辑

posted @ 2006-02-16 21:10 Tin 阅读(2945) | 评论 (3)  编辑