2015-02-10 72 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