<div><font face="verdana,sans-serif">Hello Esteban,</font></div>
<div><font face="verdana,sans-serif"> </font></div>
<div><font face="verdana,sans-serif">Thanks for your invite to contribute. </font></div>
<div><font face="verdana,sans-serif">Actually I really like Drools and belive it has most of the things required for a successfull product.</font></div>
<div><font face="verdana,sans-serif"> </font></div>
<div><font face="verdana,sans-serif">Right now(for 1.5 months) I cannot do main stream contribution but I promise that whatever I do to integrate or enhance Guvnor for our custom requirements I will make it available to all..</font></div>

<div><font face="verdana,sans-serif"> </font></div>
<div><font face="verdana,sans-serif">I hope the stuff I have done might be useful for somebody. </font></div>
<div><font face="verdana,sans-serif">For drools-guvnor users, primary purpose is to integrate it into their custom app.(if they don&#39;t want to deploy guvnor separately)</font></div>
<div><font face="verdana,sans-serif"> </font></div>
<div><font face="verdana,sans-serif">1. Merging of Guvnor into a cutsom app is not a very difficult tasks. One needs to copy all the Guvnor resources into the respective folders of the cutsomApp. Also the web.xml has to be updated with the Guvnor stuff.</font></div>

<div><font face="verdana,sans-serif">Note: My custom app was based on spring MVC. No GWT but it fits decently.</font></div>
<div><font face="verdana,sans-serif"> </font></div>
<div><font face="verdana,sans-serif">2. Authentication &amp; Authorization:</font></div>
<div><font face="verdana,sans-serif">    The general requirment would be to do authentication &amp; authorization in the Guvnor based on the custom apps.</font><font face="verdana,sans-serif"> Update the components.xml with customAuthenticator &amp; role based permission as true.</font></div>

<div><font face="verdana,sans-serif">(There are other better ways to solve the problem like SSO, SAML but since I was able to merge the apps so I depended on the HttpSession.)</font></div>
<div><font face="verdana,sans-serif"> </font></div>
<div><font face="verdana,sans-serif">From a link in my custom app I am logging into the guvnor by silent authentication. The session can be accessed in your customAuthenticator by  </font></div>
<div><font face="courier new,monospace">AdminContext authenticatedAdminInfo = (AdminContext)Contexts.getSessionContext().get(&quot;adminSession&quot;);</font></div>
<div><font face="courier new,monospace"> </font></div>
<div><font face="verdana,sans-serif">I have written a CustomIntegrator class which does the implicit package creation, assign role to a user on a package.</font></div>
<div><font face="verdana,sans-serif"></font> </div>
<div><font face="verdana,sans-serif">RepositoryService instance can be created by </font></div>
<div><font face="courier new,monospace"><font size="2">(ServiceImplementation) Component.<i>getInstance</i>( </font><font color="#2a00ff" size="2"><font color="#2a00ff" size="2">&quot;org.drools.guvnor.client.rpc.</font></font><u><font size="2">RepositoryService</font></u></font><font face="courier new,monospace"><font color="#2a00ff" size="2"><font color="#2a00ff" size="2">&quot;</font></font><font size="2"> );</font></font></div>

<div><font size="2"><font face="courier new,monospace">
<div><font face="verdana,sans-serif"></font> </div>
<div><font face="verdana,sans-serif">RoleBasedPermissionStore instance can be created by </font></div>
<div>RoleBasedPermissionStore store = (RoleBasedPermissionStore) Component.<i>getInstance</i>(</div></font></font><font face="courier new,monospace"><font color="#2a00ff" size="2"><font color="#2a00ff" size="2">&quot;org.drools.guvnor.server.security.RoleBasedPermissionStore&quot;</font></font><font size="2">);</font></font></div>

<div><font face="courier new,monospace"></font> </div>
<div><font face="courier new,monospace">store.addRoleBasedPermissionForTesting(userName, new RoleBasedPermission(userName,<br>      RoleTypes.PACKAGE_ADMIN, orgName, null));</font></div>
<div> </div>
<div> </div>
<div>------------------------------------------------------------------------code snippet---------------------------------------------------------------------------------</div>
<div>package org.drools.sample;</div>
<div>import javax.security.auth.Subject;<br>import javax.security.auth.login.LoginException;<br>import javax.servlet.http.HttpSession;</div>
<div>import <a href="http://org.jboss.seam.annotations.Name">org.jboss.seam.annotations.Name</a>;<br>import org.jboss.seam.contexts.Contexts;<br>import org.jboss.seam.security.Identity;<br>import org.slf4j.Logger;<br>import org.slf4j.LoggerFactory;</div>

<div>import com.sample.admin.framework.adminmgmt.PrincipalAdmin;<br>import com.sample.admin.framework.policy.AdminContext;<br>import com.sample.admin.framework.web.controller.AbstractCygnetController;</div>
<div> </div>
<div>@Name(&quot;sampleAuthenticator&quot;)<br>public class SampleAuthenticator {</div>
<div> private static final Logger log = LoggerFactory.getLogger( SampleAuthenticator.class );<br> <br>  /**<br>     * @param session<br>     * @return<br>     */<br>    public boolean authenticate() {<br>        <a href="http://log.info">log.info</a>( &quot;User logged in via sample admin login module .&quot;);<br>
        AdminContext authenticatedAdminInfo = (AdminContext)Contexts.getSessionContext().get(AbstractCygnetController.SESSION_ADMIN_CONTEXT);<br>        if(authenticatedAdminInfo == null)<br>         return false;//no session available for the user<br>
        PrincipalAdmin principalAdmin = authenticatedAdminInfo.getPrincipal();<br>        if(&quot;ACTIVE&quot;.equalsIgnoreCase(principalAdmin.getAuthStatus())) {<br>          Identity.instance().getCredentials().setUsername( principalAdmin.getUserID() );<br>
          //CallbackHandler callbak = Identity.instance().getCredentials().createCallbackHandler();<br>          //callbak.handle(callbacks);<br>          SamplePrincipal[] authPrincipals = new SamplePrincipal[3];<br>          //Adding username to the subject<br>
          authPrincipals[0] = new SamplePrincipal(principalAdmin.getUserID());<br>             //Adding organization to the subject<br>             authPrincipals[1] = new SamplePrincipal(principalAdmin.getOrgName());<br>
             //Adding role to the subject<br>             authPrincipals[2] = new SamplePrincipal(principalAdmin.getRole().getName());<br>          Subject subject = Identity.instance().getSubject();<br>          for (int i = 0; i &lt; authPrincipals.length; i++) {<br>
                 if(!subject.getPrincipals().contains(authPrincipals[i]))<br>                 {<br>                  subject.getPrincipals().add(authPrincipals[i]);<br>                 }<br>             }<br>          return true;<br>
        }<br>        return false;<br>    }<br>    <br>    /**<br>     * @param session<br>     * @return<br>     */<br>    public boolean sessionAuthenticate(HttpSession session) {<br>        <a href="http://log.info">log.info</a>( &quot;User logged in via sample admin login module .&quot;);<br>
        //AdminContext authenticatedAdminInfo = (AdminContext)session.getAttribute(&quot;adminSession&quot;);<br>        AdminContext authenticatedAdminInfo = (AdminContext) session.getAttribute(AbstractCygnetController.SESSION_ADMIN_CONTEXT);<br>
        if(authenticatedAdminInfo == null)<br>         return false;//no session available for the user<br>        PrincipalAdmin principalAdmin = authenticatedAdminInfo.getPrincipal();<br>        if(&quot;ACTIVE&quot;.equalsIgnoreCase(principalAdmin.getAuthStatus())) {<br>
          Identity.instance().getCredentials().setUsername( principalAdmin.getUserID() );<br>          //CallbackHandler callbak = Identity.instance().getCredentials().createCallbackHandler();<br>          //callbak.handle(callbacks);<br>
          SamplePrincipal[] authPrincipals = new SamplePrincipal[3];<br>          //Adding username to the subject<br>          authPrincipals[0] = new SamplePrincipal(principalAdmin.getUserID());<br>             //Adding organization to the subject<br>
             authPrincipals[1] = new SamplePrincipal(principalAdmin.getOrgName());<br>             //Adding role to the subject<br>             authPrincipals[2] = new SamplePrincipal(principalAdmin.getRole().getName());<br>
             <br>          Subject subject = Identity.instance().getSubject();<br>          for (int i = 0; i &lt; authPrincipals.length; i++) {<br>                 if(!subject.getPrincipals().contains(authPrincipals[i]))<br>
                 {<br>                  subject.getPrincipals().add(authPrincipals[i]);<br>                 }<br>             }<br>        }<br>        <br>        try {<br>         Identity.instance().authenticate();<br>
        } catch ( LoginException e ) {<br>         log.error( &quot;Unable to login.&quot;, e );<br>         return false;<br>        }<br>        return Identity.instance().isLoggedIn();<br>    }<br>}<br> </div>
