복붙노트

[SPRING] Spring + Hibernate + JPA를 이용한 다중 데이터베이스

SPRING

Spring + Hibernate + JPA를 이용한 다중 데이터베이스

두 개의 데이터베이스 (MySQL과 MSSQL) 작업을 위해 Spring + Hibernate + JPA를 설정하려고합니다.

내 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>

각 persistence.xml은 다음과 같이 하나의 단위를 포함합니다.

<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가 다음 예외를 발생시킵니다.

list없이 하나의 persistence.xml만을 남겨두면 모든 것이 잘 동작합니다. 하지만 2 단위가 필요해.

또한 Spring + Hibernate 컨텍스트에서 두 개의 데이터베이스로 작업 할 수있는 대체 솔루션을 찾으려고 노력합니다. 그래서 나는 모든 솔루션을 고맙게 생각합니다.

persistenceXmlLocations로 변경 한 후 새로운 오류 발생 :

최신 정보:

persistenceUnitName을 추가합니다. 작동하지만 단 하나의 유닛에서만 여전히 도움이 필요합니다.

최신 정보:

구성 파일을 변경했습니다. 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>

persistence.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>

이제는 두 개의 entityManagerFactory를 빌드하지만 둘 다 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)

나는 dataSource만을 사용하고, dataSourceRemote (치환하지 않음)는 효과가 없다고 제안한다. 그것이 나의 마지막 문제입니다.

해결법

  1. ==============================

    1.persistenceXmlLocation 대신 persistenceXmlLocations 속성 (복수형에 유의하십시오)을 사용해야합니다. 문자열 배열이므로 목록에서 자동으로 변환됩니다.

    persistenceXmlLocation 대신 persistenceXmlLocations 속성 (복수형에 유의하십시오)을 사용해야합니다. 문자열 배열이므로 목록에서 자동으로 변환됩니다.

    <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>
      ...
    

    업데이트 (편집 기준)

    entityManagerFactory는 persistenceUnitName 특성을 지정하지 않습니다. 하나 이상의 영속성 유닛을 정의하고 있기 때문에 명시 적으로 그렇게해야한다. entityManagerFactory는 어느 것을 사용할지를 알아야한다.

  2. ==============================

    2.Justin, number 3은 다음과 같은 표준 방식으로 수행 할 수 있습니다.

    Justin, number 3은 다음과 같은 표준 방식으로 수행 할 수 있습니다.

    이 방식으로 "pu1"이라는 이름의 영속성 단위에 해당하는 적절히 의도 된 EntityManager가 해당 DAO에 삽입됩니다.

  3. ==============================

    3.이 자습서를 따르는 경우, http://www.javacodegeeks.com/2010/05/jboss-42x-spring-3-jpa-hibernate.html 두 가지 다른 데이터베이스에 액세스하려면 다음과 같이 변경하면됩니다.

    이 자습서를 따르는 경우, http://www.javacodegeeks.com/2010/05/jboss-42x-spring-3-jpa-hibernate.html 두 가지 다른 데이터베이스에 액세스하려면 다음과 같이 변경하면됩니다.

    그게 다야!

    스프링 서비스 클래스에서는 평소와 같이 DAO를 사용하십시오!

  4. ==============================

    4.나는이 방법으로 봄과 최대 절전 모드를 사용하여 여러 데이터베이스를 연결하는 문제를 해결했다. 참고 : 관련 코드를 추가했습니다. 친절하게도 아래에 언급 된 코드에서 사용한 impl을 사용하여 DAO를 만드십시오.

    나는이 방법으로 봄과 최대 절전 모드를 사용하여 여러 데이터베이스를 연결하는 문제를 해결했다. 참고 : 관련 코드를 추가했습니다. 친절하게도 아래에 언급 된 코드에서 사용한 impl을 사용하여 DAO를 만드십시오.

    **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;
        }
    }
    
  5. ==============================

    5.이 wiki 페이지 http://code.google.com/p/gwt-spring-jpa-lucene/wiki/PersistenceUnitSetup에서 persistenceXmlLocations로 spring을 구성하는 방법과 DAO에서 annotations를 설정하는 방법을 확인하십시오.

    이 wiki 페이지 http://code.google.com/p/gwt-spring-jpa-lucene/wiki/PersistenceUnitSetup에서 persistenceXmlLocations로 spring을 구성하는 방법과 DAO에서 annotations를 설정하는 방법을 확인하십시오.

  6. ==============================

    6.그것들이 주입 될 entityManagerFactory간에 전환

    그것들이 주입 될 entityManagerFactory간에 전환

  7. from https://stackoverflow.com/questions/1902997/multiple-database-with-springhibernatejpa by cc-by-sa and MIT license