[javasf] Varias unidades persistencia OFF-TOPIC

40 views
Skip to first unread message

Marcelo Preis Ferreira

unread,
Apr 4, 2011, 10:49:58 AM4/4/11
to jav...@googlegroups.com
Help,

Tenho 2 unidades de pesistecia, mysql e postgres. mesmo projeto.
Tudo usando hibernate.

vou coloca duas classes entidades uma de cada banco, respectivamente como a ordem apresenta acima.


// para o mysql
@Entity
@Table( name = "cliente", catalog = "testeindice")
@NamedQueries( { @NamedQuery( name = "Cliente.findAll", query = "SELECT c FROM Cliente c") })
public class Cliente implements Serializable
{

}


//para o banco postgresql
@Entity
@Table( name = "gerente", catalog = "postgres", schema = "public")
@NamedQueries( { @NamedQuery( name = "Gerente.findAll", query = "SELECT g FROM Gerente g") })
public class Gerente implements Serializable
{

}

O que acontece.

Erro quando vou iniciar a unidade de pesistencia. ela tenta usar a class Gerente.
causando um erro na classe
createEntityManagerFactory("mysql")  // lendo a unidade de pesistencia.

Como digo para unidade de pesistecia, através de anotatios que aqquela entidade só pertece a determinada unidade de persistência.


Estou peridido nisso, bem feio mesmo!



David Faulstich

unread,
Apr 4, 2011, 11:22:06 AM4/4/11
to jav...@googlegroups.com, Marcelo Preis Ferreira
As entidades estão no mesmo JAR? Creio que para cada persistence unit você deva especificar as classes de entidade respectivas. Se não, ao subir a unidade, ele irá ler as anotações e tentar subir mapeamento de um banco no outro.

Ou você pode colocar cada entidade em um JAR separado e especificar no persistence.xml o JAR com a opção <jar-file>bleh.jar</jar-file>

   <persistence-unit name="snrd" >
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/PostgresSnrdDS</jta-data-source>
      <!-- The <jar-file> element is necessary if you put the persistence.xml in the WAR and the classes in the JAR -->
      <!--
      <jar-file>../../vehicles.jar</jar-file>
      -->
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="validate"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/snrdEntityManagerFactory"/>
      </properties>
   </persistence-unit>


Ou especificar cada classe:

<class>br.com.entidade.AlgumaEntidade</class> dentro de onde pespecifica o persistence unit. Pode ser logo após <jta-data-source>







--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

Jean Carlos

unread,
Apr 4, 2011, 2:25:08 PM4/4/11
to jav...@googlegroups.com
Ainda não precisei utilizar isso, mas dá para explicitar qual sua persistence Unit com:

@PersistenceContext(unitName="persistencePUXXX") EntityManager em;

[]'ss
--
Att,
Jean Carlos G. Donato
www.donatoinfo.com.br

Marcelo Preis Ferreira

unread,
Apr 4, 2011, 2:41:04 PM4/4/11
to jav...@googlegroups.com
Salve Jean,

Quero ver se eu entendi.
Isso que você me diz:  que tal classe pertence a uma determinada
persistence Unit?

Por exemplo a classe Cliente  pertence a unidade de persistencia mysql
e quando e a classe Gerente pertence ao postgres....

E ele não vai tentar subir as duas nas duas base?



Estou correndo pra testar isso já enquanto isso!

Abraços...

Marcelo Preis Ferreira

unread,
Apr 4, 2011, 2:52:34 PM4/4/11
to jav...@googlegroups.com
Esperança morreu...


Tem alguma sequencia do Anotations para seguir?


da o seguinte erro.

04/04/2011 15:48:35 WARN cfg.SettingsFactory: Could not obtain connection metadata
 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:343)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2308)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:154)
    at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
    at sys.persistence.SysPersistenceManagerMysql.createEntityManagerFactory(SysPersistenceManagerMysql.java:76)
    at sys.dao.MainTeste.<init>(MainTeste.java:13)
    at sys.dao.MainTeste.main(MainTeste.java:28)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:525)
    at java.net.Socket.connect(Socket.java:475)
    at java.net.Socket.<init>(Socket.java:372)
    at java.net.Socket.<init>(Socket.java:215)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:292)
    ... 25 more

Depois mais esse erro

04/04/2011 15:48:36 INFO hbm2ddl.DatabaseMetadata: table not found: gerente
 04/04/2011 15:48:36 ERROR hbm2ddl.SchemaUpdate: Unsuccessful: create table postgres.public.gerente (id bigint not null, email varchar(19), nome varchar(19), primary key (id)) type=InnoDB
 04/04/2011 15:48:36 ERROR hbm2ddl.SchemaUpdate: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.gerente (
        id bigint not null,
        email varchar(19),
        nome v' at line 1
 04/04/2011 15:48:36 INFO hbm2ddl.SchemaUpdate: schema update complete

David Faulstich

unread,
Apr 4, 2011, 3:13:46 PM4/4/11
to jav...@googlegroups.com, Jean Carlos
Então. Depois que ele configurar os vários persistence unitos ele utilizará esta anotação para INJETAR o contexto de persistência que ele desejar.

No caso dele, creio que ao subir as entidades, o persistence unit dele ta utilizando somente as anotações das classes o que faz com que o JPA ache que os bancos possuem as mesmas entidades.

David Faulstich

unread,
Apr 4, 2011, 3:15:48 PM4/4/11
to jav...@googlegroups.com, Marcelo Preis Ferreira
Pelo erro ele tentou subir o pool do MYSQL e deu erro e depois encontrou um erro de mapeamento ao subir as entidades do postgres.

Sobe um persistence unit de cada vez. configure o projeto acessando primeiro o MYSQL e depois vá colocando as entidades do postgre.



2011/4/4 Marcelo Preis Ferreira <preis...@gmail.com>
Reply all
Reply to author
Forward
0 new messages