<div class="gmail_quote">2010/12/23 Esteban Aliverti <span dir="ltr">&lt;<a href="mailto:esteban.aliverti@gmail.com" target="_blank">esteban.aliverti@gmail.com</a>&gt;</span><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">Andrew Waterman and Jervis Liu were working on a REST API for Guvnor: <a href="https://issues.jboss.org/browse/GUVNOR-1080" target="_blank">https://issues.jboss.org/browse/GUVNOR-1080</a> Maybe you can help them. 
<div>In the other hand, I have implemented a way to embedd Guvnor&#39;s editors in external applications: <a href="http://ilesteban.wordpress.com/2010/11/23/guvnor-embed-assets-editor-in-your-application/" target="_blank">http://ilesteban.wordpress.com/2010/11/23/guvnor-embed-assets-editor-in-your-application/</a> </div>

<div><br></div>
<div>Best Regards,<br clear="all"><br>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<br><br>Esteban Aliverti<br>- Developer @ <a href="http://www.plugtree.com/" target="_blank">http://www.plugtree.com </a><br>- Blog @ <a href="http://ilesteban.wordpress.com/" target="_blank">http://ilesteban.wordpress.com</a><br>
<br><br>
<div class="gmail_quote">2010/12/23 Harshit Bapna <span dir="ltr">&lt;<a href="mailto:hrbapna@gmail.com" target="_blank">hrbapna@gmail.com</a>&gt;</span><br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div>
<div></div>
<div>
<div><font face="tahoma,sans-serif">Hello All,</font></div>
<div><font face="tahoma,sans-serif"></font> </div>
<div><font face="tahoma,sans-serif">I am able to successfully integrate Guvnor into my custom app. (based on spring)</font></div>
<div>(<a href="http://drools-java-rules-engine.46999.n3.nabble.com/How-to-integrate-Guvnor-GUI-in-a-test-app-td1595617.html" target="_blank">http://drools-java-rules-engine.46999.n3.nabble.com/How-to-integrate-Guvnor-GUI-in-a-test-app-td1595617.html</a>)</div>

<div><font face="tahoma,sans-serif"></font> </div>
<div><font face="tahoma,sans-serif">I have written some code in the index.jsp which invokes the ServiceImplementation of Guvnor.</font></div>
<div><font face="tahoma,sans-serif">I am observing that RuleRepository object is coming as null.</font></div>
<div><font size="2"><font face="tahoma,sans-serif">Note: Through the integrated app If I hit the Guvnor URL than it is working as normal.</font></font></div>
<div><font size="2"><font face="courier new,monospace"></font></font> </div>
<div><font size="2"><font face="courier new,monospace">private ServiceImplementation getService() {<br> ServiceImplementation impl = new ServiceImplementation();<br> RulesRepository <font color="#990000">repository</font> = impl.getRulesRepository();<br>
 return impl;<br>}</font></font></div>
<div><font face="Courier New"></font> </div>
<div><font face="tahoma,sans-serif">What is the suggested way of using the Guvnor services from the jsp/java ?</font></div>
<div><font face="Courier New"></font> </div>
<div><font face="Courier New"></font> </div><br></div></div>_______________________________________________<br>rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br><br></blockquote></div><br></div><br>_______________________________________________<br>
rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br>