Chen Jian

[ibatis]执行resultMap里配置的子select时,是否生成了新的connection

查询对象:一棵树状Bean 环境:Spring Template + JdbcTransactionManager + ibatis 发现:    1.执行树型查询时,ibatis中ExternalTransaction类曾多次执行connection.close()方法    2.Spring Template 生成的Transaction实例并不是ExternalTransaction,而是UserProvidedTransaction。看来Spring Template在执行一次查询的时候使用两种Transaction,一类由Spring模板维护,它的生命周期为整个session,一个session里只有一个;另一类用作具体的db request,每做一次query就生成一个    3. Spring Template 使用的 SqlMapExecutor是SqlMapSession,这个类还继承了SqlMapTransactionManager接口,使得每次执行查询后都会调用ExternalTransaction来关闭一下Connection   (SqlMapExecutorDelegate的autoEndTransaction()方法)     4. 不管有没有Spring Template,ibatis同一个session内的每个request都要用一个新的Connection! 也就是树型Bean千万不能用ibatis来做查询的框架!

Spring + Hibernate:hibernate配置文件不在classes下,怎么办?

    配置hibernate.cfg.xml时,如果这个文件的路径在classes目录之上的某个目录,如web/WEB-INF/hibernate.cfg.xml,咋办?    我开始试着将sessionFactory的configuration值配成  ../hibernate.cfg.xml,不行; 配成 file:///../hibernate.cfg.xml,也不行;看了下源代码,这个东西根本不支持用".."表示的相对路径。    configuration的类型是org.springframework.core.io.Resource,于是我们只好这样解决:写一个类实现Resource接口,在这个类中定义hibernate文件路径为web/WEB-INF/hiberate.cfg.xml,然后将类装配成Bean,并注入到sessionFactory里。    spring正常情况下用的Resource类是org.springframework.core.io.FileSystemResource类,因此我们的实现类应将FileSystemResource类当作我们的 实现类的 一个成员变量,将这个成员变量的path设为 web/hibernate.cfg.xml的绝对路径(要利用java.io.File API),并通过这个成员来实现Resource接口要求实现的方法。     通过这种办法,最后测试通过。

[EhCache] 如何在集群环境中使用Ehcache

     很遗憾,EhCache不是session中的东西,因此不能仅仅利用应用服务器的 session replication使它在各个节点间维持一致    透明性是没有了,还是要显式地弄一下这个东西的。不过还好,EhCache提供的缓存分布机制还是比较简单的。只需要配置一下,不用写代码。    具体怎么配可以去官方网站看看。这里用最简短的话介绍一下实现的方案:每个实例配一个监听进程,用来接收其他实例发来的缓存通知信息;实例之前可以用组播协议互相通知,也可以用普通的IP协议进行多播。    以下是官方的正式文档:    设计思路: http://ehcache.sourceforge.net/documentation/distributed_design.html     配置办法: http://ehcache.sourceforge.net/documentation/distributed_caching.html