Thanks Scott. I managed to retreive information from 2 db with EntityManagerFactory associated correctly with the good database, thanks to <jta-data-source> parameter in persistence.xml.
But for updating the database the factory is useless and I need to use a global injected EntityManager with a global injected UserTransaction (with the factory the database is not updated) @Inject @Named("adlresintestunit1") EntityManager m_ejb1; @Inject @Named("adlresintestunit2") EntityManager m_ejb2; @Inject UserTransaction m_ut; The data is correctly inserted in the good database, but despite the m_ut.commit(), there is an exception at the end of the http request handling : [2014-01-10 08:39:38.227] {resin-port-8000-69} java.lang.IllegalStateException: Resource UserConnection[ManagedConnectionImpl[jdbc/adlresintest1.d0.0]] was not closed. Applications must close all resources in a finally block. at com.caucho.transaction.UserTransactionImpl.clearDanglingResources(UserTransactionImpl.java:470) at com.caucho.transaction.UserTransactionImpl.abortTransaction(UserTransactionImpl.java:423) at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:175) at com.caucho.server.webapp.AccessLogFilterChain.doFilter(AccessLogFilterChain.java:95) at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:289) at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:838) at com.caucho.network.listen.TcpSocketLink.dispatchRequest(TcpSocketLink.java:1346) at com.caucho.network.listen.TcpSocketLink.handleRequest(TcpSocketLink.java:1302) at com.caucho.network.listen.TcpSocketLink.handleRequestsImpl(TcpSocketLink.java:1286) at com.caucho.network.listen.TcpSocketLink.handleRequests(TcpSocketLink.java:1194) at com.caucho.network.listen.TcpSocketLink.handleAcceptTaskImpl(TcpSocketLink.java:993) at com.caucho.network.listen.ConnectionTask.runThread(ConnectionTask.java:117) at com.caucho.network.listen.ConnectionTask.run(ConnectionTask.java:93) at com.caucho.network.listen.SocketLinkThreadLauncher.handleTasks(SocketLinkThreadLauncher.java:169) at com.caucho.network.listen.TcpSocketAcceptThread.run(TcpSocketAcceptThread.java:61) at com.caucho.env.thread2.ResinThread2.runTasks(ResinThread2.java:173) at com.caucho.env.thread2.ResinThread2.run(ResinThread2.java:118) I put my full small sample here : http://www.realty-property.com/zdev/31-testmultidb.zip Thanks for any help. On 09/01/2014 18:59, Scott Ferguson wrote: > On 1/3/14, 5:15 AM, Riccardo Cohen wrote: >> Hello >> I will soon have more than one mysql server. I want to use one server >> for read requests of static data, the other for read/write requests of >> dynamic data. It works for sql requests through datasource, but I cannot >> find how to do it with ejb manager. >> >> In my resin.xml I have this : >> >> <database jndi-name="jdbc/adlresintest"> >> ... >> </database> >> <ejb-server data-source="jdbc/adlresintest" >> create-database-schema="false" >> jndi-name="ejb"/> >> <database jndi-name="jdbc/adlresintest2"> >> ... >> </database> >> <ejb-server data-source="jdbc/adlresintest2" >> create-database-schema="false" >> jndi-name="ejb2"/> >> >> In persistence.xml : >> >> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> >> <persistence-unit name="adlresintestunit"> >> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> >> <class>adlresintest.Adluser</class> >> <exclude-unlisted-classes /> >> <properties> >> <property name="eclipselink.ddl-generation.output-mode" >> value="database" /> >> <property name="eclipselink.weaving.fetchgroups" value="false"/> >> </properties> >> </persistence-unit> >> </persistence> >> >> In my java code I have this : >> >> @Inject @Named("jdbc/adlresintest") public DataSource >> m_datasource1;// public site >> @Inject @Named("jdbc/adlresintest2") public DataSource >> m_datasource2;// not used for the moment >> @PersistenceUnit(name="adlresintestunit") @Named("ejb") >> EntityManagerFactory ejbfactory1; >> @PersistenceUnit(name="adlresintestunit") @Named("ejb2") >> EntityManagerFactory ejbfactory2; >> >> >> When using datasource1 or 2 I access the correct database. But when >> using ejbfactory1 or 2, only the second database is accessed. The >> association created with "jndi-name" and @Named() works for >> DataSource/<database> but not for EntityManagerFactory/<ejb-server>. >> >> I also tried to use composite persistence unit as written here : >> http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Composite_Persistence_Units >> but I could not find the good configuration to do it, the tag >> <jta-data-source> was not accepted. I could not find in >> http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/persistenceproperties_ref.htm >> which property to set for the datasource. > > The configuration should be <jta-data-source> and <non-jta-data-source> > in the <persistence-unit>: > > <persistence ...> > <persistence-unit name="test" ...> > <jta-data-source>jdbc/adlresintest</jta-data-source> > ... > </persistence-unit> > <persistence-unit name="test2" ...> > <jta-data-source>jdbc/adlresintest2</jta-data-source> > ... > > Since the jta-data-source tag is part of the JPA spec, it should be > recognized by eclipse-link. > > -- Scott > >> >> Thanks a lot. >> > > > _______________________________________________ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest > -- Riccardo Cohen +33 (0)6 09 83 64 49 Société Realty-Property.com 16 rue de Belle Isle 37100 Tours France <http://www.appartement-maison.fr> _______________________________________________ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest