Hello Patrick, Thx for the answer. Is it actually recommended to use the same EMF for different URL`s?? I have no choice since I have dynamic URL`s - to which the user can log in.
I have already written my DataSource implementation. According to my requirement I will call my class after the user has give his db and server preference and username , pwd. Can I somehow use this openjpa.ConnectionFactory property to make an EntityManager?? Sounds illogical..huh! Janap Patrick Linskey-2 wrote: > > Yes -- only some configuration properties can be set via the > createEntityManager() call. I forget exactly which they are; I believe > that the JavaDoc for the method in OpenJPAEntityManagerFactory goes > into more detail. > > The connection URL must be constant across the entire EMF. > > > > If you need to use different URLs for different credentials, you might > want to look at writing your own DataSource implementation. You can > then specify the full class name of your DataSource implementation in > the openjpa.ConnectionFactory property. > > Also, bear in mind that OpenJPA's data cache does not partition based > on database credentials, so if the different credentials provide > access to different data sets, you should disable data caching (the > default). > > -Patrick > > On 10/1/07, Janap <[EMAIL PROTECTED]> wrote: >> >> I managed to partially configure the EntityManager >> >> Case 1 : >> >> persistence.xml >> >> <persistence xmlns="http://java.sun.com/xml/ns/persistence" >> version="1.0"> >> <persistence-unit name="myPersistence" >> transaction-type="RESOURCE_LOCAL"> >> <provider> >> org.apache.openjpa.persistence.PersistenceProviderImpl >> </provider> >> <class>test.myClass</class> >> <properties> >> <property name="openjpa.ConnectionURL" >> value="jdbc:oracle:thin:@server:1521:db"/> >> <property name="openjpa.ConnectionDriverName" >> value="oracle.jdbc.driver.OracleDriver"/> >> <property name="openjpa.Log" >> value="DefaultLevel=TRACE,Tool=TRACE"/> >> </properties> >> </persistence-unit> >> </persistence> >> >> and ConnectionManager class >> >> EntityManagerFactory emf = >> Persistence.createEntityManagerFactory("myPersistence"); >> System.out.println("persistence factory setup successfully" + >> emf); >> HashMap myProperties = new HashMap(); >> myProperties.put("openjpa.ConnectionUserName",user); >> myProperties.put("openjpa.ConnectionPassword",pwd); >> >> EntityManager em = emf.createEntityManager(myProperties); >> >> this works without problem, I could also persist one of my entity beans. >> >> Now when I try to remove Connection URL from persistence.xml and move it >> to >> the ConnectionManager class >> >> myProperties.put("openjpa.ConnectionURL","jdbc:oracle:thin:@server:1521:db"); >> it throws an exception saying >> >> <4|false|0.9.6-incubating> >> org.apache.openjpa.persistence.ArgumentException: >> Missing getter for property "ConnectionURL" in type "class >> org.apache.openjpa.persistence.EntityManagerImpl". >> at >> org.apache.openjpa.util.ImplHelper.getGetter(ImplHelper.java:65) >> at >> org.apache.openjpa.util.ImplHelper.getSetter(ImplHelper.java:75) >> at >> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:214) >> at >> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:52) >> at test.ConnectionManager.doGet(ConnectionManager.java:29) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) >> at >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) >> at >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) >> at >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) >> at >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) >> at >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) >> at >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) >> at >> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) >> at >> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667) >> at >> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) >> at >> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) >> at >> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) >> at java.lang.Thread.run(Thread.java:595) >> Caused by: java.lang.NoSuchMethodException: >> org.apache.openjpa.persistence.EntityManagerImpl.getConnectionURL() >> at java.lang.Class.getMethod(Class.java:1581) >> at >> org.apache.openjpa.util.ImplHelper.getGetter(ImplHelper.java:60) >> >> >> >> >> Janap wrote: >> > >> > Thx for the replies. So as I understand , I can create >> > EntityManagerFactory when my server starts by giving it a persistence >> unit >> > name and WITHOUT giving it a username and password which are neccessary >> to >> > make a DB connection? >> > >> > For every user who logs in , i can create an EntityManager by passing >> the >> > connection parameters in the map. This EntityManager, I can either keep >> it >> > in session per user or create everytime a transaction is needed. >> > >> > I will now start making an example and let you know what has happened! >> > >> > Janap >> > >> > >> > >> > Alessandro Ferrucci-3 wrote: >> >> >> >> There is no obligatory contract between the EntityManagerFactory and >> >> whatever container/environment you are in. The EntityManagerFactory >> >> is...just that..a factory of EntityManagers. Read: >> >> >> http://openjpa.apache.org/docs/latest/manual/manual.html#jpa_overview_emfactory_obtainto >> >> see how to retrieve an EntityManager, you must pass in a Map of >> >> attributes that your EntityManager will be configured with to talk to >> the >> >> DB >> >> >> >> >> >> mainly: >> >> >> >> - >> >> >> >> openjpa.ConnectionUserName >> >> - >> >> >> >> openjpa.ConnectionPassword >> >> - >> >> >> >> openjpa.ConnectionRetainMode >> >> - >> >> >> >> openjpa.TransactionMode >> >> - >> >> >> >> openjpa.<property>, where *<property> * is any JavaBean property of >> >> the >> >> >> org.apache.openjpa.persistence.OpenJPAEntityManager<http://openjpa.apache.org/docs/latest/javadoc/org/apache/openjpa/persistence/OpenJPAEntityManager.html>. >> >> >> >> >> >> Also of importance is this: >> >> >> >> >> http://openjpa.apache.org/docs/latest/manual/manual.html#jpa_overview_persistence_xml >> >> >> >> this tells you how to configure a certain factory in non-EE settings. >> >> >> >> >> >> HTH >> >> >> >> Alessandro Ferrucci. >> >> >> >> >> >> >> > >> > >> >> -- >> View this message in context: >> http://www.nabble.com/EntityManagerFactory-configure-tf4547543.html#a12980798 >> Sent from the OpenJPA Users mailing list archive at Nabble.com. >> >> > > > -- > Patrick Linskey > 202 669 5907 > > -- View this message in context: http://www.nabble.com/EntityManagerFactory-configure-tf4547543.html#a12982519 Sent from the OpenJPA Users mailing list archive at Nabble.com.
