2009-12-14 16 views
30

Sto provando a configurare Spring + Hibernate + JPA per lavorare con due database (MySQL e MSSQL).Database multipli con Spring + Hibernate + JPA

mio datasource-context.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" 
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd" 
xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:util="http://www.springframework.org/schema/util"> 

<!-- 
Data Source config 
    --> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close" p:driverClassName="${local.jdbc.driver}" p:url="${local.jdbc.url}" 
    p:username="${local.jdbc.username}" p:password="${local.jdbc.password}"> 
</bean> 

<bean id="dataSourceRemote" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close" p:driverClassName="${remote.jdbc.driver}" 
    p:url="${remote.jdbc.url}" p:username="${remote.jdbc.username}" 
    p:password="${remote.jdbc.password}" /> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
    p:entity-manager-factory-ref="entityManagerFactory" /> 

<!-- 
    JPA config 
    --> 
<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="persistenceUnitManager" 
    class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> 
     <property name="persistenceXmlLocations"> 
    <list value-type="java.lang.String"> 
    <value>classpath*:config/persistence.local.xml</value> 
    <value>classpath*:config/persistence.remote.xml</value> 
    </list> 
    </property> 

    <property name="dataSources"> 
    <map> 
    <entry key="localDataSource" value-ref="dataSource" /> 
    <entry key="remoteDataSource" value-ref="dataSourceRemote" /> 
    </map> 
    </property> 
    <property name="defaultDataSource" ref="dataSource" /> 
</bean> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="jpaVendorAdapter"> 
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
    p:showSql="true" p:generateDdl="true"> 
    </bean> 
    </property> 
    <property name="persistenceUnitManager" ref="persistenceUnitManager" /> 
<property name="persistenceUnitName" value="localjpa"/> 
</bean> 

<bean 
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

</beans> 

Ogni persistence.xml contiene una sola unità, in questo modo:

<persistence-unit name="remote" transaction-type="RESOURCE_LOCAL"> 
    <properties> 
    <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultNamingStrategy" /> 
    <property name="hibernate.dialect" value="${remote.hibernate.dialect}" /> 
    <property name="hibernate.hbm2ddl.auto" value="${remote.hibernate.hbm2ddl.auto}" /> 
    </properties> 
</persistence-unit> 

PersistenceUnitManager causa seguente eccezione:

non può risolvere di riferimento to bean 'persistenceUnitManager' mentre si imposta bean p roperty 'persistenceUnitManager'; nidificato eccezione è org.springframework.beans.factory.BeanCreationException: Errore nella creazione di fagioli con nome 'persistenceUnitManager' definito nella risorsa percorso classe [config/datasource-context.xml]: inizializzazione di fagioli fallito; annidata eccezione è org.springframework.beans.TypeMismatchException: impossibile convertire il valore di proprietà di tipo [java.util.ArrayList] per richiesto tipo [java.lang.String] per la proprietà 'persistenceXmlLocation'; nidificato eccezione è java.lang.IllegalArgumentException: Impossibile convertire il valore di tipo [java.util.ArrayList] per tipo richiesto [java.lang.String] per la proprietà 'persistenceXmlLocation': non corrispondenti editori o strategia di conversione trovato

Se lasciato una sola persistence.xml senza lista, ogni funziona bene ma ho bisogno di 2 unità ...

cerco anche di trovare soluzioni alternative per il lavoro con i due database in un contesto primavera + Hibernate , quindi apprezzerei qualsiasi soluzione.

Nuovo errore dopo aver cambiato a persistenceXmlLocations:

Nessuna singola unità di default la persistenza definita in {classpath: config/persistence.local.xml, classpath: config/persistence.remote.xml}

Aggiornamento:

Aggiungo persistenceUnitName, funziona, ma solo con una unità, ha ancora bisogno di aiuto.

Aggiornamento:

