http://code.google.com/p/whfframework/在这个网址拿的源码,用Myeclipse8.5+tomcat6+mysql部署运行后,打开登陆网页报找不到monica数据源
DataSourceName: monica
ERROR Log(error:40) - Thread[Thread-1,5,main]
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.NullPointerException
Caused by: 
java.lang.NullPointerException
at whf.framework.jdbc.DispatchableDataSource.getConnection(DispatchableDataSource.java:80)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:510)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:262)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:102)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:630)
at whf.framework.log.service.LogServiceImp$$EnhancerByCGLIB$$a57f835f.create(<generated>)
at whf.framework.log.util.LogUtil$LogThread.run(LogUtil.java:91)
这个项目应该是用了2个数据库,但源码只配了一个数据源framework,另外数据源monica没配。
applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> <!-- dataSource definitions -->
<bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location"
value="classpath:conf/jdbc.properties" />
</bean> <bean id="dataSource" class="whf.framework.jdbc.DispatchableDataSource">
<property name="defaultDataSourceName">
<value>framework</value>
</property>
<property name="registeredDataSources">
<map>
<entry key="framework">
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${jdbc.framework.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.framework.url}</value>
</property>
<property name="username">
<value>${jdbc.framework.username}</value>
</property>
<property name="password">
<value>${jdbc.framework.password}</value>
</property>
</bean>
</entry>
</map>
</property>
</bean>
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${jdbc.framework.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.framework.url}</value>
</property>
<property name="username">
<value>${jdbc.framework.username}</value>
</property>
<property name="password">
<value>${jdbc.framework.password}</value>
</property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<!-- end dataSource -->
<!-- Hibernate DAO definitions -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="configLocation">
<value>classpath:conf/hibernate.cfg.xml</value>
</property>
<!-- 
<property name="entityInterceptor">
<bean class="whf.framework.log.interceptors.HibernateAuditInterceptor" />
</property>
 -->
<property name="eventListeners">
<map>
<entry key="pre-update">
<bean class="whf.framework.log.events.HibernatePreUpdateEventListener" />
</entry>
<entry key="pre-delete">
<bean class="whf.framework.log.events.HibernatePreDeleteEventListener" />
</entry>
<entry key="post-load">
<bean class="whf.framework.log.events.HibernatePostLoadEventListener" />
</entry>
<entry key="post-insert">
<bean class="whf.framework.log.events.HibernatePostEventListener" />
</entry>
<entry key="post-update">
<bean class="whf.framework.log.events.HibernatePostEventListener" />
</entry>
<entry key="post-delete">
<bean class="whf.framework.log.events.HibernatePostEventListener" />
</entry>

</map>
</property>
<!-- 
<property name="lobHandler"><ref bean="defaultLobHandle"/></property>
-->
</bean>
<bean id="daoSupport" class="whf.framework.dao.hibernate.HibernateDaoSupport">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- end Hibernate DAO definitions -->


<!-- define the transaction interceptor's transaction attributes -->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref local="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean> <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor"/>
</bean>

<!-- define aop advisors -->
<bean id="methodBeforeAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice">
<bean  class="whf.framework.aop.MethodBeforeAdvice" />
</property>
<property name="mappedName">
<value>*</value>
</property>                                                                                          
</bean>
<bean id="methodAfterAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice">
<bean class="whf.framework.aop.MethodAfterAdvice" />
</property>
<property name="mappedName">
<value>*</value>
</property>                                                                                          
</bean>

<!-- let springframework know,which beans use which interceptors -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="beanNames">
<value>*Service</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<value>methodBeforeAdvisor</value>
<value>methodAfterAdvisor</value>
</list>
</property>
</bean>
<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="transactionAttributes">
<props>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="remove*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="create*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean></beans>jdbc.properties文件
jdbc.framework.driverClassName=com.mysql.jdbc.Driver
jdbc.framework.url=jdbc:mysql://localhost/framework?useServerPrepStmts=false&useUnicode=true&characterEncoding=UTF-8
jdbc.framework.username=root
jdbc.framework.password=root
怎么配好另外一个数据源?求各位大大教一下,详细点SpringHibernateStruts双数据源

解决方案 »

  1.   

    DriverManagerDataSource这个东西主要用于测试,改用c3p0吧。
      

  2.   

    我也真心没用过,不知道这个思路对不对,写两个jdbc.properties文件,KEY一样,value值不一样,启动服务时根据判断读取哪一个,然后将数据保存session中,在spring容器中初始化
      

  3.   

    用spring管理hibernate的话,记得配置两个不同的sessionfactroy然后给两个不同的hibernateTemplate注入应该就可以了吧?瞎猜的