On Mon, Oct 8, 2012 at 5:54 PM, Douglas Campos <span dir="ltr">&lt;<a href="mailto:qmx@redhat.com" target="_blank">qmx@redhat.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im">On Oct 8, 2012, at 8:24 PM, Shane Bryzak wrote:<br>
<br>
&gt; The reason I advised that we base the JPA implementation on Seam&#39;s<br>
&gt; JpaIdentityStore was not one to do with pride, but because its design<br>
&gt; has been shaped by many years of developer feedback.  I&#39;ve got no<br>
&gt; problem with Pedro&#39;s code (I think it&#39;s quite good actually) however the<br>
&gt; design fails to address a number of requirements.  Let&#39;s go through a<br>
&gt; few of them in more detail:<br>
&gt;<br>
&gt; 1. Hard coded entities<br>
&gt;<br>
&gt; This is a problem for a number of reasons.  First and foremost, it<br>
&gt; doesn&#39;t allow a developer to BYO schema.  Many projects share user<br>
&gt; databases, or are based on legacy systems that cannot be modified.<br>
&gt; There may be strict naming conventions in place for table and column<br>
&gt; names.  It might be simply the case that the developer needs to model<br>
&gt; their schema in a particular way to meet certain business requirements.<br>
&gt; Whatever the reason, it is very clear that we cannot dictate the<br>
&gt; database schema to the developer.  We can certainly make<br>
&gt; recommendations, however this should be done via documentation, and<br>
&gt; possibly in an example.<br>
</div>I&#39;d like to see actual numbers on greenfield vs BYO - because if flexibility means complexity, we need to assure that we&#39;re not hurting 95% because of the 5%<br>
<br>
from my **anedoctal experience**, when adopting a framework, ppl allow for some small changes to accomodate, granted they are small.<br></blockquote><div><br></div><div>From those looking to migrate from Seam 2 to Seam 3 when we first rolled out Seam 3 the fact that the entities had to be coded and in a specific schema was one of the largest issues with Persistence. I agree it adds complexity, but I think it&#39;s one of those things that we simply need to do.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div class="h5">&gt;<br>
&gt; 2. Partitioning<br>
&gt;<br>
&gt; This also stems from having a hard coded schema.  Many projects may<br>
&gt; require users to authenticate against an LDAP directory, but authorize<br>
&gt; against a database.  One of the great ideas from Bolek&#39;s original PLIDM<br>
&gt; implementation was that of FeatureSets, basically metadata which<br>
&gt; reflects which identity management capabilities a particular<br>
&gt; IdentityStore implementation supports.  It allows us to store users in<br>
&gt; one identity store, and group and role memberships in another.  Also,<br>
&gt; what happens when an application wants to be purely LDAP based, does<br>
&gt; Hibernate still try to create (or expect the existence of) the<br>
&gt; corresponding tables for the hard coded entity beans?  What if there is<br>
&gt; no database?<br>
&gt;<br>
&gt; 3. Caching<br>
&gt;<br>
&gt; This particular feature isn&#39;t present in Seam, however the intent is to<br>
&gt; support it in PicketLink.  To summarise, rather than creating a new<br>
&gt; User, Group or Role instance (or their various memberships) every single<br>
&gt; time the IdentityStore would normally need to do this, we use a single<br>
&gt; cache (distributed in the case of clustered applications) to store these<br>
&gt; identity objects and perform the lookup from the cache instead.  This<br>
&gt; isn&#39;t possible to achieve when we have hard coded entities that<br>
&gt; implement the identity model interfaces.  This feature requires an<br>
&gt; intricate coupling between IdentityManager, IdentityStore and the cache<br>
&gt; implementation.<br>
&gt;<br>
&gt; 4. CDI awareness<br>
&gt;<br>
&gt; We need to develop this module so that it will run in an SE environment<br>
&gt; so that the AS team (and others) can use it, however we need to also<br>
&gt; keep in mind that we need to integrate it with CDI, and the design<br>
&gt; should reflect that.  JPACallback and JPATemplate seem to add<br>
&gt; unnecessary complexity which in the end still boils down to one<br>
&gt; EntityManager instance per JPAIdentityStore.  I honestly think the<br>
&gt; JPAIdentityStore implementation should be stateless, in that one<br>
&gt; instance can service multiple (concurrent) requests (not to mention that<br>
&gt; configuration is an expensive operation).  We also need to also keep in<br>
&gt; mind that the EntityManager could have any type of scope, with the most<br>
&gt; obvious ones being request or conversation scoped.<br>
&gt;<br>
&gt; I&#39;m happy to discuss these further, however I hope that it&#39;s convinced<br>
&gt; everyone that we need to reconsider the current design.<br>
&gt;<br>
&gt; Shane<br>
&gt;<br>
&gt;<br>
&gt; On 09/10/12 02:30, Anil Saldhana wrote:<br>
&gt;&gt; I want to offer continued discussion on the JPA implementation in the<br>
&gt;&gt; IDM project.<br>
&gt;&gt;<br>
&gt;&gt; The work that Pedro did is restored here in the following workspace:<br>
&gt;&gt; <a href="https://github.com/picketlink/picketlink-idm-restored" target="_blank">https://github.com/picketlink/picketlink-idm-restored</a><br>
&gt;&gt;<br>
&gt;&gt; A testcase that is useful for JPA implementation in IDM is:<br>
&gt;&gt; <a href="https://github.com/picketlink/picketlink-idm-restored/blob/master/impl/src/test/java/org/picketlink/test/idm/internal/mgr/DefaultJPAIdentityManagerTestCase.java" target="_blank">https://github.com/picketlink/picketlink-idm-restored/blob/master/impl/src/test/java/org/picketlink/test/idm/internal/mgr/DefaultJPAIdentityManagerTestCase.java</a><br>


