Do you have auto flush on or something? The db shouldn't complain until
flush/commit occurs which is only after all fields are filled in.
On 26 January 2017 at 17:42, Jorge M. <jm85martins(a)gmail.com> wrote:
Bill,
Thank you! I will try to do that!
Cheers,
JM
2017-01-26 15:35 GMT+00:00 Bill Burke <bburke(a)redhat.com>:
> I'm sorry, this usecase fell through the cracks when redesigning the SPI.
>
> I'm guessing you need something that works with registration, REST API,
> and admin console? If so, I think this will work. It will be nasty
> though.
>
> Let's say your provider class name is MyUserStorageProvider.
>
> 1. Define a value object class that implements UserModel and keeps all
> updates in memory. Let's call it UserValueObject.
>
> 2. Define a class that implements the KeycloakTransaction interface.
> This class will be responsible for adding the user to the external store
> just before transaction commit. It will just callback to
> MyUserStorageProvider.
>
> public class AddUserSynchronization implements KeycloakTransaction {
>
> MyUserStorageProvider provider;
>
> UserValueObject valueObject;
>
> public AddUserSynchronization(MyUserStorageProvider provider,
> UserValueObject valueObject) {
>
> this.valueObject = valueObject;
>
> this.provider = provider;
>
> }
>
> public void commit() {
>
> this.provider.addUser(UserValueObject valueObject);
>
> }
>
> }
>
> 3. In your MyUserStorageProvider.addUser(RealmModel realm, String
> usernmae) method, allocate and return the value object and register with
> the KeycloakTransactionManager.
>
>
> public UserModel addUser(RealmModel realm, String username) {
>
> UserValueObject valueObject = new UserValueObject();
>
> StorageId id = new StorageId(providerComponentId, externalIdOfUser);
>
> valueObject.setId(id.getId());
>
> valueObject.setUsername(username);
>
> session.getTransactionManager().enlistPrepare(new
> AddUserSynchronization(this, valueObject));
>
> return valueObject;
>
> }
>
>
> Does this make sense?
>
>
>
> On 1/26/17 6:32 AM, Jorge M. wrote:
> > Hi,
> >
> > It seems that some of the internal SPI's that supported custom
federation
> > development in previous versions are now deprecated.
> > I'm looking at the new examples (jpa and simple) but I'm struggling
with
> > the registration method.
> > My problem is that to use a custom webservice or a jpa implementation,
I
> > need to know the basic user information at that point in order to do
the
> > registration on my federation (name, email, username, ...) as the
schema
> or
> > WS as non nullable / mandatory fields.
> > Is there any way to get that managed data at that point? (In the past I
> > used a solution based on TxAwareLDAPUserModelDelegate)
> >
> > >From the jpa example:
> >
> > @Override
> > public UserModel addUser(RealmModel realm, String username) {
> > UserEntity entity = new UserEntity();
> > entity.setId(UUID.randomUUID().toString());
> > entity.setUsername(username);
> >
> >
> >
> > *//GET first name, last name and email here!!*
> > em.persist(entity);
> > logger.info("added user: " + username);
> > return new UserAdapter(session, realm, model, entity);
> > }
> >
> >
> > Thank you.
> > JM
> > _______________________________________________
> > keycloak-dev mailing list
> > keycloak-dev(a)lists.jboss.org
> >
https://lists.jboss.org/mailman/listinfo/keycloak-dev
>
> _______________________________________________
> keycloak-dev mailing list
> keycloak-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/keycloak-dev
>
_______________________________________________
keycloak-dev mailing list
keycloak-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/keycloak-dev