Utilisation de deux datasources
Bonjour,
je souhaite paramétrer deux datasources dans ma configuration spring mais je ne sais pas trop comment m'y prendre.
Il s'agit d'un service web permettant l'accès à une première base de données, la deuxième base de données permet de sauvegarder l'historique des accès/modifications.
J'utilise hibernate et deux base de données mysql différentes.
voici mon fichier de config :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
<?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"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- ========================= DATABASE RELATED DEFINITIONS ========================= -->
<!-- Here we setup the dataSource bean. It will be used by the persistence framework below.
We're using a connection pool implementation by Apache. The jdbc settings are replaced
by the placeholder data found in the jdbc.properties file defined above.
-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1/${bdd1}" />
<property name="username" value="${username1}" />
<property name="password" value="${password1}" />
</bean>
<bean id="dataSourceLog" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1/${bdd2}" />
<property name="username" value="${username2}" />
<property name="password" value="${password2}" />
</bean>
<bean id="persistenceUnitManager"
class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="persistenceXmlLocations">
<list>
<value>classpath*:META-INF/persistence.xml</value>
<value>classpath*:META-INF/persistence_log.xml</value>
</list>
</property>
<property name="dataSources">
<map>
<entry key="bdd1" value-ref="dataSource" />
<entry key="bdd2" value-ref="dataSourceLog" />
</map>
</property>
<!-- if no datasource is specified, use this one -->
<property name="defaultDataSource" ref="dataSource" />
</bean>
<bean id="abstractEMF"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" abstract="true">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="generateDdl" value="false" />
</bean>
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<entry key="hibernate.cache.use_query_cache" value="false"/>
<entry key="hibernate.cache.use_second_level_cache" value="false"/>
<entry key="hibernate.archive.autodetection" value="class, hbm" />
<entry key="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
</map>
</property>
</bean>
<bean id="entityManagerFactory" parent="abstractEMF">
<property name="persistenceUnitManager" ref="persistenceUnitManager" />
<property name="persistenceUnitName" value="bdd1"/>
</bean>
<bean id="entityManagerFactoryLog" parent="abstractEMF">
<property name="persistenceUnitManager" ref="persistenceUnitManager" />
<property name="persistenceUnitName" value="bdd2"/>
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<!-- post-processors for all standard config annotations -->
<context:annotation-config />
<!-- Exception translation bean post processor -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="transactionManagerLog" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryLog" />
</bean>
</beans> |
Mes fichiers persistence sont du type:
Code:
1 2 3 4 5 6 7 8 9 10
|
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="bdd1" transaction-type="RESOURCE_LOCAL">
<class>com.bidule.projet.module1.model.AccessHistory</class>
...
<exclude-unlisted-classes />
</persistence-unit>
</persistence> |
le chargement du contexte s'effectue sans erreur par contre lors de l'exécution de l'application les requêtes ne semble pas s'exécuter (requete select ne retournant aucun résultat) alors que cela marchait très bien avant l'ajout de la config pour l'historique (deuxième datasources).
Si quelqu'un a une idée d'où peut venir le problème.
Merci d'avance