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).