2015-02-10 71 views
0

我想创建多个WAR文件(应用程序)的全局连接使用。 每个项目使用实体管理器体系结构和maven。我使用的是spring 3.5.1,tomcat 6.0.39,JDK 1.6.0_45,C3P0 0.9.1.2,hibernate-c3p0 4.2.3.Final,com.mchange c3p0 0.9.2使用c3p0与Java MVC(JDK 1.6)

我看遍了所有的例子,没有为我工作,我不知道为什么。 我尝试了几乎所有的东西,但我不知道什么是错的。

我已经写进server.xml中如下:

<Resource auth="Container" 
    description="DB Connection" 
    driverClass="com.mysql.jdbc.Driver" 
    maxPoolSize="20" 
    minPoolSize="12" 
    acquireIncrement="1" 
    name="jdbc/testdb1" 
    user="root" 
    password="" 
    factory="org.apache.naming.factory.BeanFactory" 
    type="com.mchange.v2.c3p0.ComboPooledDataSource" 
    jdbcUrl="jdbc:mysql://localhost:3306/test_db1?autoReconnect=true" /> 

进入context.xml的如下:

<ResourceLink name="jdbc/testdb1" 
    global="jdbc/testdb1" 
    type="javax.sql.DataSource" /> 

进入web.xml中以下:

<resource-ref> 
<res-ref-name>jdbc/testdb1</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 

和我的项目(应用程序)具体配置:

PART 1(JPA XML文件):

<bean id="transactionManagerMysql" class="org.springframework.orm.jpa.JpaTransactionManager"> 
<property name="entityManagerFactory" ref="emfMysql"/> 
</bean> 
<bean id="emfMysql" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
<property name="dataSource" ref="jdbc/testdb1" /> 
<property name="persistenceXmlLocation" value="classpath:persistence-infrastructure.xml" /> 
<property name="persistenceUnitName" value="puMysql" /> 
<property name="jpaVendorAdapter"> 
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
</property>   
<property name="jpaProperties"> 
    <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
     <prop key="hibernate.max_fetch_depth">3</prop> 
     <prop key="hibernate.jdbc.fetch_size">50</prop> 
     <prop key="hibernate.jdbc.batch_size">10</prop> 
     <prop key="hibernate.show_sql">true</prop> 
    </props>   
</property> 
</bean> 
<jpa:repositories base-package="domain.data.repository" 
entity-manager-factory-ref="emfMysql" 
transaction-manager-ref="transactionManagerMysql"/> 

PART 2(持久性XML文件):

<persistence-unit name="puMysql" transaction-type="RESOURCE_LOCAL"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<class>domain.Mysqltable1</class> 
<properties> 
    <property name="hibernate.connection.datasource" value="jdbc/testdb1"/> 
</properties> 
</persistence-unit> 

我得到一个例外:

Error creating bean with name 'emfMysql' defined in class path resource [datasource-tx-jpa-infrastructure.xml]: Cannot resolve reference to bean 'jdbc/testdb1' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'jdbc/testdb1' is defined

我希望有人能帮助我:)

感谢提前

回答

0

它说,你在tomcat的server.xml中定义的数据源资源不是在春天的bean。您应该像这样定义一个数据源bean:

<bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/DatabaseName"/> 
</bean> 

并使用此bean而不是jndi名称作为emfMysql的datasource属性。

请参阅这个answer

+0

非常感谢!我试了很长时间来解决这个问题,这正是我需要的:) – yogev 2015-02-12 08:37:07