2008-06的存档

Look Forward To

2008-06-29 1:47 am
ssm10354.jpg 打开桌面的一个文件夹,无意间发现这张摄于大学时代的照片。那蔚蓝的天空下飞过的白鹭,鉴证了我最幸福的一段生活。我也期望着可以和它们一起自由的飞翔。。。毅然决定,明天回学校看看!!! 回图书馆,回龙舟池,回那个陪伴了我4年的地方。 在厦门不知不觉5年了,晚上和小粟一起感慨了一下,他说他以后走了也会经常来看看的。我想我也会。

生命中总是有很多东西值得去期待。就好像那时候期待着可以邂逅很多的白鹭,等它们飞过我的孤独。每一段生活都是一首插曲,而我们却总是忘记了主旋律。

离开35那天,走出软件园的时候比以往多了很多心情。那天在公车上,也是下雨天,想了很多事情。晚上去会展静静的走了很长的一段路,这也是来软件园二期这边一年来,第一次一个人去海边散步。等回来的时候天又下起来小雨,那一刻总感觉老天还是理解我的。

结束了第一份工作。在这一年多的时间里,想感谢很多人,都记在心中吧。 相信自己,相信未来!

话说OGNL

2008-06-25 8:45 pm

 都说OGNL很强大,强大的无缝不入,无所不能。

早就发现确实很强大,但今天才发现没有传说中的强大。

就说说这个标签吧:<s:iterator var=”" value=”" status=”"/>  ,今天我想做一个动态的selected,很简单就根据action里取来的一个Integer型的数据生成options。 可是value中只认实现了Iterable<T> 接口的那些集合类。 如果是固定的循环得到是好办,比如说我想循环4次那可以这样<s:iterator var=”iter” value=”#{0,1,2,3}” status=”index”/>。问题是我现在不能确定多少次,我只想要一个for循环的功能,可惜强大的OGNL居然不能办到。

老大叫我用js处理,可是想想很多地方要用这个东西,于是写了一个Integer转换成LIST的公用方法,这个方法很简单先for在add,放在action的基类里面。

现在可以在iterator就有了foreach的感觉了~~~

Hibernate 缓存问题

8:22 pm

   今天做项目的时候,碰到了一个Hibernate二级缓存的问题。 在进行一个更新操作后,再想从数据库里取东西就会出现NullPointerException。相当郁闷,明明那个对象有封装了那个id。可是就是取不出来,开始以为是mapping的问题,结果查映射文件,没有问题。而如果不进行那个更新操作,就可以取到id,然后正常的使用那个po。苦苦调试,后来居然还以为是spring事务控制上的问题,苦查无果。

十分钟过后:

原来在UPDATE的时候,因为更新的只是部分数据所有没有把他上级的id保存下来,当然也没有设置hidden。然后我刚好要做的另外一个操作,也是用同一个POJO。这个时候问题就来了,因为update的时候,Hibernian缓存了那个对象。而我在此去取得时候,取得就是缓存的的东西,当然找不到id。

 解决的办法有两种,一种是在update表单的时候加上一个隐藏的字段。

另外一种是在update这个动作最后显示的clear缓存。各有优缺点,从安全性上我选择了第二种。

完了总结一下Hibrnate的缓存机制:

hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了。

二级缓存是SessionFactory级别的全局缓存,我们项目用的是ehcache,所有设置如下:hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider如果使用查询缓存,加上hibernate.cache.use_query_cache=true 。

 。。。。另外还有Class的缓存,查询缓存,Collection缓存 ,缓存策略太多了。要下班回家了。值得一提的是N+1的问题,有时间再具体写~~~

struts2 Servlet API 解耦

2008-06-13 8:00 pm

struts2提供了三种和servlet解耦的方式:

1: ActionContext  这个接口对应的ServletAPI是HttpServletRequest。其中有两个方法,get(),set()对于于HttpServletRequest的getAttribute(),setAttribute().使用方法为:

ActionContext.getContext().put(key,value);

ActionContext.getContext().get(key);

相当于:

HttpServletRequest.setAttribute(key,value);

HttpServletRequest.getAttribute(key);

另外还直接获得session.   ActionContext.getContext().getSession();

2:是基于IOC的方法实现的,在Action中必须实现ServletRequestAware,ServletResponseAware,ServletSessionAware. 不推荐使用。

3:ServletActionContext继承了ActionContext。

HttpServletRequest request = ServletActionContext.getRequest();

HttpServletResponse response = ServletActionContext.getPesponse();

HttpSession session = request.getSession();

总结:第二种方法因为要实现接口不推荐使用,一般如果要获得session,用第一种方法。但是ActionContext不能获得request和response所有要用第三种。。。

Exadel Flamingo - Flex with Seam and Spring

2008-06-09 11:46 am

The current state and direction of the software development seems to be going towards agile approaches.  This is mostly a resulted mostly from resurgence of the Internet itself with novel applications supporting Web 2.0 principles. In order to provide a quick response to market demands, the agile development approach seems to be displacing others as being the most efficient and effective. While agile development is not technology specific, there are technologies which are more conducive to agile development than others. Quite a few technologies exist for rapid development of traditional applications, but nothing to aid creation of rich internet application.

官方网站:http://www.exadel.com/web/portal/flamingo

开始关注这个框架!

Fryderyk Franciszek Chopin

2008-06-01 9:03 pm

     送走老婆后,有点伤感。

     回家一遍一遍的听着肖邦的《雨滴》。静静的旋律中透出一种莫名的忧伤,仿佛把我带入了那一场场的关于雨的记忆中。肖邦创造这首钢琴曲的时候,是他去美丽的玛约拉岛疗养期间,那是他最孤独寂寞的时期,那段时间他总是在黄昏时漫步在山径中,享受大自然赋予独特而无私的美。有一天天降大雨,于是就有了这首经典的前奏曲,喜欢他的困境中的优雅,更喜欢那种被浸透在琴声中的忧伤。

 美丽的哀愁还有那优雅的旋律。。。

神啦,让我停在此刻吧。