本文发表在 rolia.net 枫下论坛这些东西可以从Hibernate的API里面找。
Hibernate SessionFactory大致可以对应一个数据库的connection pool, 一个session大致可以对应一个connection。具体的实现细节和定义你可以看源程序里面对应的SessionFactory/Session class,或者看看API文档也可以。
所以一个data source只需要一个Session Factory singleton就可以了,反复创建SessionFactory相当于反复创建connection pool,毫无意义。
具体到这个问题,看看Hibernate 提供的API: https://www.hibernate.org/hib_docs/v3/api/
找Configuration class的API。
得到一个SessionFactory的路径是config.configure().buildSessionFactory(), 实际上是Hibernate通过(默认)的配置文件和数据库建立连接并创建一个connection pool(废话)。注意得到的只是一个SessionFactory而已,这里似乎暗示Hibernate默认一个configuration里面只能有一个SessionFactory。这样做有道理,因为一个configuration对应一个数据库make sense。当然这些都是猜测,具体的我也不清楚,你看看Hibernate的Configuration class源程序,里面的SessionFactory是单个的instance,还是一个collection。如果是一个collection,那么如何reference里面的个别SessionFactory。看看源程序吧,里面都有。
同时注意API里面提供了另外一个method configure(URL url)。
那么,一种可行的解决方案就是创建两个configuration, config1.configure(URL).buildSessionFactory, config2.configure(URL2).buildSessionFactory, 这样你就可以得到两个connection pool了。把这两个sessionfactory扔到JNDI里面就是另外一回事了。更多精彩文章及讨论,请光临枫下论坛 rolia.net
Hibernate SessionFactory大致可以对应一个数据库的connection pool, 一个session大致可以对应一个connection。具体的实现细节和定义你可以看源程序里面对应的SessionFactory/Session class,或者看看API文档也可以。
所以一个data source只需要一个Session Factory singleton就可以了,反复创建SessionFactory相当于反复创建connection pool,毫无意义。
具体到这个问题,看看Hibernate 提供的API: https://www.hibernate.org/hib_docs/v3/api/
找Configuration class的API。
得到一个SessionFactory的路径是config.configure().buildSessionFactory(), 实际上是Hibernate通过(默认)的配置文件和数据库建立连接并创建一个connection pool(废话)。注意得到的只是一个SessionFactory而已,这里似乎暗示Hibernate默认一个configuration里面只能有一个SessionFactory。这样做有道理,因为一个configuration对应一个数据库make sense。当然这些都是猜测,具体的我也不清楚,你看看Hibernate的Configuration class源程序,里面的SessionFactory是单个的instance,还是一个collection。如果是一个collection,那么如何reference里面的个别SessionFactory。看看源程序吧,里面都有。
同时注意API里面提供了另外一个method configure(URL url)。
那么,一种可行的解决方案就是创建两个configuration, config1.configure(URL).buildSessionFactory, config2.configure(URL2).buildSessionFactory, 这样你就可以得到两个connection pool了。把这两个sessionfactory扔到JNDI里面就是另外一回事了。更多精彩文章及讨论,请光临枫下论坛 rolia.net