[keycloak-dev] JPA connections provider and multiple transaction support

Bill Burke bburke at redhat.com
Mon Jul 14 10:21:27 EDT 2014


Marek,

If you want to commit earlier thats fine too.

On 7/14/2014 9:42 AM, Stian Thorgersen wrote:
> Yep, all done.
>
> Marek is working on import/export, but he'll need to update that to work with the changes you do to the model so that can be committed after you've finished.
>
> ----- Original Message -----
>> From: "Bill Burke" <bburke at redhat.com>
>> To: "Stian Thorgersen" <stian at redhat.com>
>> Cc: keycloak-dev at lists.jboss.org
>> Sent: Monday, 14 July, 2014 2:35:21 PM
>> Subject: Re: [keycloak-dev] JPA connections provider and multiple transaction support
>>
>> So, are you guys done with your model work?  I can do dig into it now
>> without worrying that it will change entirely in between work days?
>>
>> On 7/14/2014 5:19 AM, Stian Thorgersen wrote:
>>> Committed the final changes to UserProvider, including working Mem, JPA and
>>> Mongo implementations.
>>>
>>> Also, added the JPA and Mongo Connection Providers. With the connection
>>> providers we can now have a single EntityManager instance shared between
>>> ModelProvider (and UserProvider when ready), UserSessionProvider and
>>> Audit.
>>>
>>> Had to change the multiple-transaction stuff that was added to master
>>> because with the connection providers the model (and others) do not
>>> actually start a transaction themselves. Transactional providers are now
>>> required to enlist a transaction if they want to, this won't be common to
>>> do as they should use the connection providers which will do it for them.
>>>
>>> ----- Original Message -----
>>>> From: "Stian Thorgersen" <stian at redhat.com>
>>>> To: "Bill Burke" <bburke at redhat.com>
>>>> Cc: keycloak-dev at lists.jboss.org
>>>> Sent: Monday, 14 July, 2014 9:13:44 AM
>>>> Subject: Re: [keycloak-dev] JPA connections provider and multiple
>>>> transaction support
>>>>
>>>> I had this working, including sharing Jpa/Mongo connection providers.
>>>> Which I
>>>> sent out an email to get feedback for......
>>>>
>>>> ----- Original Message -----
>>>>> From: "Bill Burke" <bburke at redhat.com>
>>>>> To: keycloak-dev at lists.jboss.org
>>>>> Sent: Saturday, 12 July, 2014 12:42:07 AM
>>>>> Subject: Re: [keycloak-dev] JPA connections provider and multiple
>>>>> transaction support
>>>>>
>>>>> Ok, I committed something.
>>>>>
>>>>> * KeycloakSession keeps track of enlisted provider KeycloakTransactions.
>>>>> * KeycloakSession.getTransaction().commit() and rollback() will iterate
>>>>> these enlisted transactions
>>>>> * getProvider() just returns a provider
>>>>> * model() and sessions() creates a ModelProvider or UserSessionProvider
>>>>> and enlists their transactions.
>>>>> * model() and sessions() throw IllegalStateException if
>>>>> KeycloakSession.transaction hasn't started yet.
>>>>> * KeycloakSession has an enlist() method.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On 7/11/2014 6:11 PM, Bill Burke wrote:
>>>>>> Actually I think there is a better way.
>>>>>>
>>>>>> public interface TransactionManaged {
>>>>>>
>>>>>>        KeycloakTransaction getTransaction();
>>>>>> }
>>>>>>
>>>>>> public interface KeycloakSession implements TransactionManaged {}
>>>>>> public interface UserProvider implements TransactionManaged{}
>>>>>>
>>>>>> etc.
>>>>>>
>>>>>>
>>>>>> KeycloakSession.getProvider() will check to see if the provider is
>>>>>> transaction managed.  If KeycloakSession has an active transaction, then
>>>>>> a transaction will be created for that provider and registered with an
>>>>>> internal TM.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 7/11/2014 3:52 PM, Bill Burke wrote:
>>>>>>> Please get this in.  I can't finish with UserProvider split until you
>>>>>>> do.
>>>>>>>
>>>>>>> On 7/11/2014 8:29 AM, Stian Thorgersen wrote:
>>>>>>>> To prevent creating multiple EntityManager's for a single request I've
>>>>>>>> added a JPAConnectionProvider that is used to share an EntityManager
>>>>>>>> instance between multiple providers.
>>>>>>>>
>>>>>>>>        https://github.com/stianst/keycloak/blob/master/connections/jpa/src/main/java/org/keycloak/connections/jpa/DefaultJpaConnectionProviderFactory.java
>>>>>>>>        https://github.com/stianst/keycloak/blob/master/connections/jpa/src/main/java/org/keycloak/connections/jpa/DefaultJpaConnectionProvider.java
>>>>>>>>
>>>>>>>> In the future we could consider adding support for multiple
>>>>>>>> persistence-units, but for now I think we should have a limitation
>>>>>>>> that
>>>>>>>> all JPA providers use the same database/persistence-unit.
>>>>>>>>
>>>>>>>> I've also added some very basic support to KeycloakSession so
>>>>>>>> providers
>>>>>>>> can enlist their transactions with the session:
>>>>>>>>
>>>>>>>>        https://github.com/stianst/keycloak/blob/master/model/api/src/main/java/org/keycloak/models/KeycloakSession.java
>>>>>>>>        https://github.com/stianst/keycloak/blob/master/model/api/src/main/java/org/keycloak/models/KeycloakTransactionManager.java
>>>>>>>>
>>>>>>>> The idea being that a provider when used can enlist its transaction
>>>>>>>> with
>>>>>>>> the session.
>>>>>>>>
>>>>>>>> I've not committed any of this to master as I wanted to have
>>>>>>>> everyone's
>>>>>>>> opinion on it first.
>>>>>>>> _______________________________________________
>>>>>>>> keycloak-dev mailing list
>>>>>>>> keycloak-dev at lists.jboss.org
>>>>>>>> https://lists.jboss.org/mailman/listinfo/keycloak-dev
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Bill Burke
>>>>> JBoss, a division of Red Hat
>>>>> http://bill.burkecentral.com
>>>>> _______________________________________________
>>>>> keycloak-dev mailing list
>>>>> keycloak-dev at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/keycloak-dev
>>>>>
>>>> _______________________________________________
>>>> keycloak-dev mailing list
>>>> keycloak-dev at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/keycloak-dev
>>>>
>>
>> --
>> Bill Burke
>> JBoss, a division of Red Hat
>> http://bill.burkecentral.com
>>

-- 
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com


More information about the keycloak-dev mailing list