JPA e Conexão com BD

Olá,

Estou tendo dificuldades ao usar JPA com duas conexões abertar simultâneas para o mesmo Banco de Dados. Quero criar dois EntityManagerFactory’s, cada um conectado a um usuário distinto do BD. Utilizei o seguinte código

view plaincopy to clipboardprint?

   EntityManagerFactory emf1;  
   EntityManagerFactory emf2;  
   Map<String, String> configOverrides;  
     
                 configOverrides = new HashMap<String, String>();  
   configOverrides.put("hibernate.connection.username", "user1");  
   configOverrides.put("hibernate.connection.password", "1234");  
   emf1 = Persistence.createEntityManagerFactory(  
           "jurisprudenciaPersistenceUnit", configOverrides);  
                   
                 configOverrides = new HashMap<String, String>();  
   configOverrides.put("hibernate.connection.username", "user2");  
   configOverrides.put("hibernate.connection.password", "4321");  
   emf1 = Persistence.createEntityManagerFactory(  
           "jurisprudenciaPersistenceUnit", configOverrides);  

Contudo, obtive a seguinte mensagem de erro.

view plaincopy to clipboardprint?

    Caused by: org.hibernate.cache.CacheException: Attempt to restart an already started EhCacheProvider. Use sessionFactory.close()  between repeated calls to buildSessionFactory. Consider using net.sf.ehcache.hibernate.SingletonEhCacheProvider. Error from  ehcache was: Cannot parseConfiguration CacheManager. Attempt to create a new instance of CacheManager using the diskStorePath "C:\DOCUME~1\kurumin\CONFIG~1\Temp\" which is already used by an existing CacheManager. The source of the configuration was classpath.  
        at org.hibernate.cache.EhCacheProvider.start(EhCacheProvider.java:133)  
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:180)  
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1213)  
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:631)  
        at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:760)  
        at org.hibernate.ejb.Ejb3Configuration.createFactory(Ejb3Configuration.java:151)  
        at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:205)  

Meu persistence.xml é este
view plaincopy to clipboardprint?

   <?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="jurisprudenciaPersistenceUnit">  
           <provider>org.hibernate.ejb.HibernatePersistence</provider>  
     
     
           <properties>  
               <property name="hibernate.archive.autodetection"  
                   value="class" />  
     
               <property name="hibernate.dialect"  
                   value="org.hibernate.dialect.Oracle10gDialect" />  
     
               <property name="hibernate.connection.driver_class"  
                   value="oracle.jdbc.OracleDriver" />  
               <property name="hibernate.default_schema" value="user1" />  
     
               <property name="hibernate.connection.url"  
                   value="jdbc:oracle:thin:@127.0.0.1:1521:DSV" />  
               <property name="hibernate.connection.username"  
                   value="user1" />  
               <property name="hibernate.connection.password"  
                   value="1234" />  
     
     
           </properties>  
       </persistence-unit>  
   </persistence>  

O sistema funciona corretamente para uma única conexão. Alguém poderia me ajudar? Além disso, como posso usar Pool de Conexões e JPA (com Hibernate e Tomcat)?

O que eu fiz:

Tenho duas conexões com banco de dados distintos, um local e outro remoto e adicionei o descritor para ambos em um mesmo persistence.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;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"&gt;
  &lt;persistence-unit name="TESTE1" transaction-type="RESOURCE_LOCAL"&gt;
    &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXX&lt;/class&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXXX&lt;/class&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXXXX&lt;/class&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXXXXX&lt;/class&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXXXXXX&lt;/class&gt;
    &lt;properties&gt;
      &lt;property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://servidor/bd_teste"/&gt;
      &lt;property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/&gt;
      &lt;property name="hibernate.connection.password" value="seu password"/&gt;
      &lt;property name="hibernate.connection.username" value="seu username"/&gt;
      &lt;property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/&gt;
      &lt;property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/&gt;
      &lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt;
    &lt;/properties&gt;
  &lt;/persistence-unit&gt;
  &lt;persistence-unit name="TESTE2" transaction-type="RESOURCE_LOCAL"&gt;
    &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXX&lt;/class&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXXX&lt;/class&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXXXX&lt;/class&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXXXXX&lt;/class&gt;
    &lt;class&gt;br.gov.ba.cedasc.ols.model.XXXXXXX&lt;/class&gt;
    &lt;properties&gt;
      &lt;property name="hibernate.connection.url" value="jdbc:derby:/banco;create=true"/&gt;
      &lt;property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver"/&gt;
      &lt;property name="hibernate.connection.password" value="sa"/&gt;
      &lt;property name="hibernate.connection.username" value=""/&gt;
      &lt;property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/&gt;
      &lt;property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/&gt;
      &lt;property name="hibernate.show_sql" value="false"/&gt;
      &lt;property name="hibernate.format_sql" value="false"/&gt;
      &lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt;
    &lt;/properties&gt;
  &lt;/persistence-unit&gt;
&lt;/persistence&gt;

Depois disso eu crio dois EntityManager distintos, um passando cada nome de persistência diferente, um para TESTE1 outro para TESTE2.

        //cria objetos de persistência para ambos os bancos.
        emfRemote = Persistence.createEntityManagerFactory("TESTE1");
        emfLocal = Persistence.createEntityManagerFactory("TESTE2");
        
        emRemote = emfRemote.createEntityManager();
        emLocal = emfLocal.createEntityManager();
.
.
.

obrigado Grinvon

up