Produces the emf too, no? Le 27 juil. 2012 18:20, "Martin Kjær Jørgensen" <[email protected]> a écrit :
> On 27-07-2012 08:26, Romain Manni-Bucau wrote: > > Yes normal. Doing it use @inject and not @persistencecontext > > > > -Romain > > Le 27 juil. 2012 07:30, "Martin Kjær Jørgensen" <[email protected]> a écrit : > > > >> On 26-07-2012 15:33, Romain Manni-Bucau wrote: > >>> Hi, > >>> > >>> implementing JPA you can do what you want. > >>> > >>> You get properties of your persistence unit and you can even ignore > >>> datasources if you are not contacting a RDBMS. > >>> > >>> Then do your own logic with these properties. > >>> > >>> Then you can use @persistenceContext as usually. > >>> > >>> - Romain > >>> > >>> > >>> 2012/7/26 Martin Kjær Jørgensen <[email protected]> > >>> > >>>> I'm using the TomEE 1.0.0+ stack developing a JEE6 Web App, and I'm > >>>> looking for a way to make userspecific JTA EntityManager's using CDI > or > >>>> Resource injections. > >>>> > >>>> The reason for this is the users in the system are created in a LDAP > >>>> directory and used by Tomcat (TomEE) and the database server for > >>>> authentication. So after a user has logged in on a JSF form the same > >>>> username and password should be used to make EntityManager's. > >>>> > >>>> It seems that the JPA is designed to use only one username and > password > >>>> for all users of the application. > >>>> > >>>> Have anyone succesfully created a completely user-specific web > >>>> application all the away down to the databaselevel and anywhere else? > >>>> > >>> > >> > >> It doesnt seem so. For instance, if I create a EntityManager with a CDI > >> @Producer method like so (EntityManagerFactory being a private field): > >> > >> @Produces > >> public OpenJPAEntityManager produceEntityManger() { > >> Map p = new HashMap(); > >> p.put("javax.persistence.jdbc.user", "abc"); > >> p.put("javax.persistence.jdbc.password", "abc"); > >> EntityManager em = emf.createEntityManager(p); > >> return em; > >> } > >> > >> ... I get a warnings in my log saying: > >> > >> WARNING - An unrecognized EntityManager property was passed to > >> createEntityManager and will be ignored. Key: > >> "javax.persistence.jdbc.password", Value: "class java.lang.String:abc". > >> WARNING - An unrecognized EntityManager property was passed to > >> createEntityManager and will be ignored. Key: > >> "javax.persistence.jdbc.user", Value: "class java.lang.String:abc". > >> > >> > >> If i provide it with OpenJPA specific properties like so: > >> > >> p.put("openjpa.ConnectionUserName", "abc"); > >> p.put("openjpa.ConnectionPassword", "abc"); > >> p.put("openjpa.Connection2UserName", "abc"); > >> p.put("openjpa.Connection2Password", "abc"); > >> > >> ... I still get warnings, but not for ConnectionUserName and > >> ConnectionPassword: > >> > >> WARNING - An unrecognized EntityManager property was passed to > >> createEntityManager and will be ignored. Key: > >> "openjpa.Connection2Password", Value: "class java.lang.String:abc". > >> WARNING - An unrecognized EntityManager property was passed to > >> createEntityManager and will be ignored. Key: > >> "openjpa.Connection2UserName", Value: "class java.lang.String:abc". > >> > >> Apparently, the EntityManager still uses the username and password from > >> the resource because my persistence code runs without exceptions. It > >> should fail because I provided wrong username and password (abc:abc). > >> > > > > I'm already @Inject'ing EntityManager from my producer class. I'm only > using @PersistenceContext for the EntityManagerFactory. >
