2016-07-23 3 views
2

J'essaie de @Autoriser plusieurs Hibernate SessionFactory dans mon application via Spring 4 SessionFactory DI. Une seule source de données (epi) est injectée correctement mais les deux autres valeurs Datasources SessionFactory sont toujours NULL. Deux d'entre eux sont la base de données Oracle et l'autre DB2. Je ne suis pas sûr de ce que je fais mal.La fabrique de sessions de printemps est toujours nulle pour plusieurs sources de données

Voici mon ressort Datasource.xml

http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd « >

<bean id="epiStageDS" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"/> 
     <property name="url" value="" /> 
     <property name="username" value="" /> 
     <property name="password" value="" /> 
    </bean> 


    <bean id="epi" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> 
    <property name="url" value="" /> 
    <property name="username" value="" /> 
    <property name="password" value="" /> 
    </bean> 

    <bean id="eveDS" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> 
    <property name="url" value="" /> 
    <property name="username" value="" /> 
    <property name="password" value="" /> 
    </bean> 

    <!-- Session factory for EPI db --> 
    <bean id="episessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="epi" /> 
    <property name="packagesToScan"> 
     <list> 
      <value>edu.eve.model</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql:false}</prop> 
      <prop key="hibernate.format_sql">${hibernate.format_sql:false}</prop> 
     </props> 
    </property> 
</bean> 


<!-- EVE DS SESSION FACTORY --> 

    <bean id="eveSessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="eveDS" /> 
    <property name="packagesToScan"> 
     <list> 
      <value>edu.eve.model</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql:false}</prop> 
      <prop key="hibernate.format_sql">${hibernate.format_sql:false}</prop> 
     </props> 
    </property> 
</bean> 

<!-- Session factory for Stage DS db --> 

    <bean id="stageDsSessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="epiStageDS" /> 
    <property name="packagesToScan"> 
     <list> 
      <value>edu.eve.model</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop> 
      <prop key="hibernate.show_sql">${hibernate.db2.show_sql:false}</prop> 
      <prop key="hibernate.format_sql">${hibernate.db2.format_sql:false}</prop> 
     </props> 
    </property> 
</bean> 


<bean id="epiTransactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="episessionFactory" /> 
</bean> 
<bean id="eveTransactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="eveSessionFactory" /> 
</bean> 
<bean id="stageDsTransactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="stageDsSessionFactory" /> 
</bean> 

<bean id="persistenceExceptionTranslationPostProcessor" 

    class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

Voici les classes que je suis en train d'automatiser SessionFactory

Sous sessionFactory s'injecte parfaitement

@Transactional ("epiTransactionManager") public class EpiBaseService {

@Autowired 
@Qualifier("episessionFactory") 
private SessionFactory sessionFactory; 

Autowired valeur sessionFactory sont toujours nulle pour DS ci-dessous.

@Transactional ("stageDsTransactionManager") de StageDsBaseService public class {

@Autowired 
@Qualifier("stageDsSessionFactory") 
private SessionFactory sessionFactory; 

@Transactional ("eveTransactionManager") de EveBaseService public class {

@Autowired 
@Qualifier("eveSessionFactory") 
private SessionFactory sessionFactory; 

S'il vous plaît dites-moi ce que je suis absent ici .

Répondre

0

Je sais ce que je faisais mal. Je créais un nouvel objet de classe de service plutôt que @Autowiring à l'intérieur du contrôleur de ressort. Je faisais cela afin de m'assurer que mon sessionfactory n'est pas null mais semble que ce n'est pas la bonne façon de le faire. Vous devez utiliser le conteneur Spring IOC pour injecter la classe de service dans votre contrôleur. Maintenant, toutes les sessionsFactory sont correctement connectées aux sources de données spécifiées.