项目涉及到两个数据库oracle和db2,移植到JBoss需要配置JNDI。经R&D后,配置如下:
[JBoss的配置]
<!----><!----> <!---->Add JNDI datasource configuration file: oracle-ds.xml and db2-ds.xml to JBOSS_HOME/server/default/deploy/
oracle-ds.xml 和 db2-ds.xml 参照JBoss里的例子...
-----------------------------------
[项目里的配置]
<!----><!----> 1. Add these two files: hibernate-config-db2.xml and hibernate-config-oracle.xml to config/properties/
hibernate-config的主要内容如下:
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">java:OracleDS</property>
<property name="show_sql">false</property>
<property name="cache.use_second_level_cache">false</property>
<property name="cache.use_query_cache">false</property>
<property name="hibernate.hbm2ddl.auto">none</property>
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
</session-factory>
</hibernate-configuration>
2. sessionFactory to JNDI configuration:
<!----><!----> <!---->
< bean id = "sessionFactory" class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
< property name = "mappingDirectoryLocations" >
< list > < value > bo </ value > </ list >
</ property >
< property name = "configLocation" >
< value >
classpath:hibernate-config-oracle.xml
</ value >
</ property >
< property name = "hibernateProperties" >
< ref bean = "hibernateProperties" />
</ property >
</ bean >
以上的配置已经完成了JNDI的配置。项目需要配置了两个sessionFactory。
-----------------------------------
项目里用到两个数据库,且有部分业务涉及到同时向两个数据库插入数据,此时需要用到JTATrasaction,而Spring虽然支持分布式事务,但没有实现。各大容器比如:jboss,weblogic都有自己的实现,可是与容器绑定,不够灵活,这时可以考虑使用第三方的实现:Atomikos。然而现实是残酷的,项目做到一定程度不可能有太的改动,只能用折中的方案:手动写事务。如果以JDBC来连接数据库的则需要一个Configuration,但是用JNDI则只要在hibernate-config里面加入一个property,创建一个sessionFactory,然后在用得着的地方lookup,即可拿得这个sessionFactory。