On Sun, Mar 12, 2017 at 11:23 AM, Johann Nallathamby <[email protected]> wrote:
> > > On Sun, Mar 12, 2017 at 10:48 AM, Harsha Thirimanna <[email protected]> > wrote: > >> On Sun, Mar 12, 2017 at 8:42 AM, Harsha Thirimanna <[email protected]> >> wrote: >> >>> >>> >>> On Sat, Mar 11, 2017 at 11:46 PM, Johann Nallathamby <[email protected]> >>> wrote: >>> >>>> Why can't we simply re-initialize the User object with the correct >>>> identity store when it is deserialized, using the >>>> >>>> readObject() method? >>>> >>>> >>> How we provide the RealmService to readObject method in User class ? >>> >> >> I could provide the RealmService to the User class within identity.mgt >> component by using DataHolder and could solve this restore problem by >> implementing readObject() method. I tested this by caching and using from >> identity.gateway and worked fine without having any issue. We can just call >> getClaim API without knowing whether it is coming from Cached or not. >> >> This is the method in User class. WDYT ? Do we have to consider any other >> aspect ? >> > > This is what I also meant. AFAIK it shouldn't be a problem. > Yes, We will see Thanuja/Ishara responses as well and will send PR for that. > /** >> * Since, IdentityStore is transient, If some one serialize this User >> object, we have to restore the IdentityStore >> * when the User object get deserialize. >> * >> * @param ois ObjectInputStream >> * @throws ClassNotFoundException >> * @throws IOException >> */ >> private void readObject(ObjectInputStream ois) throws >> ClassNotFoundException, IOException{ >> >> //Restoring the values in default order. >> domainName = (String)ois.readObject(); >> state = (String)ois.readObject(); >> uniqueUserId = (String)ois.readObject(); >> >> //Restore the IdentityStore >> RealmService realmService = >> IdentityMgtDataHolder.getInstance().getRealmService(); >> identityStore = realmService.getIdentityStore(); >> >> } >> >> >> >> >>> >>> >>>> On Sat, Mar 11, 2017 at 10:41 PM, Jayanga Kaushalya <[email protected]> >>>> wrote: >>>> >>>>> Hi Harsha, >>>>> >>>>> Yes I understand. Either you have to check whether the Identity Store >>>>> is null in the User object or we should change each method in the User >>>>> class which uses Identity Store to throw custom checked exception when the >>>>> Identity Store is null and handle it accordingly when using User object. >>>>> Personally I am +1 for the second approach. Please advice if there are any >>>>> better approaches. >>>>> >>>> >>> As Thanuja said, we have to think about why we need to cache complete >>> User object as it is, because that is not expected by design. I am not >>> sure it is totally OK. >>> But in that case, instead of storing complete User object, we have to >>> either store user unique id only or writing our own wrapper to User class >>> and use >>> >>> readObject() to restore the IdentityStore as Johan suggested. To that we >>> can provide RealmService by using a ServiceHolder directly within our own >>> component. >>> >>> >>> >>> >>> >>>> >>>>> Thanks! >>>>> >>>>> *Jayanga Kaushalya* >>>>> Software Engineer >>>>> Mobile: +94777860160 <+94%2077%20786%200160> >>>>> WSO2 Inc. | http://wso2.com >>>>> lean.enterprise.middleware >>>>> >>>>> On Sat, Mar 11, 2017 at 9:27 PM, Harsha Thirimanna <[email protected]> >>>>> wrote: >>>>> >>>>>> Hi Jayanga, >>>>>> >>>>>> Yes, that is possible to do and I felt it as a workaround to instead >>>>>> of calling getClaim API in user object. >>>>>> But at once i didn't feel that i can't call getClaim API because i >>>>>> don't know whether that User object is coming from Cache or not. It can >>>>>> be >>>>>> cached by different component even. >>>>>> Is that make sense to provide such API in user object if it not >>>>>> possible to give the result all the time in sameway. We have to make it >>>>>> consistent. Because , the developer has to know whether this User object >>>>>> came from Cache or not. If it is from cache, then developer has to get >>>>>> the >>>>>> claims by using RealmService again. >>>>>> >>>>>> *Harsha Thirimanna* >>>>>> *Associate Tech Lead | WSO2* >>>>>> >>>>>> Email: [email protected] >>>>>> Mob: +94715186770 <+94%2071%20518%206770> >>>>>> Blog: http://harshathirimanna.blogspot.com/ >>>>>> Twitter: http://twitter.com/harshathirimann >>>>>> Linked-In: linked-in: http://www.linkedin.com/pub/ha >>>>>> rsha-thirimanna/10/ab8/122 >>>>>> <http://wso2.com/signature> >>>>>> >>>>>> On Sat, Mar 11, 2017 at 8:49 PM, Hasintha Indrajee <[email protected] >>>>>> > wrote: >>>>>> >>>>>>> Hi Jayanga, >>>>>>> >>>>>>> So what happens if we want to store user objects and then later if >>>>>>> we want to retrieve user objects and try to access claims ? . Here we >>>>>>> are >>>>>>> storing user objects in authentication context, not in the identity >>>>>>> store. >>>>>>> And how are we storing user objects in the cache when the instance of >>>>>>> identity store is neither serializable nor transient ? >>>>>>> >>>>>>> On Sat, Mar 11, 2017 at 8:34 PM, Jayanga Kaushalya < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Hi Harsha, >>>>>>>> >>>>>>>> It was designed to be like that. User object will be cached in the >>>>>>>> IdentityStore. So when you retrieving the user object from >>>>>>>> IdentityStore >>>>>>>> again, it will be most probably from cache instead of connector. >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>>> *Jayanga Kaushalya* >>>>>>>> Software Engineer >>>>>>>> Mobile: +94777860160 <+94%2077%20786%200160> >>>>>>>> WSO2 Inc. | http://wso2.com >>>>>>>> lean.enterprise.middleware >>>>>>>> >>>>>>>> On Sat, Mar 11, 2017 at 7:41 PM, Harsha Thirimanna < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> Hi All, >>>>>>>>> >>>>>>>>> In identity gateway, we have to cache the User object that is >>>>>>>>> retrieved from user core within the authentication context and session >>>>>>>>> context. After some times we have to get that user object and want to >>>>>>>>> get >>>>>>>>> the claims since it has the claim API within user object itself. But >>>>>>>>> because of the IdentityStore is non Serializable and make it >>>>>>>>> transient, it will not stored with the User object when it >>>>>>>>> cached, so we can't call the getCalim method in User object now. >>>>>>>>> >>>>>>>>> What I did is, get the user unique id from the user object that is >>>>>>>>> stored in the cache and call the RealmService and get the User object >>>>>>>>> again >>>>>>>>> from the user core when it required. Is that the right behaviour that >>>>>>>>> we >>>>>>>>> expect in the new user core design or did I missed something ? >>>>>>>>> >>>>>>>>> >>>>>>>>> public class User implements Serializable { >>>>>>>>> private static final long serialVersionUID = 21578845544565554L; >>>>>>>>> private String uniqueUserId; >>>>>>>>> private String domainName; >>>>>>>>> private String state; >>>>>>>>> private transient IdentityStore identityStore; >>>>>>>>> >>>>>>>>> thanks >>>>>>>>> >>>>>>>>> *Harsha Thirimanna* >>>>>>>>> *Associate Tech Lead | WSO2* >>>>>>>>> >>>>>>>>> Email: [email protected] >>>>>>>>> Mob: +94715186770 <+94%2071%20518%206770> >>>>>>>>> Blog: http://harshathirimanna.blogspot.com/ >>>>>>>>> Twitter: http://twitter.com/harshathirimann >>>>>>>>> Linked-In: linked-in: http://www.linkedin.com/pub/ha >>>>>>>>> rsha-thirimanna/10/ab8/122 >>>>>>>>> <http://wso2.com/signature> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Architecture mailing list >>>>>>>> [email protected] >>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Hasintha Indrajee >>>>>>> WSO2, Inc. >>>>>>> Mobile:+94 771892453 <+94%2077%20189%202453> >>>>>>> >>>>>>> >>>>>> >>>>>> *Harsha Thirimanna* >>>>>> *Associate Tech Lead | WSO2* >>>>>> >>>>>> Email: [email protected] >>>>>> Mob: +94715186770 <+94%2071%20518%206770> >>>>>> Blog: http://harshathirimanna.blogspot.com/ >>>>>> Twitter: http://twitter.com/harshathirimann >>>>>> Linked-In: linked-in: http://www.linkedin.com/pub/ha >>>>>> rsha-thirimanna/10/ab8/122 >>>>>> <http://wso2.com/signature> >>>>>> >>>>>> On Sat, Mar 11, 2017 at 8:49 PM, Hasintha Indrajee <[email protected] >>>>>> > wrote: >>>>>> >>>>>>> Hi Jayanga, >>>>>>> >>>>>>> So what happens if we want to store user objects and then later if >>>>>>> we want to retrieve user objects and try to access claims ? . Here we >>>>>>> are >>>>>>> storing user objects in authentication context, not in the identity >>>>>>> store. >>>>>>> And how are we storing user objects in the cache when the instance of >>>>>>> identity store is neither serializable nor transient ? >>>>>>> >>>>>>> On Sat, Mar 11, 2017 at 8:34 PM, Jayanga Kaushalya < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Hi Harsha, >>>>>>>> >>>>>>>> It was designed to be like that. User object will be cached in the >>>>>>>> IdentityStore. So when you retrieving the user object from >>>>>>>> IdentityStore >>>>>>>> again, it will be most probably from cache instead of connector. >>>>>>>> >>>>>>>> Thanks! >>>>>>>> >>>>>>>> *Jayanga Kaushalya* >>>>>>>> Software Engineer >>>>>>>> Mobile: +94777860160 <+94%2077%20786%200160> >>>>>>>> WSO2 Inc. | http://wso2.com >>>>>>>> lean.enterprise.middleware >>>>>>>> >>>>>>>> On Sat, Mar 11, 2017 at 7:41 PM, Harsha Thirimanna < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> Hi All, >>>>>>>>> >>>>>>>>> In identity gateway, we have to cache the User object that is >>>>>>>>> retrieved from user core within the authentication context and session >>>>>>>>> context. After some times we have to get that user object and want to >>>>>>>>> get >>>>>>>>> the claims since it has the claim API within user object itself. But >>>>>>>>> because of the IdentityStore is non Serializable and make it >>>>>>>>> transient, it will not stored with the User object when it >>>>>>>>> cached, so we can't call the getCalim method in User object now. >>>>>>>>> >>>>>>>>> What I did is, get the user unique id from the user object that is >>>>>>>>> stored in the cache and call the RealmService and get the User object >>>>>>>>> again >>>>>>>>> from the user core when it required. Is that the right behaviour that >>>>>>>>> we >>>>>>>>> expect in the new user core design or did I missed something ? >>>>>>>>> >>>>>>>>> >>>>>>>>> public class User implements Serializable { >>>>>>>>> private static final long serialVersionUID = 21578845544565554L; >>>>>>>>> private String uniqueUserId; >>>>>>>>> private String domainName; >>>>>>>>> private String state; >>>>>>>>> private transient IdentityStore identityStore; >>>>>>>>> >>>>>>>>> thanks >>>>>>>>> >>>>>>>>> *Harsha Thirimanna* >>>>>>>>> *Associate Tech Lead | WSO2* >>>>>>>>> >>>>>>>>> Email: [email protected] >>>>>>>>> Mob: +94715186770 <+94%2071%20518%206770> >>>>>>>>> Blog: http://harshathirimanna.blogspot.com/ >>>>>>>>> Twitter: http://twitter.com/harshathirimann >>>>>>>>> Linked-In: linked-in: http://www.linkedin.com/pub/ha >>>>>>>>> rsha-thirimanna/10/ab8/122 >>>>>>>>> <http://wso2.com/signature> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Architecture mailing list >>>>>>>> [email protected] >>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Hasintha Indrajee >>>>>>> WSO2, Inc. >>>>>>> Mobile:+94 771892453 <+94%2077%20189%202453> >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>>> >>>> -- >>>> Thanks & Regards, >>>> >>>> *Johann Dilantha Nallathamby* >>>> Technical Lead & Product Lead of WSO2 Identity Server >>>> Governance Technologies Team >>>> WSO2, Inc. >>>> lean.enterprise.middleware >>>> >>>> Mobile - *+94777776950* >>>> Blog - *http://nallaa.wordpress.com <http://nallaa.wordpress.com>* >>>> >>> >>> >> > > > -- > Thanks & Regards, > > *Johann Dilantha Nallathamby* > Technical Lead & Product Lead of WSO2 Identity Server > Governance Technologies Team > WSO2, Inc. > lean.enterprise.middleware > > Mobile - *+94777776950* > Blog - *http://nallaa.wordpress.com <http://nallaa.wordpress.com>* >
_______________________________________________ Architecture mailing list [email protected] https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