ho cambiato file di configurazione: datasource-context.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" 
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd" 
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:util="http://www.springframework.org/schema/util"> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
     destroy-method="close" p:driverClassName="${local.jdbc.driver}" p:url="${local.jdbc.url}" 
     p:username="${local.jdbc.username}" p:password="${local.jdbc.password}"> 
    </bean> 

    <bean id="dataSourceRemote" class="org.apache.commons.dbcp.BasicDataSource" 
     destroy-method="close" p:driverClassName="${remote.jdbc.driver}" 
     p:url="${remote.jdbc.url}" p:username="${remote.jdbc.username}" 
     p:password="${remote.jdbc.password}"> 
    </bean> 

    <bean 
     class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"> 
     <property name="defaultPersistenceUnitName" value="pu1" /> 
    </bean> 

    <bean id="persistenceUnitManager" 
     class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> 
     <property name="persistenceXmlLocation" value="${persistence.xml.location}" /> 
     <property name="defaultDataSource" ref="dataSource" /> <!-- problem --> 
     <property name="dataSources"> 
      <map> 
       <entry key="local" value-ref="dataSource" /> 
       <entry key="remote" value-ref="dataSourceRemote" /> 
      </map> 
     </property> 
    </bean> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
       p:showSql="true" p:generateDdl="true"> 
      </bean> 
     </property> 
     <property name="persistenceUnitManager" ref="persistenceUnitManager" /> 
     <property name="persistenceUnitName" value="pu1" /> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="entityManagerFactoryRemote" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
       p:showSql="true" p:generateDdl="true"> 
      </bean> 
     </property> 
     <property name="persistenceUnitManager" ref="persistenceUnitManager" /> 
     <property name="persistenceUnitName" value="pu2" /> 
     <property name="dataSource" ref="dataSourceRemote" /> 
    </bean> 

    <tx:annotation-driven /> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
     p:entity-manager-factory-ref="entityManagerFactory" /> 


    <bean id="transactionManagerRemote" class="org.springframework.orm.jpa.JpaTransactionManager" 
     p:entity-manager-factory-ref="entityManagerFactoryRemote" /> 

</beans> 

persistenza.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence 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" 
    version="1.0"> 

    <persistence-unit name="pu1" transaction-type="RESOURCE_LOCAL"> 
     <properties> 
      <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultNamingStrategy" /> 
      <property name="hibernate.dialect" value="${local.hibernate.dialect}" /> 
      <property name="hibernate.hbm2ddl.auto" value="${local.hibernate.hbm2ddl.auto}" />       
     </properties> 
    </persistence-unit> 

    <persistence-unit name="pu2" transaction-type="RESOURCE_LOCAL"> 
     <properties> 
      <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultNamingStrategy" /> 
      <property name="hibernate.dialect" value="${remote.hibernate.dialect}" /> 
      <property name="hibernate.hbm2ddl.auto" value="${remote.hibernate.hbm2ddl.auto}" /> 
     </properties> 
    </persistence-unit> 

</persistence> 

Ora si costruisce due EntityManagerFactory, ma entrambi sono per Microsoft SQL Server

[main] INFO org.hibernate.ejb.Ejb3Configuration - Processing PersistenceUnitInfo [ 
    name: pu1 
    ...] 
[main] INFO org.hibernate.cfg.SettingsFactory - RDBMS: Microsoft SQL Server 

[main] INFO org.hibernate.ejb.Ejb3Configuration - Processing PersistenceUnitInfo [ 
    name: pu2 
    ...] 
[main] INFO org.hibernate.cfg.SettingsFactory - RDBMS: Microsoft SQL Server (but must MySQL) 

suggerisco, che utilizzano solo dataSource, dataSourceRemote (nessuna sostituzione) non viene lavorato. Questo è il mio ultimo problema.

risposta

15

È necessario utilizzare la proprietà persistenceXmlLocations (notare il plurale) anziché persistenceXmlLocation. Si tratta di un array di stringhe, quindi sarà automaticamente convertito dalla lista:

<bean id="persistenceUnitManager" 
     class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> 
    <property name="persistenceXmlLocations"><list> 
    <value>classpath*:config/persistence.local.xml</value> 
    <value>classpath*:config/persistence.remote.xml</value> 
    </list></property> 
    ... 

Aggiornamento (sulla base di modifica)

tuo entityManagerFactory non specifica persistenceUnitName proprietà. Devi farlo esplicitamente perché stai definendo più di una unità di persistenza e entityManagerFactory deve sapere quale usare.

+0

:) grazie, hai ragione, ma ora ho nuovo errore – ziftech

+0

Se è legato a questo, forse si posso aggiornare la tua domanda e darò un'occhiata. Se non è direttamente correlato è probabilmente meglio pubblicare una nuova domanda. – ChssPly76

+1

ok, quindi se ho impostato persistenceUnitName esplicitamente, lo farà opere, ma solo con una sola unità. Come posso cambiare unità nell'applicazione? – ziftech

6