&gt;&gt;<br>
&gt;&gt; It is the exact mirror of the LDAP implementation:<br>
&gt;&gt; <a href="https://github.com/picketlink/picketlink-idm-restored/blob/master/impl/src/test/java/org/picketlink/test/idm/internal/mgr/DefaultLDAPIdentityManagerTestCase.java" target="_blank">https://github.com/picketlink/picketlink-idm-restored/blob/master/impl/src/test/java/org/picketlink/test/idm/internal/mgr/DefaultLDAPIdentityManagerTestCase.java</a><br>


&gt;&gt;<br>
&gt;&gt; These two implementations have very minimal user configuration.<br>
&gt;&gt;<br>
&gt;&gt; The challenge is when users bring in complex database schemas and LDAP<br>
&gt;&gt; DITs into operation.  But the goal of balancing complexity with<br>
&gt;&gt; usability is a tough one.<br>
&gt;&gt;<br>
&gt;&gt; On 09/06/2012 10:13 AM, Anil Saldhana wrote:<br>
&gt;&gt;&gt; Similar challenges exist for LDAP bindings also, since user LDAP DITs<br>
&gt;&gt;&gt; may be different.  But we have to balance complexity with usability. :)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On 09/06/2012 07:37 AM, Pedro Igor Silva wrote:<br>
&gt;&gt;&gt;&gt; Ok. I&#39;ll take a look how he took care of that.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Regards.<br>
&gt;&gt;&gt;&gt; Pedro Igor<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ----- Original Message -----<br>
&gt;&gt;&gt;&gt; From: &quot;Anil Saldhana&quot; &lt;<a href="mailto:Anil.Saldhana@redhat.com">Anil.Saldhana@redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt; To: <a href="mailto:security-dev@lists.jboss.org">security-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt; Sent: Wednesday, September 5, 2012 6:52:35 PM<br>
&gt;&gt;&gt;&gt; Subject: [security-dev] PicketLink IDM JPA Identity Store<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Pedro,<br>
&gt;&gt;&gt;&gt;      Shane just referred me to the following:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; <a href="https://github.com/seam/security/blob/develop/impl/src/main/java/org/jboss/seam/security/management/picketlink/JpaIdentityStore.java" target="_blank">https://github.com/seam/security/blob/develop/impl/src/main/java/org/jboss/seam/security/management/picketlink/JpaIdentityStore.java</a><br>


&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Can you adapt your work to incorporate all facets of this Seam work?<br>
&gt;&gt;&gt;&gt; Shane says users have varying db schema structures and the JPA<br>
&gt;&gt;&gt;&gt; implementation in seam3 took care of the nuances.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Regards,<br>
&gt;&gt;&gt;&gt; Anil<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; security-dev mailing list<br>
&gt;&gt; <a href="mailto:security-dev@lists.jboss.org">security-dev@lists.jboss.org</a><br>
&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/security-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/security-dev</a><br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; security-dev mailing list<br>
&gt; <a href="mailto:security-dev@lists.jboss.org">security-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/security-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/security-dev</a><br>
<br>
</div></div>-- qmx<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
_______________________________________________<br>
security-dev mailing list<br>
<a href="mailto:security-dev@lists.jboss.org">security-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/security-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/security-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Jason Porter<br><a href="http://lightguard-jp.blogspot.com" target="_blank">http://lightguard-jp.blogspot.com</a><br><a href="http://twitter.com/lightguardjp" target="_blank">http://twitter.com/lightguardjp</a><br>

<br>Software Engineer<br>Open Source Advocate<br>Author of Seam Catch - Next Generation Java Exception Handling<br><br>PGP key id: 926CCFF5<br>PGP key available at: <a href="http://keyserver.net" target="_blank">keyserver.net</a>, <a href="http://pgp.mit.edu" target="_blank">pgp.mit.edu</a><br>