Se seguite questo tutorial, http://www.javacodegeeks.com/2010/05/jboss-42x-spring-3-jpa-hibernate.html è possibile apportare le seguenti modifiche di accedere ai due database diversi:

  1. persistence.xml, definire una seconda pesristence unità per il secondo database.
  2. spring.xml, definire un secondo bean entityManagerFactory con un nome diverso, diciamo "entityManagerFactoryDB2" e configurarlo per utilizzare l'unità persistente per il secondo database.
  3. per ogni DAO si desidera accedere alla seconda base di dati sono i seguenti:

    @Autowired 
    private EntityManagerFactory entityManagerFactoryDB2; 
    
    @PostConstruct 
    public void init() { 
        super.setEntityManagerFactory(entityManagerFactoryDB2); 
    } 
    

Questo è tutto!

Nelle classi di servizio primaverili, utilizzare i DAO come al solito!

8

Justin, numero 3 può essere fatto in un modo più standard come questo:

  1. nel vostro contesto Primavera:

    <context:annotation-config /> 
    
  2. Nei tuoi DAO riuscito a molla (notare la proprietà unitName):

    @PersistenceContext(unitName = "pu1"`) protected EntityManager entityManager; 
    

In questo modo un EntityManager opportunamente corrispondente corrispondente all'unità di persistenza chiamata "pu1" verrebbe iniettato nei DAO corrispondenti.

+0

non credo che la primavera supporta l'attributo unitName prima della versione 3, FYI. – Lyle

1

ho risolto il problema (Come connettersi banca dati multipla utilizzando la primavera e Hibernate) in questo modo, spero che vi aiuterà :) NOTA:Ho aggiunto il codice pertinente, gentilmente faccio il dao con l'aiuto di impl che ho usato nel codice sotto menzionato.

**web.xml** 

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>MultipleDatabaseConnectivityInSpring</display-name> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/dispatcher-servlet.xml 
     </param-value> 
    </context-param> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 
</web-app> 


**persistence.xml** 


<?xml version="1.0" encoding="UTF-8"?> 
<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="localPersistenceUnitOne" 
     transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>in.india.entities.CustomerDetails</class> 
     <exclude-unlisted-classes /> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /> 
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" /> 
      <property name="hibernate.jdbc.batch_size" value="0" /> 
      <property name="hibernate.show_sql" value="false" /> 
      <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/shankar?sslmode=require" /> 
      <property name="hibernate.connection.username" value="username" /> 
      <property name="hibernate.connection.password" value="password" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
     </properties> 
    </persistence-unit> 
    <persistence-unit name="localPersistenceUnitTwo" 
     transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>in.india.entities.CompanyDetails</class> 
     <exclude-unlisted-classes /> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /> 
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" /> 
      <property name="hibernate.jdbc.batch_size" value="0" /> 
      <property name="hibernate.show_sql" value="false" /> 
      <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/shankarTwo?sslmode=require" /> 
      <property name="hibernate.connection.username" value="username" /> 
      <property name="hibernate.connection.password" value="password" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
     </properties> 
    </persistence-unit> 
</persistence> 


**dispatcher-servlet** 


<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:task="http://www.springframework.org/schema/task" xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util" 
    default-autowire="byName" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
     http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 
    <!-- Configure messageSource --> 

    <mvc:annotation-driven /> 
    <context:component-scan base-package="in.india.*" /> 
    <bean id="messageResource" 
     class="org.springframework.context.support.ResourceBundleMessageSource" 
     autowire="byName"> 
     <property name="basename" value="messageResource"></property> 
    </bean> 

    <bean 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/jsp/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 



    <bean id="entityManagerFactoryOne" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
     autowire="constructor"> 
     <property name="persistenceUnitName" value="localPersistenceUnitOne" /> 
    </bean> 

    <bean id="messageSource" 
     class="org.springframework.context.support.ResourceBundleMessageSource" 
     autowire="byName"> 
     <property name="basename" value="messageResource" /> 
    </bean> 

    <bean id="entityManagerFactoryTwo" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
     autowire="constructor"> 
     <property name="persistenceUnitName" value="localPersistenceUnitTwo" /> 
    </bean> 

    <bean id="manager1" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactoryOne" /> 
    </bean> 

    <bean id="manager2" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactoryTwo" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="manager1" /> 
    <tx:annotation-driven transaction-manager="manager2" /> 

    <!-- declare dependies here --> 

    <bean class="in.india.service.dao.impl.CustomerServiceImpl" /> 
    <bean class="in.india.service.dao.impl.CompanyServiceImpl" /> 

    <!-- Configure MVC annotations --> 
    <bean 
     class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> 
    <bean 
     class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 
    <bean 
     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> 
</beans> 



**java class to persist into one database** 


package in.india.service.dao.impl; 

import in.india.entities.CompanyDetails; 
import in.india.service.CompanyService; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

import org.springframework.transaction.annotation.Transactional; 

public class CompanyServiceImpl implements CompanyService { 

    @PersistenceContext(unitName = "entityManagerFactoryTwo") 
    EntityManager entityManager; 

    @Transactional("manager2") 
    @Override 
    public boolean companyService(CompanyDetails companyDetails) { 

     boolean flag = false; 
     try 
     { 
      entityManager.persist(companyDetails); 
      flag = true; 
     } 
     catch (Exception e) 
     { 
      flag = false; 
     } 

     return flag; 
    } 

} 


**java class to persist in another database** 

package in.india.service.dao.impl; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

import org.springframework.transaction.annotation.Transactional; 

import in.india.entities.CustomerDetails; 
import in.india.service.CustomerService; 

public class CustomerServiceImpl implements CustomerService { 

    @PersistenceContext(unitName = "localPersistenceUnitOne") 
    EntityManager entityManager; 

    @Override 
    @Transactional(value = "manager1") 
    public boolean customerService(CustomerDetails companyData) { 

     boolean flag = false; 
     entityManager.persist(companyData); 
     return flag; 
    } 
} 


**customer.jsp** 

<%@page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <center> 
     <h1>SpringWithMultipleDatabase's</h1> 
    </center> 
    <form:form method="GET" action="addCustomer.htm" modelAttribute="customerBean" > 
     <table> 
      <tr> 
       <td><form:label path="firstName">First Name</form:label></td> 
       <td><form:input path="firstName" /></td> 
      </tr> 
      <tr> 
       <td><form:label path="lastName">Last Name</form:label></td> 
       <td><form:input path="lastName" /></td> 
      </tr> 
      <tr> 
       <td><form:label path="emailId">Email Id</form:label></td> 
       <td><form:input path="emailId" /></td> 
      </tr> 
      <tr> 
       <td><form:label path="profession">Profession</form:label></td> 
       <td><form:input path="profession" /></td> 
      </tr> 
      <tr> 
       <td><form:label path="address">Address</form:label></td> 
       <td><form:input path="address" /></td> 
      </tr> 
      <tr> 
       <td><form:label path="age">Age</form:label></td> 
       <td><form:input path="age" /></td> 
      </tr> 
      <tr> 
       <td><input type="submit" value="Submit"/></td> 
      </tr> 
     </table> 
    </form:form> 
</body> 
</html> 


**company.jsp** 


<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>ScheduleJobs</title> 
</head> 
<body> 
<center><h1>SpringWithMultipleDatabase's</h1></center> 
<form:form method="GET" action="addCompany.htm" modelAttribute="companyBean" > 
<table> 
    <tr> 
     <td><form:label path="companyName">Company Name</form:label></td> 
     <td><form:input path="companyName" /></td> 
    </tr> 
    <tr> 
     <td><form:label path="companyStrength">Company Strength</form:label></td> 
     <td><form:input path="companyStrength" /></td> 
    </tr> 
    <tr> 
     <td><form:label path="companyLocation">Company Location</form:label></td> 
     <td><form:input path="companyLocation" /></td> 
    </tr> 
    <tr> 
     <td> 
      <input type="submit" value="Submit"/> 
     </td> 
    </tr> 
</table> 
</form:form> 
</body> 
</html> 

**index.jsp** 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Home</title> 
</head> 
<body> 
<center><h1>Multiple Database Connectivity In Spring sdfsdsd</h1></center> 

<a href='customerRequest.htm'>Click here to go on Customer page</a> 
<br> 
<a href='companyRequest.htm'>Click here to go on Company page</a> 
</body> 
</html> 

**success.jsp** 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>ScheduleJobs</title> 
</head> 
<body> 
<center><h1>SpringWithMultipleDatabase</h1></center> 
    <b>Successfully Saved</b> 
</body> 
</html> 

**CompanyController** 

package in.india.controller; 

import in.india.bean.CompanyBean; 
import in.india.entities.CompanyDetails; 
import in.india.service.CompanyService; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class CompanyController { 

    @Autowired 
    CompanyService companyService; 

    @RequestMapping(value = "/companyRequest.htm", method = RequestMethod.GET) 
    public ModelAndView addStudent(ModelMap model) { 
     CompanyBean companyBean = new CompanyBean(); 
     model.addAttribute(companyBean); 
     return new ModelAndView("company"); 
    } 

    @RequestMapping(value = "/addCompany.htm", method = RequestMethod.GET) 
    public ModelAndView companyController(@ModelAttribute("companyBean") CompanyBean companyBean, Model model) { 
     CompanyDetails companyDetails = new CompanyDetails(); 
     companyDetails.setCompanyLocation(companyBean.getCompanyLocation()); 
     companyDetails.setCompanyName(companyBean.getCompanyName()); 
     companyDetails.setCompanyStrength(companyBean.getCompanyStrength()); 
     companyService.companyService(companyDetails); 
     return new ModelAndView("success"); 

    } 
} 

**CustomerController** 


package in.india.controller; 

import in.india.bean.CustomerBean; 
import in.india.entities.CustomerDetails; 
import in.india.service.CustomerService; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class CustomerController { 

    @Autowired 
    CustomerService customerService; 

    @RequestMapping(value = "/customerRequest.htm", method = RequestMethod.GET) 
    public ModelAndView addStudent(ModelMap model) { 
     CustomerBean customerBean = new CustomerBean(); 
     model.addAttribute(customerBean); 
     return new ModelAndView("customer"); 
    } 

    @RequestMapping(value = "/addCustomer.htm", method = RequestMethod.GET) 
    public ModelAndView customerController(@ModelAttribute("customerBean") CustomerBean customer, Model model) { 
     CustomerDetails customerDetails = new CustomerDetails(); 
     customerDetails.setAddress(customer.getAddress()); 
     customerDetails.setAge(customer.getAge()); 
     customerDetails.setEmailId(customer.getEmailId()); 
     customerDetails.setFirstName(customer.getFirstName()); 
     customerDetails.setLastName(customer.getLastName()); 
     customerDetails.setProfession(customer.getProfession()); 
     customerService.customerService(customerDetails); 
     return new ModelAndView("success"); 

    } 
} 


**CompanyDetails Entity** 


package in.india.entities; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.SequenceGenerator; 
import javax.persistence.Table; 

@Entity 
@Table(name = "company_details") 
public class CompanyDetails { 

    @Id 
    @SequenceGenerator(name = "company_details_seq", sequenceName = "company_details_seq", initialValue = 1, allocationSize = 1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "company_details_seq") 
    @Column(name = "company_details_id") 
    private Long companyDetailsId; 
    @Column(name = "company_name") 
    private String companyName; 
    @Column(name = "company_strength") 
    private Long companyStrength; 
    @Column(name = "company_location") 
    private String companyLocation; 

    public Long getCompanyDetailsId() { 
     return companyDetailsId; 
    } 

    public void setCompanyDetailsId(Long companyDetailsId) { 
     this.companyDetailsId = companyDetailsId; 
    } 

    public String getCompanyName() { 
     return companyName; 
    } 

    public void setCompanyName(String companyName) { 
     this.companyName = companyName; 
    } 

    public Long getCompanyStrength() { 
     return companyStrength; 
    } 

    public void setCompanyStrength(Long companyStrength) { 
     this.companyStrength = companyStrength; 
    } 

    public String getCompanyLocation() { 
     return companyLocation; 
    } 

    public void setCompanyLocation(String companyLocation) { 
     this.companyLocation = companyLocation; 
    } 
} 


**CustomerDetails Entity** 

package in.india.entities; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.SequenceGenerator; 
import javax.persistence.Table; 

@Entity 
@Table(name = "customer_details") 
public class CustomerDetails { 

    @Id 
    @SequenceGenerator(name = "customer_details_seq", sequenceName = "customer_details_seq", initialValue = 1, allocationSize = 1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "customer_details_seq") 
    @Column(name = "customer_details_id") 
    private Long customerDetailsId; 
    @Column(name = "first_name ") 
    private String firstName; 
    @Column(name = "last_name ") 
    private String lastName; 
    @Column(name = "email_id") 
    private String emailId; 
    @Column(name = "profession") 
    private String profession; 
    @Column(name = "address") 
    private String address; 
    @Column(name = "age") 
    private int age; 
    public Long getCustomerDetailsId() { 
     return customerDetailsId; 
    } 

    public void setCustomerDetailsId(Long customerDetailsId) { 
     this.customerDetailsId = customerDetailsId; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getEmailId() { 
     return emailId; 
    } 

    public void setEmailId(String emailId) { 
     this.emailId = emailId; 
    } 

    public String getProfession() { 
     return profession; 
    } 

    public void setProfession(String profession) { 
     this.profession = profession; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 
} 
0
  1. creare EntityManagerFactory multipli corrispondente ad ogni unità di persistenza.
  2. specificare proprietà unitName per @PersistenceContext

interruttore tra quei entityManagerFactories coloro verrà iniettato

Problemi correlati