[portal-commits] JBoss Portal SVN: r5883 - in trunk: cms/src/main/org/jboss/portal/cms/impl/interceptors cms/src/main/org/jboss/portal/cms/impl/jcr core/src/main/org/jboss/portal/core/aspects/server core/src/main/org/jboss/portal/core/controller/portlet core/src/main/org/jboss/portal/core/model/portal/command core/src/main/org/jboss/portal/core/portlet/cms/admin core/src/main/org/jboss/portal/core/portlet/role core/src/main/org/jboss/portal/core/portlet/test core/src/main/org/jboss/portal/core/portlet/user core/src/resources/portal-cms-sar/META-INF core/src/resources/portal-core-sar/META-INF core/src/resources/portal-core-sar/conf core/src/resources/portal-core-sar/conf/hibernate/user core/src/resources/portal-core-sar/conf/identity core/src/resources/portal-core-war/WEB-INF core/src/resources/portal-samples-war/WEB-INF

portal-commits at lists.jboss.org portal-commits at lists.jboss.org
Sun Dec 17 09:26:32 EST 2006


Author: bdaw
Date: 2006-12-17 09:26:07 -0500 (Sun, 17 Dec 2006)
New Revision: 5883

Added:
   trunk/core/src/resources/portal-core-sar/conf/identity-config.xml
   trunk/core/src/resources/portal-core-sar/conf/identity/
   trunk/core/src/resources/portal-core-sar/conf/identity/ldap_identity-config.xml
   trunk/core/src/resources/portal-core-sar/conf/identity/standardidentity-config.xml
   trunk/core/src/resources/portal-core-sar/conf/profile-config.xml
Modified:
   trunk/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java
   trunk/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java
   trunk/core/src/main/org/jboss/portal/core/aspects/server/LocaleInterceptor.java
   trunk/core/src/main/org/jboss/portal/core/aspects/server/UserInterceptor.java
   trunk/core/src/main/org/jboss/portal/core/controller/portlet/ControllerUserContext.java
   trunk/core/src/main/org/jboss/portal/core/model/portal/command/RenderPageCommand.java
   trunk/core/src/main/org/jboss/portal/core/portlet/cms/admin/CMSAdminPortlet.java
   trunk/core/src/main/org/jboss/portal/core/portlet/role/RolePortlet.java
   trunk/core/src/main/org/jboss/portal/core/portlet/test/TestPortlet.java
   trunk/core/src/main/org/jboss/portal/core/portlet/user/UserPortlet.java
   trunk/core/src/resources/portal-cms-sar/META-INF/jboss-service.xml
   trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml
   trunk/core/src/resources/portal-core-sar/conf/hibernate/user/setup.txt
   trunk/core/src/resources/portal-core-sar/conf/login-config.xml
   trunk/core/src/resources/portal-core-war/WEB-INF/jboss-portlet.xml
   trunk/core/src/resources/portal-samples-war/WEB-INF/jboss-portlet.xml
Log:
- plug in new identity modules
- correct API usages 
(Still some stuff not working 100% ok)

Modified: trunk/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java
===================================================================
--- trunk/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -33,6 +33,7 @@
 import java.util.List;
 
 import javax.naming.InitialContext;
+import javax.naming.NamingException;
 
 import org.jboss.portal.cms.CMSException;
 import org.jboss.portal.cms.CMSInterceptor;
@@ -52,8 +53,9 @@
 
 import org.jboss.portal.identity.User;
 import org.jboss.portal.identity.Role;
-import org.jboss.portal.identity.db.RoleImpl;
+import org.jboss.portal.identity.db.HibernateRoleImpl;
 import org.jboss.portal.identity.RoleModule;
+import org.jboss.portal.identity.AnnonymousRole;
 
 /**
  * ACLInterceptor is plugged into the CMS system to enforce fine grained security access control
@@ -277,10 +279,19 @@
         super.startService();
         
         Tools.init(this.jndiName);
+
+        try
+        {
+           roleModule = (RoleModule)new InitialContext().lookup("java:portal/RoleModule");
+        }
+        catch (NamingException e)
+        {
+           log.error("Cannot obtain RoleModule from JNDI: ", e);
+           throw e;
+        }
         
-        
-        //check and see if cms permissions exist...if not, boot it with the default policy
-        //specified in the configuration
+       //check and see if cms permissions exist...if not, boot it with the default policy
+       //specified in the configuration
         if(!this.isBootRequired())
         {
             return;
@@ -392,7 +403,7 @@
         
         //since this is at app start up and not on user thread...need to create a transaction context.
         InitialContext context = new InitialContext();
-        SessionFactory sessionFactory = (SessionFactory)context.lookup("java:/portal/UserSessionFactory");
+        SessionFactory sessionFactory = (SessionFactory)context.lookup("java:/portal/IdentitySessionFactory");
         Session session = sessionFactory.openSession();
         Transaction tx = session.beginTransaction();
         try
@@ -401,7 +412,7 @@
         }
         catch(Exception e)
         {
-            role = new RoleImpl();            
+            role = new AnnonymousRole();
         }
         finally
         { 

Modified: trunk/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java
===================================================================
--- trunk/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -58,6 +58,8 @@
 import javax.jcr.Session;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -205,6 +207,16 @@
    /** CMS Start */
    public void startService() throws Exception
    {
+      try
+         {
+            this.userModule = (UserModule)new InitialContext().lookup("java:portal/UserModule");
+         }
+         catch (NamingException e)
+         {
+            log.error("Cannot obtain UserModule from JNDI: ", e);
+            throw e;
+         }
+
       //check the version of jbosscache being run
       String cacheVersion = Version.getVersionString(Version.getVersionShort());
       log.info("JBossCache Version=" + cacheVersion);

Modified: trunk/core/src/main/org/jboss/portal/core/aspects/server/LocaleInterceptor.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/aspects/server/LocaleInterceptor.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/main/org/jboss/portal/core/aspects/server/LocaleInterceptor.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -24,10 +24,14 @@
 
 import org.jboss.portal.common.invocation.InvocationException;
 import org.jboss.portal.identity.User;
+import org.jboss.portal.identity.UserProfileModule;
+import org.jboss.portal.identity.UserModule;
 import org.jboss.portal.server.ServerInterceptor;
 import org.jboss.portal.server.ServerInvocation;
 import org.jboss.portal.server.ServerRequest;
 
+import javax.naming.InitialContext;
+import javax.naming.NameNotFoundException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -50,9 +54,40 @@
 
       // Try to get the locale from the user
       User user = (User)invocation.getRequest().getUser();
-      if (user != null)
+
+      UserProfileModule userProfileModule = null;
+
+      //TODO: identity code change
+      try
       {
-         Locale locale = user.getPreferredLocale();
+         userProfileModule = (UserProfileModule)new InitialContext().lookup("java:portal/UserProfileModule");
+      }
+      catch (NameNotFoundException ignore)
+      {
+         // Name is not bound anymore, it could happen during a shutdown, we don't do anything
+      }
+
+      if (user != null && userProfileModule != null)
+      {
+         //Locale locale = user.getPreferredLocale();
+         Object lc = userProfileModule.getProperty(user,User.INFO_USER_LOCALE);
+         Locale locale = null;
+         if (lc instanceof Locale)
+         {
+            locale = (Locale)lc;
+         }
+         else
+         {
+            try
+            {
+               locale = new Locale(lc.toString());
+            }
+            catch (Exception e)
+            {
+               //just to hide failure
+            }
+         }
+
          if (locale != null)
          {
             locales.add(locale);

Modified: trunk/core/src/main/org/jboss/portal/core/aspects/server/UserInterceptor.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/aspects/server/UserInterceptor.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/main/org/jboss/portal/core/aspects/server/UserInterceptor.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -29,11 +29,14 @@
 import org.jboss.portal.identity.NoSuchUserException;
 import org.jboss.portal.identity.User;
 import org.jboss.portal.identity.UserModule;
+import org.jboss.portal.identity.MembershipModule;
+import org.jboss.portal.identity.UserProfileModule;
 import org.jboss.portal.server.ServerInterceptor;
 import org.jboss.portal.server.ServerInvocation;
 
 import javax.naming.InitialContext;
 import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import javax.servlet.http.HttpSessionBindingEvent;
@@ -63,6 +66,17 @@
 
    public UserModule getUserModule()
    {
+      if (userModule == null)
+      {
+         try
+         {
+            userModule = (UserModule)new InitialContext().lookup("java:portal/UserModule");
+         }
+         catch (NamingException e)
+         {
+            log.error("could not obtain User Module: ", e);
+         }
+      }
       return userModule;
    }
 
@@ -97,7 +111,7 @@
             }
 
             // Lookup
-            user = userModule.findUserByUserName(userName);
+            user = getUserModule().findUserByUserName(userName);
 
             //
             if (trace)
@@ -233,10 +247,14 @@
          //
          // Here we use JNDI to locate the module as this finalizer could have been
          // migrated in the session of another node of the cluster
-         UserModule module = null;
+         UserModule userModule = null;
+         UserProfileModule userProfileModule = null;
+
+         //TODO: identity - code change
          try
          {
-            module = (UserModule)new InitialContext().lookup("java:portal/UserModule");
+            userModule = (UserModule)new InitialContext().lookup("java:portal/UserModule");
+            userProfileModule = (UserProfileModule)new InitialContext().lookup("java:portal/UserProfileModule");
          }
          catch (NameNotFoundException ignore)
          {
@@ -244,12 +262,14 @@
          }
 
          //  Get user and set last visit date to now if we can
-         if (module != null)
+         if (userModule != null && userProfileModule != null)
          {
             try
             {
-               User user = module.findUserById(userId);
-               user.setLastVisitDate(new Date());
+               User user = userModule.findUserById(userId);
+               //user.setLastVisitDate(new Date());
+               userProfileModule.setProperty(user, User.INFO_USER_LAST_LOGIN_DATE, new Date().toString());
+
             }
             catch (NoSuchUserException e)
             {

Modified: trunk/core/src/main/org/jboss/portal/core/controller/portlet/ControllerUserContext.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/controller/portlet/ControllerUserContext.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/main/org/jboss/portal/core/controller/portlet/ControllerUserContext.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -24,9 +24,15 @@
 
 import org.jboss.portal.common.util.Tools;
 import org.jboss.portal.identity.User;
+import org.jboss.portal.identity.UserProfileModule;
+import org.jboss.portal.identity.UserModule;
+import org.jboss.portal.identity.IdentityException;
 import org.jboss.portal.portlet.spi.UserContext;
 import org.jboss.portal.server.ServerInvocation;
 
+import javax.naming.InitialContext;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -38,6 +44,8 @@
 public class ControllerUserContext implements UserContext
 {
 
+   private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(ControllerUserContext.class);
+
    /** . */
    private final ServerInvocation invocation;
 
@@ -55,10 +63,32 @@
    public Map getInformations()
    {
       User user = getUser();
-      if (user != null)
+
+      UserProfileModule userProfileModule = null;
+
+      //MARK: identity code change
+      try
       {
-         return user.getProfile();
+         userProfileModule = (UserProfileModule)new InitialContext().lookup("java:portal/UserProfileModule");
       }
+      catch (NamingException ignore)
+      {
+         // Name is not bound anymore, it could happen during a shutdown, we don't do anything
+      }
+
+      if (user != null && userProfileModule != null)
+      {
+         //return user.getProfile();
+         try
+         {
+            return userProfileModule.getProperties(user);
+         }
+         catch (IdentityException e)
+         {
+            log.error("Cannot obtain user profile information: ", e);
+            return null;
+         }
+      }
       else
       {
          return null;

Modified: trunk/core/src/main/org/jboss/portal/core/model/portal/command/RenderPageCommand.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/model/portal/command/RenderPageCommand.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/main/org/jboss/portal/core/model/portal/command/RenderPageCommand.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -41,6 +41,7 @@
 import org.jboss.portal.core.model.portal.Window;
 import org.jboss.portal.core.model.portal.PortalObjectId;
 import org.jboss.portal.identity.User;
+import org.jboss.portal.identity.UserProfileModule;
 import org.jboss.portal.portlet.Properties;
 import org.jboss.portal.portlet.info.ModeInfo;
 import org.jboss.portal.portlet.info.WindowStateInfo;
@@ -71,6 +72,8 @@
 import org.jboss.portal.theme.page.WindowContext;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -228,7 +231,23 @@
             User user = (User)controllerCtx.getServerInvocation().getRequest().getUser();
             if (user != null)
             {
-               String themeId = user.getTheme();
+               UserProfileModule userProfileModule = null;
+
+               //MARK: identity code change
+               try
+               {
+                  userProfileModule = (UserProfileModule)new InitialContext().lookup("java:portal/UserProfileModule");
+               }
+               catch (NamingException ignore)
+               {
+                  // Name is not bound anymore, it could happen during a shutdown, we don't do anything
+               }
+
+
+               //String themeId = user.getTheme();
+
+               String themeId = (String)userProfileModule.getProperty(user, User.INFO_USER_THEME);
+
                if (themeId != null)
                {
                   theme = getTheme(themeId);

Modified: trunk/core/src/main/org/jboss/portal/core/portlet/cms/admin/CMSAdminPortlet.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/portlet/cms/admin/CMSAdminPortlet.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/main/org/jboss/portal/core/portlet/cms/admin/CMSAdminPortlet.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -58,8 +58,10 @@
 
 import org.jboss.portal.identity.User;
 import org.jboss.portal.identity.Role;
-import org.jboss.portal.identity.db.RoleImpl;
+import org.jboss.portal.identity.AnnonymousRole;
+import org.jboss.portal.identity.MembershipModule;
 
+
 import javax.portlet.PortletException;
 import javax.portlet.PortletRequestDispatcher;
 import javax.portlet.PortletSession;
@@ -80,19 +82,21 @@
 /**
  * @author <a href="mailto:roy at jboss.org">Roy Russo</a>
  * @author <a href="mailto:theute at jboss.org">Thomas Heute</a>
- * @author <a href="mailto:sohil.shah at jboss.com">Sohil Shah</a> 
+ * @author <a href="mailto:sohil.shah at jboss.com">Sohil Shah</a>
  */
 public class CMSAdminPortlet extends JBossPortlet
 {
    private CMS CMSService;
    private UserModule userModule;
    private RoleModule roleModule;
+   private MembershipModule membershipModule;
 
    public void init() throws PortletException
    {
       CMSService = (CMS)getPortletContext().getAttribute("CMS");
       userModule = (UserModule)getPortletContext().getAttribute("UserModule");
       roleModule = (RoleModule)getPortletContext().getAttribute("RoleModule");
+      membershipModule = (MembershipModule)getPortletContext().getAttribute("MembershipModule");
 
       if (CMSService == null)
       {
@@ -106,6 +110,10 @@
       {
          throw new PortletException("No role module");
       }
+      if (membershipModule == null)
+      {
+         throw new PortletException("No membership module");
+      }
    }
 
    protected void doView(final JBossRenderRequest rReq, final JBossRenderResponse rRes)
@@ -1137,7 +1145,7 @@
                }
                else
                {
-                   role = new RoleImpl(); 
+                   role = new AnnonymousRole();
                }
                rolesSet.add(role);
            }
@@ -1259,7 +1267,7 @@
            if(portletRequest.getUserPrincipal()!=null)
            {
                User user = this.userModule.findUserByUserName(portletRequest.getUserPrincipal().getName());
-               Set roles = this.roleModule.getRoles(user);
+               Set roles = this.membershipModule.getRoles(user);
                if(roles!=null)
                {
                    for(Iterator itr=roles.iterator();itr.hasNext();)

Modified: trunk/core/src/main/org/jboss/portal/core/portlet/role/RolePortlet.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/portlet/role/RolePortlet.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/main/org/jboss/portal/core/portlet/role/RolePortlet.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -32,6 +32,8 @@
 import org.jboss.portal.identity.RoleModule;
 import org.jboss.portal.identity.User;
 import org.jboss.portal.identity.UserModule;
+import org.jboss.portal.identity.MembershipModule;
+import org.jboss.portal.identity.UserProfileModule;
 import org.jboss.portlet.JBossActionRequest;
 import org.jboss.portlet.JBossActionResponse;
 import org.jboss.portlet.JBossPortlet;
@@ -87,6 +89,11 @@
    private RoleModule roleModule;
 
    private UserModule userModule;
+
+   private MembershipModule membershipModule;
+
+   private UserProfileModule userProfileModule;
+
    private static final String ADMIN_ROLE = "Admin";
 
    public void init() throws PortletException
@@ -95,6 +102,8 @@
       userModule = (UserModule)getPortletContext().getAttribute("UserModule");
       roleModule = (RoleModule)getPortletContext().getAttribute("RoleModule");
       portletHelper = new PortletHelper(this);
+      membershipModule = (MembershipModule)getPortletContext().getAttribute("MembershipModule");
+      userProfileModule = (UserProfileModule)getPortletContext().getAttribute("UserProfileModule");
 
       //
       if (userModule == null)
@@ -105,6 +114,16 @@
       {
          throw new PortletException("No role module");
       }
+      if (membershipModule == null)
+      {
+         throw new PortletException("No membership module");
+      }
+      if (userProfileModule == null)
+      {
+         throw new PortletException("No user profile module");
+      }
+
+
    }
 
    public void destroy()
@@ -277,7 +296,7 @@
                   ctx.put("usernameFilter", usernameFilter);
 
                   Set users = null;
-                  users = roleModule.findRoleMembers(role.getName(), offset, usersPerPage + 1, usernameFilter.trim());
+                  users = membershipModule.findRoleMembers(role.getName(), offset, usersPerPage + 1, usernameFilter.trim());
 
                   User[] usersArray = new User[users.size()];
                   usersArray = (User[])users.toArray(usersArray);
@@ -291,7 +310,7 @@
                      rowCtx.put("username", user.getUserName());
 
                      //
-                     Iterator itRoles = roleModule.getRoles(user).iterator();
+                     Iterator itRoles = membershipModule.getRoles(user).iterator();
                      while (itRoles.hasNext())
                      {
                         DelegateContext rolesCtx = rowCtx.next("roles");
@@ -378,7 +397,7 @@
                   ctx.put("userid", user.getId().toString());
                   ctx.put("username", user.getUserName());
                   ctx.put("userfullname", getFullName(bundle, user));
-                  Set userRoles = roleModule.getRoles(user);
+                  Set userRoles = membershipModule.getRoles(user);
 
                   Set roles = roleModule.findRoles();
                   Role[] rolesArray = new Role[roles.size()];
@@ -622,7 +641,7 @@
          {
             User user = userModule.findUserById(userId);
             Set roles = roleModule.findRolesByNames(selectedRoles);
-            roleModule.setRoles(user, roles);
+            membershipModule.assignRoles(user, roles);
          }
          catch (IllegalArgumentException e)
          {
@@ -759,22 +778,35 @@
    private String getFullName(ResourceBundle bundle,
                               User user)
    {
-      if ((user.getGivenName() != null) && (user.getGivenName().trim().length() != 0))
+      String givenName = null;
+      String familyName = null;
+
+      try
       {
-         if ((user.getFamilyName() != null) && (user.getFamilyName().trim().length() != 0))
+         givenName = (String)userProfileModule.getProperty(user, User.INFO_USER_NAME_GIVEN);
+         familyName = (String)userProfileModule.getProperty(user, User.INFO_USER_NAME_FAMILY);
+      }
+      catch (IdentityException e)
+      {
+         log.error("cannot obtain user profile information: ", e);
+      }
+
+      if ((givenName != null) && (givenName.trim().length() != 0))
+      {
+         if ((familyName != null) && (familyName.trim().length() != 0))
          {
-            return user.getGivenName() + " " + user.getFamilyName();
+            return givenName + " " + familyName;
          }
          else
          {
-            return user.getGivenName().trim();
+            return givenName.trim();
          }
       }
       else
       {
-         if ((user.getFamilyName() != null) && (user.getFamilyName().trim().length() != 0))
+         if ((familyName != null) && (familyName.trim().length() != 0))
          {
-            return user.getFamilyName().trim();
+            return familyName.trim();
          }
          else
          {

Modified: trunk/core/src/main/org/jboss/portal/core/portlet/test/TestPortlet.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/portlet/test/TestPortlet.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/main/org/jboss/portal/core/portlet/test/TestPortlet.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -85,7 +85,9 @@
          writer.write("<p>");
          writer.write("<div class=\"portlet-section-header\">User infos</div>");
          writer.write("<div class=\"portlet-section-body\">");
-         writer.write("<div>Last visit date : " + user.getLastVisitDate() + "</div>");
+
+         //TODO: update this with new Identity API
+         //writer.write("<div>Last visit date : " + user.getLastVisitDate() + "</div>");
          writer.write("</div>");
          writer.write("</p>");
       }

Modified: trunk/core/src/main/org/jboss/portal/core/portlet/user/UserPortlet.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/portlet/user/UserPortlet.java	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/main/org/jboss/portal/core/portlet/user/UserPortlet.java	2006-12-17 14:26:07 UTC (rev 5883)
@@ -38,6 +38,8 @@
 import org.jboss.portal.identity.RoleModule;
 import org.jboss.portal.identity.User;
 import org.jboss.portal.identity.UserModule;
+import org.jboss.portal.identity.MembershipModule;
+import org.jboss.portal.identity.UserProfileModule;
 import org.jboss.portal.theme.PortalTheme;
 import org.jboss.portal.theme.ThemeInfo;
 import org.jboss.portal.theme.ThemeService;
@@ -108,6 +110,8 @@
 
    private UserModule userModule;
    private RoleModule roleModule;
+   private MembershipModule membershipModule;
+   private UserProfileModule userProfileModule;
    private MailModule mailModule;
    private PortletHelper portletHelper;
    public static final short UNDEFINED_TIMEZONE = (short)0;
@@ -125,6 +129,8 @@
       //
       userModule = (UserModule)getPortletContext().getAttribute("UserModule");
       roleModule = (RoleModule)getPortletContext().getAttribute("RoleModule");
+      membershipModule = (MembershipModule)getPortletContext().getAttribute("MembershipModule");
+      userProfileModule = (UserProfileModule)getPortletContext().getAttribute("UserProfileModule");
       mailModule = (MailModule)getPortletContext().getAttribute("MailModule");
       portletHelper = new PortletHelper(this);
 
@@ -141,6 +147,14 @@
       {
          throw new PortletException("No mail module");
       }
+      if (membershipModule == null)
+      {
+         throw new PortletException("No membership module");
+      }
+      if (userProfileModule == null)
+      {
+         throw new PortletException("No user profile module");
+      }
    }
 
    public void destroy()
@@ -177,7 +191,7 @@
       resp.setContentType("text/html");
       PrintWriter writer = resp.getWriter();
 
-      if ((req.getUser() != null) && (!req.getUser().getEnabled()))
+      if ((req.getUser() != null) && (!((getProperty(req.getUser(), User.INFO_USER_ENABLED)).equals("true"))))
       {
          req.getPortletSession().invalidate();
          PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/user/login.jsp");
@@ -248,7 +262,8 @@
             fillContextWithUserProfile(user, ctx);
 
             //
-            String selectedTimeZone = (String)user.getProfile().get(User.INFO_USER_TIME_ZONE_OFFSET);
+            //String selectedTimeZone = (String)user.getProfile().get(User.INFO_USER_TIME_ZONE_OFFSET);
+            String selectedTimeZone = (String)getProperty(user, User.INFO_USER_TIME_ZONE_OFFSET);
             for (int i = 0; i < UserPortletConstants.TIME_ZONE_OFFSETS.length; i++)
             {
                if (UserPortletConstants.TIME_ZONE_OFFSETS[i] != null)
@@ -264,7 +279,8 @@
             }
 
             //
-            String selectedLocale = (String)user.getProfile().get(User.INFO_USER_LOCALE);
+            //String selectedLocale = (String)user.getProfile().get(User.INFO_USER_LOCALE);
+            String selectedLocale = (String)getProperty(user, User.INFO_USER_LOCALE);
             for (Iterator i = LocaleInfo.getAll().iterator(); i.hasNext();)
             {
                LocaleInfo info = (LocaleInfo)i.next();
@@ -279,7 +295,8 @@
             }
 
             //
-            String selectedTheme = (String)user.getProfile().get(User.INFO_USER_THEME);
+            //String selectedTheme = (String)user.getProfile().get(User.INFO_USER_THEME);
+            String selectedTheme = (String)getProperty(user,User.INFO_USER_THEME);
             ThemeService themeService = (ThemeService)getPortletContext().getAttribute("ThemeService");
             for (Iterator i = themeService.getThemes().iterator(); i.hasNext();)
             {
@@ -354,7 +371,7 @@
                      rowCtx.put("username" + oddeven, user.getUserName());
 
                      //
-                     Iterator itRoles = roleModule.getRoles(user).iterator();
+                     Iterator itRoles = membershipModule.getRoles(user).iterator();
                      while (itRoles.hasNext())
                      {
                         DelegateContext rolesCtx = rowCtx.next("roles" + oddeven);
@@ -431,7 +448,7 @@
                   ctx.put("userid", user.getId().toString());
                   ctx.put("username", user.getUserName());
                   ctx.put("userfullname", getFullName(bundle, user));
-                  Set userRoles = roleModule.getRoles(user);
+                  Set userRoles = membershipModule.getRoles(user);
 
                   Set roles = roleModule.findRoles();
                   Role[] rolesArray = new Role[roles.size()];
@@ -541,10 +558,10 @@
             try
             {
                user = userModule.findUserById(userId);
-               String hexCompare = Tools.md5AsHexString(user.getUserName() + user.getRegistrationDate() + UserPortletConstants.SALT);
+               String hexCompare = Tools.md5AsHexString(user.getUserName() + getProperty(user,User.INFO_USER_REGISTRATION_DATE) + UserPortletConstants.SALT);
                if (hash.equals(hexCompare))
                {
-                  user.setEnabled(true);
+                  setProperty(user, User.INFO_USER_ENABLED, Boolean.TRUE);
                   rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/user/register_ty.jsp");
                   PortalNode currentNode = Navigation.getCurrentNode();
                   PortalNodeURL url = resp.createRenderURL(currentNode);
@@ -678,8 +695,10 @@
       {
          try
          {
-            user = userModule.createUser(uname, pass1, realEmail);
-            user.setFakeEmail(fakeEmail);
+            user = userModule.createUser(uname, pass1);
+            setProperty(user,User.INFO_USER_EMAIL_REAL, realEmail);
+            //user.setFakeEmail(fakeEmail);
+            setProperty(user,User.INFO_USER_EMAIL_FAKE, fakeEmail);
 
             //user.setRegistrationDate(new Date());
             String subscriptionMode = getPortletConfig().getInitParameter(UserPortletConstants.SUBSCRIPTIONMODE);
@@ -690,17 +709,17 @@
 
             if (UserPortletConstants.SUBSCRIPTIONMODE_AUTOMATIC.equals(subscriptionMode))
             {
-               user.setEnabled(true);
+               setProperty(user, User.INFO_USER_ENABLED, Boolean.TRUE);
             }
             else if (UserPortletConstants.SUBSCRIPTIONMODE_EMAILVERIFICATION.equals(subscriptionMode))
             {
-               user.setEnabled(false);
+               setProperty(user, User.INFO_USER_ENABLED, Boolean.FALSE);
                String emailText = generateValidationEmail(req, resp, user, pass1);
                String from = getPortletConfig().getInitParameter(UserPortletConstants.EMAILFROM);
                Locale locale = req.getLocale();
                ResourceBundle bundle = getResourceBundle(locale);
                String subject = bundle.getString("REGISTER_CONFIRMATIONEMAIL");
-               mailModule.send(from, user.getRealEmail(), subject, emailText);
+               mailModule.send(from, (String)getProperty(user,User.INFO_USER_EMAIL_REAL), subject, emailText);
             }
 
             /*
@@ -719,7 +738,7 @@
                if (role != null)
                {
                   roleSet.add(role);
-                  roleModule.setRoles(user, roleSet);
+                  membershipModule.assignRoles(user, roleSet);
                }
                else
                {
@@ -754,25 +773,25 @@
 
    private void fillContextWithUserProfile(User user, DelegateContext ctx)
    {
-      ctx.put("GIVENNAME", user.getGivenName());
-      ctx.put("FAMILYNAME", user.getFamilyName());
-      ctx.put("REALEMAIL", user.getRealEmail());
-      ctx.put("FAKEEMAIL", user.getFakeEmail());
-      ctx.put("THEME", user.getTheme());
-      ctx.put("VIEWREALEMAIL", user.getViewRealEmail() ? "checked=\"checked\"" : "");
-      ctx.put("HOMEPAGE", (String)(user.getProfile().get(User.INFO_USER_HOMEPAGE)));
-      ctx.put("ICQ", (String)(user.getProfile().get(User.INFO_USER_IM_ICQ)));
-      ctx.put("AIM", (String)(user.getProfile().get(User.INFO_USER_IM_AIM)));
-      ctx.put("YIM", (String)(user.getProfile().get(User.INFO_USER_IM_YIM)));
-      ctx.put("MSNM", (String)(user.getProfile().get(User.INFO_USER_IM_MSNM)));
-      ctx.put("SKYPE", (String)(user.getProfile().get(User.INFO_USER_IM_SKYPE)));
-      ctx.put("SIGNATURE", (String)(user.getProfile().get(User.INFO_USER_SIGNATURE)));
-      ctx.put("LOCATION", (String)(user.getProfile().get(User.INFO_USER_LOCATION)));
-      ctx.put("OCCUPATION", (String)(user.getProfile().get(User.INFO_USER_OCCUPATION)));
-      ctx.put("INTERESTS", (String)(user.getProfile().get(User.INFO_USER_INTERESTS)));
-      ctx.put("EXTRA", (String)(user.getProfile().get(User.INFO_USER_EXTRA)));
-      ctx.put("QUESTION", (String)(user.getProfile().get(User.INFO_USER_SECURITY_QUESTION)));
-      ctx.put("ANSWER", (String)(user.getProfile().get(User.INFO_USER_SECURITY_ANSWER)));
+      ctx.put("GIVENNAME", (String)getProperty(user, User.INFO_USER_NAME_GIVEN));
+      ctx.put("FAMILYNAME", (String)getProperty(user, User.INFO_USER_NAME_FAMILY));
+      ctx.put("REALEMAIL", (String)getProperty(user, User.INFO_USER_EMAIL_REAL));
+      ctx.put("FAKEEMAIL", (String)getProperty(user, User.INFO_USER_EMAIL_FAKE));
+      ctx.put("THEME", (String)getProperty(user, User.INFO_USER_THEME));
+      ctx.put("VIEWREALEMAIL", ((String)getProperty(user, User.INFO_USER_VIEW_EMAIL_VIEW_REAL)).equals("true") ? "checked=\"checked\"" : "");
+      ctx.put("HOMEPAGE", (String)getProperty(user,User.INFO_USER_HOMEPAGE));
+      ctx.put("ICQ", (String)getProperty(user,User.INFO_USER_IM_ICQ));
+      ctx.put("AIM", (String)getProperty(user,User.INFO_USER_IM_AIM));
+      ctx.put("YIM", (String)getProperty(user,User.INFO_USER_IM_YIM));
+      ctx.put("MSNM", (String)getProperty(user,User.INFO_USER_IM_MSNM));
+      ctx.put("SKYPE", (String)getProperty(user,User.INFO_USER_IM_SKYPE));
+      ctx.put("SIGNATURE", (String)getProperty(user,User.INFO_USER_SIGNATURE));
+      ctx.put("LOCATION", (String)getProperty(user,User.INFO_USER_LOCATION));
+      ctx.put("OCCUPATION", (String)getProperty(user,User.INFO_USER_OCCUPATION));
+      ctx.put("INTERESTS", (String)getProperty(user,User.INFO_USER_INTERESTS));
+      ctx.put("EXTRA", (String)getProperty(user,User.INFO_USER_EXTRA));
+      ctx.put("QUESTION", (String)getProperty(user,User.INFO_USER_SECURITY_QUESTION));
+      ctx.put("ANSWER", (String)getProperty(user,User.INFO_USER_SECURITY_ANSWER));
    }
 
    /**
@@ -867,25 +886,26 @@
          //
          if (givenName.trim().length() != 0)
          {
-            user.setGivenName(givenName);
+            setProperty(user, User.INFO_USER_NAME_GIVEN, givenName);
          }
 
          if (familyName.trim().length() != 0)
          {
-            user.setFamilyName(familyName);
+            setProperty(user, User.INFO_USER_NAME_FAMILY, familyName);
          }
 
          if (realEmail.trim().length() != 0)
          {
-            user.setRealEmail(realEmail);
+            setProperty(user, User.INFO_USER_EMAIL_REAL, realEmail);
          }
 
          if (fakeEmail.trim().length() != 0)
          {
-            user.setFakeEmail(fakeEmail);
+            setProperty(user, User.INFO_USER_EMAIL_FAKE, fakeEmail);
          }
 
-         user.setViewRealEmail(viewRealEmail);
+         setProperty(user, User.INFO_USER_VIEW_EMAIL_VIEW_REAL, Boolean.valueOf(viewRealEmail));
+
          if (changePassword)
          {
             user.updatePassword(pass1);
@@ -893,13 +913,13 @@
 
          if (timezoneoffset.shortValue() != UNDEFINED_TIMEZONE)
          {
-            user.getProfile().put(User.INFO_USER_TIME_ZONE_OFFSET, timezoneoffset.toString());
+            setProperty(user, User.INFO_USER_TIME_ZONE_OFFSET, timezoneoffset.toString());
          }
 
          LocaleInfo localeInfo = LocaleInfo.decodeLocaleInfo(locale);
          if (localeInfo != null)
          {
-            user.setPreferredLocale(localeInfo.getLocale());
+            setProperty(user, User.INFO_USER_LOCALE, localeInfo.getLocale());
          }
 
          putNonEmptyProperty(user, User.INFO_USER_THEME, theme);
@@ -927,7 +947,7 @@
          portletHelper.setRenderParameter(resp, "FAMILYNAME", familyName);
          portletHelper.setRenderParameter(resp, "REALEMAIL", realEmail);
          portletHelper.setRenderParameter(resp, "FAKEEMAIL", fakeEmail);
-         if (user.getViewRealEmail())
+         if (getProperty(user, User.INFO_USER_VIEW_EMAIL_VIEW_REAL).toString().equals("true"))
          {
             portletHelper.setRenderParameter(resp, "VIEWREALEMAIL", "checked=\"checked\"");
          }
@@ -970,7 +990,7 @@
          {
             User user = userModule.findUserById(userId);
             Set roles = roleModule.findRolesByNames(selectedRoles);
-            roleModule.setRoles(user, roles);
+            membershipModule.assignRoles(user, roles);
          }
          catch (IllegalArgumentException e)
          {
@@ -1002,7 +1022,7 @@
                                           String clearPassword)
    {
       // gen link using username, encrypted pw, and a salt.
-      String hash = Tools.md5AsHexString(user.getUserName() + user.getRegistrationDate() + UserPortletConstants.SALT);
+      String hash = Tools.md5AsHexString(user.getUserName() + getProperty(user, User.INFO_USER_REGISTRATION_DATE).toString() + UserPortletConstants.SALT);
 
       String rootURL = getPortletConfig().getInitParameter("emailDomain");
 
@@ -1060,10 +1080,11 @@
       try
       {
          user = userModule.findUserById(userId);
-         String hexCompare = Tools.md5AsHexString(user.getUserName() + user.getRegistrationDate() + UserPortletConstants.SALT);
+         String hexCompare = Tools.md5AsHexString(user.getUserName() + getProperty(user, User.INFO_USER_REGISTRATION_DATE).toString() + UserPortletConstants.SALT);
          if (hash.equals(hexCompare))
          {
-            user.setEnabled(true);
+            //user.setEnabled(true);
+            setProperty(user, User.INFO_USER_ENABLED, Boolean.valueOf(true));
             portletHelper.setI18nRenderParameter(req, resp, UserPortletConstants.INFOMESSAGE, "INFOMESSAGE_CONGRATULATIONACTIVATED");
          }
          else
@@ -1079,10 +1100,21 @@
 
    private String getFirstName(ResourceBundle bundle, User user)
    {
-      if ((user.getGivenName() != null) && (user.getGivenName().trim().length() != 0))
+      String givenName = null;
+
+      try
       {
-         return user.getGivenName().trim();
+         givenName = (String)userProfileModule.getProperty(user, User.INFO_USER_NAME_GIVEN);
       }
+      catch (IdentityException e)
+      {
+         log.error("cannot obtain user profile information: ", e);
+      }
+
+      if ((givenName != null) && (givenName.trim().length() != 0))
+      {
+         return givenName.trim();
+      }
       else
       {
          return bundle.getString("NAMENOTAVAILABLE");
@@ -1091,10 +1123,22 @@
 
    private String getLastName(ResourceBundle bundle, User user)
    {
-      if ((user.getFamilyName() != null) && (user.getFamilyName().trim().length() != 0))
+      String familyName = null;
+
+      try
       {
-         return user.getFamilyName().trim();
+         familyName = (String)userProfileModule.getProperty(user, User.INFO_USER_NAME_FAMILY);
       }
+      catch (IdentityException e)
+      {
+         log.error("cannot obtain user profile information: ", e);
+      }
+
+
+      if ((familyName != null) && (familyName.trim().length() != 0))
+      {
+         return familyName.trim();
+      }
       else
       {
          return bundle.getString("NAMENOTAVAILABLE");
@@ -1104,22 +1148,35 @@
    private String getFullName(ResourceBundle bundle,
                               User user)
    {
-      if ((user.getGivenName() != null) && (user.getGivenName().trim().length() != 0))
+      String givenName = null;
+      String familyName = null;
+
+      try
       {
-         if ((user.getFamilyName() != null) && (user.getFamilyName().trim().length() != 0))
+         givenName = (String)userProfileModule.getProperty(user, User.INFO_USER_NAME_GIVEN);
+         familyName = (String)userProfileModule.getProperty(user, User.INFO_USER_NAME_FAMILY);
+      }
+      catch (IdentityException e)
+      {
+         log.error("cannot obtain user profile information: ", e);
+      }
+
+      if ((givenName != null) && (givenName.trim().length() != 0))
+      {
+         if ((familyName != null) && (familyName.trim().length() != 0))
          {
-            return user.getGivenName() + " " + user.getFamilyName();
+            return givenName + " " + familyName;
          }
          else
          {
-            return user.getGivenName().trim();
+            return givenName.trim();
          }
       }
       else
       {
-         if ((user.getFamilyName() != null) && (user.getFamilyName().trim().length() != 0))
+         if ((familyName != null) && (familyName.trim().length() != 0))
          {
-            return user.getFamilyName().trim();
+            return familyName.trim();
          }
          else
          {
@@ -1132,7 +1189,16 @@
    {
       if ((value != null) && (value.trim().length() != 0))
       {
-         user.getProfile().put(key, value);
+         //user.getProfile().put(key, value);
+         try
+         {
+            userProfileModule.setProperty(user, key, value);
+         }
+         catch (IdentityException e)
+         {
+            //TODO: change to error
+            log.info("Cannot set profile property: ", e);
+         }
       }
    }
 
@@ -1153,6 +1219,43 @@
       portletHelper.setRenderParameter(response, getOperationName(), OP_SHOWLISTUSERS);
    }
 
+   private void setProperty(User user, String key, Object value)
+   {
+      try
+      {
+         userProfileModule.setProperty(user, key, value);
+      }
+      catch (IdentityException e)
+      {
+         //TODO: change to error
+         log.info("Cannot set profile property: ", e);
+      }
+   }
+
+   //Some temp solution to make this portlet not break with new stuff
+   private Object getProperty(User user, String key)
+   {
+      try
+      {
+         Object o = userProfileModule.getProperty(user, key);
+         if (o == null)
+         {
+            return new String();
+         }
+         else
+         {
+            return o.toString();
+         }
+      }
+      catch (IdentityException e)
+      {
+         log.error("Cannot get profile property: ", e);
+      }
+      return null;
+   }
+
+   
+
    /*
    * private String getTimezoneOffsetString(short timezoneOffset) {
    * StringBuffer timeZone = new StringBuffer(); for (int i = 0; i <

Modified: trunk/core/src/resources/portal-cms-sar/META-INF/jboss-service.xml
===================================================================
--- trunk/core/src/resources/portal-cms-sar/META-INF/jboss-service.xml	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-cms-sar/META-INF/jboss-service.xml	2006-12-17 14:26:07 UTC (rev 5883)
@@ -57,8 +57,9 @@
       <depends>jboss.jca:service=DataSourceBinding,name=@portal.datasource.name@</depends>
       <depends>portal:service=JAASLoginModule</depends>
       <depends>portal:service=Hibernate,type=CMS</depends>
+      <depends>portal:service=Module,type=IdentityServiceController</depends>
       <depends optional-attribute-name="StackFactory" proxy-type="attribute">portal:service=InterceptorStackFactory,type=Cms</depends>
-      <depends optional-attribute-name="UserModule" proxy-type="attribute">portal:service=Module,type=User</depends>
+      <!--<depends optional-attribute-name="UserModule" proxy-type="attribute">portal:service=Module,type=User</depends>-->
       <attribute name="DoChecking">true</attribute>
       <attribute name="DefaultContentLocation">portal/cms/conf/default-content/default/</attribute>
       <attribute name="DefaultLocale">en</attribute>
@@ -478,9 +479,10 @@
       	</policy>
       	]]>
       </attribute>
-      <depends optional-attribute-name="RoleModule" proxy-type="attribute">
+      <depends>portal:service=Module,type=IdentityServiceController</depends>
+      <!--<depends optional-attribute-name="RoleModule" proxy-type="attribute">
       	portal:service=Module,type=Role
-      </depends>
+      </depends>-->
    </mbean>
 
    <!--  logging interceptor -->

Modified: trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-core-sar/META-INF/jboss-service.xml	2006-12-17 14:26:07 UTC (rev 5883)
@@ -50,12 +50,7 @@
       code="org.jboss.portal.identity.management.Identity"
       name="portal.management:service=Management,type=Identity,name=Default"
       >
-      <depends
-         optional-attribute-name="UserModule"
-         proxy-type="attribute">portal:service=Module,type=User</depends>
-      <depends
-         optional-attribute-name="RoleModule"
-         proxy-type="attribute">portal:service=Module,type=Role</depends>
+      <depends>portal:service=Module,type=IdentityServiceController</depends>
       <xmbean/>
    </mbean>  
    
@@ -137,9 +132,7 @@
       xmbean-dd=""
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
-      <depends
-         optional-attribute-name="UserModule"
-         proxy-type="attribute">portal:service=Module,type=User</depends>
+      <depends>portal:service=Module,type=IdentityServiceController</depends>
    </mbean>
    <mbean
       code="org.jboss.portal.core.aspects.server.LocaleInterceptor"
@@ -444,7 +437,7 @@
       <attribute name="DoChecking">true</attribute>
       <attribute name="ConfigLocation">conf/hibernate/user/hibernate.cfg.xml</attribute>
       <attribute name="SetupLocation">conf/hibernate/user/setup.txt</attribute>
-      <attribute name="JNDIName">java:/portal/UserSessionFactory</attribute>
+      <attribute name="JNDIName">java:/portal/IdentitySessionFactory</attribute>
    </mbean>
    <mbean
       code="org.jboss.portal.jems.hibernate.SessionFactoryBinder"
@@ -490,8 +483,24 @@
       <attribute name="JNDIName">java:/portal/PortletSessionFactory</attribute>
    </mbean>
 
+   <!--Identity-->
+   <mbean
+      code="org.jboss.portal.identity.IdentityServiceControllerImpl"
+      name="portal:service=Module,type=IdentityServiceController"
+      xmbean-dd=""
+      xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
+      <xmbean/>
+      <depends>portal:service=Hibernate</depends>
+      <!--<depends>jboss.jca:service=DataSourceBinding,name=@portal.datasource.name@</depends>-->
+      <attribute name="JndiName">java:/portal/IdentityServiceController</attribute>
+      <attribute name="RegisterMBeans">true</attribute>
+      <attribute name="ConfigFile">conf/identity-config.xml</attribute>
+      <attribute name="DefaultConfigFile">conf/identity/standardidentity-config.xml</attribute>
+   </mbean>
+
+
    <!-- Modules -->
-   <mbean
+   <!--<mbean
       code="org.jboss.portal.identity.db.DBUserModuleImpl"
       name="portal:service=Module,type=User"
       xmbean-dd=""
@@ -511,7 +520,7 @@
       <attribute name="JNDIName">java:/portal/RoleModule</attribute>
       <attribute name="SessionFactoryJNDIName">java:/portal/UserSessionFactory</attribute>
    </mbean>
-
+-->
    <mbean
       code="org.jboss.portal.core.impl.mail.MailModuleImpl"
       name="portal:service=Module,type=Mail"
@@ -519,7 +528,7 @@
       xmbean-code="org.jboss.portal.jems.as.system.JBossServiceModelMBean">
       <xmbean/>
       <depends>jboss:service=Mail</depends>
-      <depends>portal:service=Module,type=User</depends>
+      <depends>portal:service=Module,type=IdentityServiceController</depends>
       <attribute name="QueueCapacity">-1</attribute>
       <attribute name="Gateway">localhost</attribute>
       <attribute name="SmtpUser"></attribute>
@@ -623,12 +632,7 @@
       <depends
          optional-attribute-name="InstanceContainer"
          proxy-type="attribute">portal:container=Instance</depends>
-      <depends
-         optional-attribute-name="UserModule"
-         proxy-type="attribute">portal:service=Module,type=User</depends>
-      <depends
-         optional-attribute-name="RoleModule"
-         proxy-type="attribute">portal:service=Module,type=Role</depends>
+      <depends>portal:service=Module,type=IdentityServiceController</depends>
    </mbean>
 
    <!-- Command factories -->

Modified: trunk/core/src/resources/portal-core-sar/conf/hibernate/user/setup.txt
===================================================================
--- trunk/core/src/resources/portal-core-sar/conf/hibernate/user/setup.txt	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-core-sar/conf/hibernate/user/setup.txt	2006-12-17 14:26:07 UTC (rev 5883)
@@ -1,8 +1,8 @@
 // This bsh script setup the default content of the portal.
 // It is called when the SessionFactoryBinder service has created a schema and needs to populate it
 import org.jboss.portal.common.util.Tools;
-import org.jboss.portal.identity.db.UserImpl;
-import org.jboss.portal.identity.db.RoleImpl;
+import org.jboss.portal.identity.db.HibernateUserImpl;
+import org.jboss.portal.identity.db.HibernateRoleImpl;
 
 try
 {
@@ -10,11 +10,11 @@
    tx = session.beginTransaction();
 
    //
-   RoleImpl adminRole = new RoleImpl("Admin", "Administrators");
-   RoleImpl userRole = new RoleImpl("User", "Users");
+   HibernateRoleImpl adminRole = new HibernateRoleImpl("Admin", "Administrators");
+   HibernateRoleImpl userRole = new HibernateRoleImpl("User", "Users");
 
    //
-   UserImpl admin = new UserImpl("admin");
+   HibernateUserImpl admin = new HibernateUserImpl("admin");
    admin.setPassword(Tools.md5AsHexString("admin"));
    admin.setRealEmail("admin at portal.com");
    admin.setViewRealEmail(true);
@@ -25,7 +25,7 @@
    adminRole.getUsers().add(admin);
 
    //
-   UserImpl user = new UserImpl("user");
+   HibernateUserImpl user = new HibernateUserImpl("user");
    user.setPassword(Tools.md5AsHexString("user"));
    user.setRealEmail("user at portal.com");
    user.setViewRealEmail(true);

Added: trunk/core/src/resources/portal-core-sar/conf/identity/ldap_identity-config.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/conf/identity/ldap_identity-config.xml	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-core-sar/conf/identity/ldap_identity-config.xml	2006-12-17 14:26:07 UTC (rev 5883)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ JBoss, a division of Red Hat                                              ~
+  ~ Copyright 2006, Red Hat Middleware, LLC, and individual                   ~
+  ~ contributors as indicated by the @authors tag. See the                    ~
+  ~ copyright.txt in the distribution for a full listing of                   ~
+  ~ individual contributors.                                                  ~
+  ~                                                                           ~
+  ~ This is free software; you can redistribute it and/or modify it           ~
+  ~ under the terms of the GNU Lesser General Public License as               ~
+  ~ published by the Free Software Foundation; either version 2.1 of          ~
+  ~ the License, or (at your option) any later version.                       ~
+  ~                                                                           ~
+  ~ This software is distributed in the hope that it will be useful,          ~
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of            ~
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU          ~
+  ~ Lesser General Public License for more details.                           ~
+  ~                                                                           ~
+  ~ You should have received a copy of the GNU Lesser General Public          ~
+  ~ License along with this software; if not, write to the Free               ~
+  ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA        ~
+  ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.                  ~
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+
+   <!--<!DOCTYPE identity-configuration PUBLIC
+   "-//JBoss Portal//DTD JBoss Identity Configuration 1.0//EN"
+   "http://www.jboss.org/portal/dtd/identity-config_1_0.dtd">-->
+
+<identity-configuration>
+   <datasources>
+      <datasource>
+         <name>LDAP</name>
+         <config>
+            <option>
+               <name>host</name>
+               <value>localhost</value>
+            </option>
+            <option>
+               <name>port</name>
+               <value>10389</value>
+            </option>
+            <option>
+               <name>adminDN</name>
+               <value>cn=Directory Manager</value>
+            </option>
+            <option>
+               <name>adminPassword</name>
+               <value>password</value>
+            </option>
+         </config>
+      </datasource>
+   </datasources>
+   <modules>
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>User</type>
+         <implementation>LDAP</implementation>
+         <config/>
+      </module>
+      <module>
+         <type>Role</type>
+         <implementation>LDAP</implementation>
+         <config/>
+      </module>
+      <module>
+         <type>Membership</type>
+         <implementation>LDAP</implementation>
+         <config/>
+      </module>
+
+      <module>
+         <type>UserProfile</type>
+         <implementation>DELEGATING</implementation>
+         <config>
+            <option>
+               <name>profileConfigFile</name>
+               <value>conf/profile-config.xml</value>
+            </option>
+            <option>
+               <name>ldapModuleJNDIName</name>
+               <value>java:/portal/LDAPUserProfileModule</value>
+            </option>
+         </config>
+      </module>
+      <module>
+         <type>DBDelegateUserProfile</type>
+         <implementation>DB</implementation>
+         <config/>
+      </module>
+      <module>
+         <type>LDAPDelegateUserProfile</type>
+         <implementation>LDAP</implementation>
+         <config/>
+      </module>
+   </modules>
+
+   <options>
+      <option-group>
+         <group-name>common</group-name>
+         <option>
+            <name>userContainerDN</name>
+            <value>ou=People,dc=testsuite,dc=portal,dc=qa,dc=atl,dc=jboss,dc=com</value>
+         </option>
+         <option>
+            <name>roleContainerDN</name>
+            <value>ou=Roles,dc=testsuite,dc=portal,dc=qa,dc=atl,dc=jboss,dc=com</value>
+         </option>
+      </option-group>
+   </options>
+</identity-configuration>
\ No newline at end of file

Added: trunk/core/src/resources/portal-core-sar/conf/identity/standardidentity-config.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/conf/identity/standardidentity-config.xml	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-core-sar/conf/identity/standardidentity-config.xml	2006-12-17 14:26:07 UTC (rev 5883)
@@ -0,0 +1,503 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ JBoss, a division of Red Hat                                              ~
+  ~ Copyright 2006, Red Hat Middleware, LLC, and individual                   ~
+  ~ contributors as indicated by the @authors tag. See the                    ~
+  ~ copyright.txt in the distribution for a full listing of                   ~
+  ~ individual contributors.                                                  ~
+  ~                                                                           ~
+  ~ This is free software; you can redistribute it and/or modify it           ~
+  ~ under the terms of the GNU Lesser General Public License as               ~
+  ~ published by the Free Software Foundation; either version 2.1 of          ~
+  ~ the License, or (at your option) any later version.                       ~
+  ~                                                                           ~
+  ~ This software is distributed in the hope that it will be useful,          ~
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of            ~
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU          ~
+  ~ Lesser General Public License for more details.                           ~
+  ~                                                                           ~
+  ~ You should have received a copy of the GNU Lesser General Public          ~
+  ~ License along with this software; if not, write to the Free               ~
+  ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA        ~
+  ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.                  ~
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+
+
+<!--
+<!DOCTYPE identity-configuration PUBLIC
+   "-//JBoss Portal//DTD JBoss Identity Configuration 1.0//EN" 
+   "http://www.jboss.org/portal/dtd/identity-config_1_0.dtd">
+-->
+
+<identity-configuration>
+   <datasources>
+      <datasource>
+         <name>LDAP</name>
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=LDAPConnectionContext</service-name>
+         <class>org.jboss.portal.identity.ldap.LDAPConnectionContext</class>
+         <config>
+            <option>
+               <name>host</name>
+               <value>jboss.com</value>
+            </option>
+            <option>
+               <name>port</name>
+               <value>389</value>
+            </option>
+            <option>
+               <name>contextFactory</name>
+               <value>com.sun.jndi.ldap.LdapCtxFactory</value>
+            </option>
+            <option>
+               <name>adminDN</name>
+               <value>cn=Directory Manager</value>
+            </option>
+            <option>
+               <name>adminPassword</name>
+               <value>password</value>
+            </option>
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/LDAPConnectionContext</value>
+            </option>
+         </config>
+      </datasource>
+      <!--<datasource>
+         <name>DB</name>
+         <service-name>portal:service=Hibernate</service-name>
+         <class>org.jboss.portal.identity2.experimental.db.IdentitySessionFactoryBinder</class>
+         <config>
+            <option>
+               <name>doChecking</name>
+               <value>true</value>
+            </option>
+            <option>
+               <name>configLocation</name>
+               <value>hibernate-single.cfg.xml</value>
+            </option>
+            --><!--<option>
+               <name>setupLocation</name>
+               <value>conf/hibernate/user/setup.txt</value>
+            </option>--><!--
+            <option>
+               <name>jNDIName</name>
+               <value>java:/portal/UserSessionFactory</value>
+            </option>
+            <option>
+               <name>profileConfigFile</name>
+               <value>profile-config.xml</value>
+            </option>
+            <option>
+               <name>mappingTemplateFile</name>
+               <value>domain-template.hbm.xml</value>
+            </option>
+            <option>
+               <name>mappingOutputFile</name>
+               <value>domain-identity.hbm.xml</value>
+            </option>
+            <option>
+               <name>mappingPattern</name>
+               <value><![CDATA[<property name="@name@" column="@column@" type="java.lang.String" update="true" insert="true" unique="false"/>]]></value>
+            </option>
+         </config>
+      </datasource>-->
+   </datasources>
+   <modules>
+
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>UserProfile</type>
+         <implementation>DELEGATING</implementation>
+
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=UserProfile</service-name>
+         <class>org.jboss.portal.identity.DelegatingUserProfileModuleImpl</class>
+         <!--set of options that are passed to a class constructor-->
+         <config>
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/UserProfileModule</value>
+            </option>
+            <option>
+               <name>dbModuleJNDIName</name>
+               <value>java:/portal/DBUserProfileModule</value>
+            </option>
+         </config>
+      </module>
+
+
+
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>User</type>
+         <implementation>DB</implementation>
+
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=User</service-name>
+         <class>org.jboss.portal.identity.db.HibernateUserModuleImpl</class>
+
+         <!--set of options that are passed to a class constructor-->
+         <config>
+            <option>
+               <name>sessionFactoryJNDIName</name>
+               <value>java:/portal/IdentitySessionFactory</value>
+            </option>
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/UserModule</value>
+            </option>
+         </config>
+      </module>
+
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>Role</type>
+         <implementation>DB</implementation>
+
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=Role</service-name>
+         <class>org.jboss.portal.identity.db.HibernateRoleModuleImpl</class>
+
+         <!--set of options that are passed to a class constructor-->
+         <config>
+            <option>
+               <name>sessionFactoryJNDIName</name>
+               <value>java:/portal/IdentitySessionFactory</value>
+            </option>
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/RoleModule</value>
+            </option>
+         </config>
+      </module>
+
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>Membership</type>
+         <implementation>DB</implementation>
+
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=Membership</service-name>
+         <class>org.jboss.portal.identity.db.HibernateMembershipModuleImpl</class>
+
+         <!--set of options that are passed to a class constructor-->
+         <config>
+            <option>
+               <name>sessionFactoryJNDIName</name>
+               <value>java:/portal/IdentitySessionFactory</value>
+            </option>
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/MembershipModule</value>
+            </option>
+         </config>
+      </module>
+
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>DBDelegateUserProfile</type>
+         <implementation>DB</implementation>
+
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=DBUserProfile</service-name>
+         <class>org.jboss.portal.identity.db.HibernateUserProfileModuleImpl</class>
+
+         <!--set of options that are passed to a class constructor-->
+         <config>
+            <option>
+               <name>sessionFactoryJNDIName</name>
+               <value>java:/portal/IdentitySessionFactory</value>
+            </option>
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/DBUserProfileModule</value>
+            </option>
+         </config>
+      </module>
+
+      <!--for ldap modules...-->
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>User</type>
+         <implementation>LDAP</implementation>
+
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=User</service-name>
+         <class>org.jboss.portal.identity.ldap.LDAPUserModuleImpl</class>
+
+         <!--set of options that are passed to a class constructor-->
+         <config>
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/UserModule</value>
+            </option>
+            <option>
+               <name>connectionJNDIName</name>
+               <value>java:/portal/LDAPConnectionContext</value>
+            </option>
+         </config>    
+      </module>
+
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>Role</type>
+         <implementation>LDAP</implementation>
+
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=Role</service-name>
+         <class>org.jboss.portal.identity.ldap.LDAPRoleModuleImpl</class>
+
+         <!--set of options that are passed to a class constructor-->
+         <config>
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/RoleModule</value>
+            </option>
+            <option>
+               <name>connectionJNDIName</name>
+               <value>java:/portal/LDAPConnectionContext</value>
+            </option>
+         </config>
+      </module>
+
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>Membership</type>
+         <implementation>LDAP</implementation>
+
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=Membership</service-name>
+         <class>org.jboss.portal.identity.ldap.LDAPStaticGroupMembershipModuleImpl</class>
+
+         <!--set of options that are passed to a class constructor-->
+         <config>
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/MembershipModule</value>
+            </option>
+            <option>
+               <name>connectionJNDIName</name>
+               <value>java:/portal/LDAPConnectionContext</value>
+            </option>
+         </config>
+      </module>
+
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>LDAPDelegateUserProfile</type>
+         <implementation>LDAP</implementation>
+
+         <!--name of service and class for creating mbean-->
+         <service-name>portal:service=Module,type=LDAPUserProfile</service-name>
+         <class>org.jboss.portal.identity.ldap.LDAPUserProfileModuleImpl</class>
+
+         <!--set of options that are passed to a class constructor-->
+         <config>
+            <!--<option>
+               <name>LDAPConnectionJNDIName</name>
+               <value>java:/portal/UserSessionFactory</value>
+            </option>-->
+            <!--Hibernate mappings for db level store (dynamic properties not mapped as ldap attributes)-->
+            <!--<option>
+               <name>SessionFactoryJNDIName</name>
+               <value>java:/portal/PropertyStoreSessionFactory</value>
+            </option>
+            <option>
+               <name>profileMappings</name>
+               <value>ldap-profile.xml</value>
+            </option>-->
+            <option>
+               <name>jndiName</name>
+               <value>java:/portal/LDAPUserProfileModule</value>
+            </option>
+            <option>
+               <name>connectionJNDIName</name>
+               <value>java:/portal/LDAPConnectionContext</value>
+            </option>
+         </config>
+      </module>
+
+   </modules>
+
+   <options>
+      <!--Common options section-->
+      <option-group>
+         <group-name>common</group-name>
+         <option>
+            <name>userContainerDN</name>
+            <value>ou=People,dc=example,dc=com</value>
+         </option>
+         <option>
+            <name>uidAttributeId</name>
+            <value>uid</value>
+         </option>
+         <option>
+            <name>passwordAttributeID</name>
+            <value>userPassword</value>
+         </option>
+         <option>
+            <name>hashAlgorithm</name>
+            <value>MD5</value>
+         </option>
+         <option>
+            <name>hashEncoding</name>
+            <value>hex</value>
+         </option>
+         <option>
+            <name>roleContainerDN</name>
+            <value>ou=Roles,dc=example,dc=com</value>
+         </option>
+         <option>
+            <name>ridAttributeId</name>
+            <value>cn</value>
+         </option>
+         <option>
+            <name>roleDisplayNameAttributeID</name>
+            <value>cn</value>
+         </option>
+         <option>
+            <name>membershipAttributeID</name>
+            <value>member</value>
+         </option>
+         <option>
+            <name>membershipAttributeIsDN</name>
+            <value>true</value>
+         </option>
+      </option-group>
+      <option-group>
+         <group-name>userCreateAttibutes</group-name>
+         <option>
+            <name>objectClass</name>
+            <value>top</value>
+            <value>uidObject</value>
+            <value>person</value>
+            <value>inetUser</value>
+         </option>
+         <!--Schema requires those to have initial value-->
+         <option>
+            <name>cn</name>
+            <value>none</value>
+         </option>
+         <option>
+            <name>sn</name>
+            <value>none</value>
+         </option>
+      </option-group>
+      <option-group>
+         <group-name>roleCreateAttibutes</group-name>
+         <option>
+            <name>objectClass</name>
+            <value>top</value>
+            <value>groupOfNames</value>
+         </option>
+         <!--Schema requires those to have initial value-->
+         <option>
+            <name>cn</name>
+            <value>none</value>
+         </option>
+         <!--Some directory servers require this attribute to be valid DN-->
+         <!--For safety reasons point to the admin user here-->
+         <option>
+            <name>member</name>
+            <value>uid=dummynonexistinguser,ou=People,dc=jboss,dc=org</value>
+         </option>
+      </option-group>
+      <option-group>
+         <group-name>userProfileMappings</group-name>
+         <option>
+            <name>portal.user.name.given</name>
+            <!--inetOrgPerson-->
+            <value>givenName</value>
+         </option>
+         <!--<option>
+               <name>portal.user.name.family</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.location</name>
+               <value></value>
+            </option>-->
+         <option>
+            <name>portal.user.occupation</name>
+            <!--inetOrgPerson-->
+            <value>title</value>
+         </option>
+         <!--<option>
+               <name>portal.user.extra</name>
+               <value></value>
+            </option>-->
+         <option>
+            <name>portal.user.signature</name>
+            <!--newPilotPerson-->
+            <value>personalSignature</value>
+         </option>
+         <!--<option>
+               <name>portal.user.interests</name>
+               <value></value>
+            </option>-->
+         <option>
+            <name>portal.user.locale</name>
+            <!--inetOrgPerson-->
+            <value>localityName</value><!--or prefferedLanguage-->
+         </option>
+         <!--<option>
+               <name>portal.user.im.icq</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.im.aim</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.im.msnm</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.im.yim</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.im.skype</name>
+               <value></value>
+            </option>-->
+         <option>
+            <name>portal.user.homepage</name>
+            <!--inetOrgPerson-->
+            <value>seeAlso</value>
+         </option>
+         <!--<option>
+               <name>portal.user.time-zone-offset</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.theme</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.security.question</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.security.answer</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.email.fake</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.email.view-real</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.last-login-date</name>
+               <value></value>
+            </option>
+            <option>
+               <name>portal.user.registration-date</name>
+               <value></value>
+            </option>-->
+      </option-group>
+   </options>
+</identity-configuration>
\ No newline at end of file

Added: trunk/core/src/resources/portal-core-sar/conf/identity-config.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/conf/identity-config.xml	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-core-sar/conf/identity-config.xml	2006-12-17 14:26:07 UTC (rev 5883)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ JBoss, a division of Red Hat                                              ~
+  ~ Copyright 2006, Red Hat Middleware, LLC, and individual                   ~
+  ~ contributors as indicated by the @authors tag. See the                    ~
+  ~ copyright.txt in the distribution for a full listing of                   ~
+  ~ individual contributors.                                                  ~
+  ~                                                                           ~
+  ~ This is free software; you can redistribute it and/or modify it           ~
+  ~ under the terms of the GNU Lesser General Public License as               ~
+  ~ published by the Free Software Foundation; either version 2.1 of          ~
+  ~ the License, or (at your option) any later version.                       ~
+  ~                                                                           ~
+  ~ This software is distributed in the hope that it will be useful,          ~
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of            ~
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU          ~
+  ~ Lesser General Public License for more details.                           ~
+  ~                                                                           ~
+  ~ You should have received a copy of the GNU Lesser General Public          ~
+  ~ License along with this software; if not, write to the Free               ~
+  ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA        ~
+  ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.                  ~
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+
+   <!--<!DOCTYPE identity-configuration PUBLIC
+   "-//JBoss Portal//DTD JBoss Identity Configuration 1.0//EN"
+   "http://www.jboss.org/portal/dtd/identity-config_1_0.dtd">-->
+
+<identity-configuration>
+   <datasources/>
+   <modules>
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>User</type>
+         <implementation>DB</implementation>
+         <config/>
+      </module>
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>Role</type>
+         <implementation>DB</implementation>
+         <config/>
+      </module>
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>Membership</type>
+         <implementation>DB</implementation>
+         <config/>
+      </module>
+      <module>
+         <!--type used to correctly map in IdentityContext registry-->
+         <type>UserProfile</type>
+         <implementation>DELEGATING</implementation>
+         <config>
+            <option>
+               <name>profileConfigFile</name>
+               <value>conf/profile-config.xml</value>
+            </option>
+         </config>
+      </module>
+      <module>
+         <type>DBDelegateUserProfile</type>
+         <implementation>DB</implementation>
+         <config/>
+      </module>
+   </modules>
+   <options/>
+</identity-configuration>
\ No newline at end of file

Modified: trunk/core/src/resources/portal-core-sar/conf/login-config.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/conf/login-config.xml	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-core-sar/conf/login-config.xml	2006-12-17 14:26:07 UTC (rev 5883)
@@ -39,6 +39,7 @@
             <module-option name="unauthenticatedIdentity">guest</module-option>
             <module-option name="userModuleJNDIName">java:/portal/UserModule</module-option>
             <module-option name="roleModuleJNDIName">java:/portal/RoleModule</module-option>
+            <module-option name="membershipModuleJNDIName">java:/portal/MembershipModule</module-option>
             <module-option name="additionalRole">Authenticated</module-option>
             <module-option name="password-stacking">useFirstPass</module-option>
          </login-module>

Added: trunk/core/src/resources/portal-core-sar/conf/profile-config.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/conf/profile-config.xml	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-core-sar/conf/profile-config.xml	2006-12-17 14:26:07 UTC (rev 5883)
@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ JBoss, a division of Red Hat                                              ~
+  ~ Copyright 2006, Red Hat Middleware, LLC, and individual                   ~
+  ~ contributors as indicated by the @authors tag. See the                    ~
+  ~ copyright.txt in the distribution for a full listing of                   ~
+  ~ individual contributors.                                                  ~
+  ~                                                                           ~
+  ~ This is free software; you can redistribute it and/or modify it           ~
+  ~ under the terms of the GNU Lesser General Public License as               ~
+  ~ published by the Free Software Foundation; either version 2.1 of          ~
+  ~ the License, or (at your option) any later version.                       ~
+  ~                                                                           ~
+  ~ This software is distributed in the hope that it will be useful,          ~
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of            ~
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU          ~
+  ~ Lesser General Public License for more details.                           ~
+  ~                                                                           ~
+  ~ You should have received a copy of the GNU Lesser General Public          ~
+  ~ License along with this software; if not, write to the Free               ~
+  ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA        ~
+  ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.                  ~
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+
+   <!--<!DOCTYPE profile PUBLIC
+   "-//JBoss Portal//DTD JBoss User Profile Configuration 1.0//EN"
+   "http://www.jboss.org/portal/dtd/profile-config_1_0.dtd">-->
+
+<profile>
+   <!--Database mapping - jbp_user table column mapping-->
+   <property>
+      <name>portal.user.name.given</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>mandatory</usage>
+      <display-name xml:lang="en">Name</display-name>
+      <description xml:lang="en">The user name</description>
+      <mapping>
+         <database>
+            <type>column</type>
+            <value>jbp_username</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.name.family</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>mandatory</usage>
+      <display-name xml:lang="en">Family name</display-name>
+      <description xml:lang="en">The user family name</description>
+      <mapping>
+         <database>
+            <type>column</type>
+            <value>jbp_familyname</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.email.real</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>mandatory</usage>
+      <display-name xml:lang="en">Email</display-name>
+      <description xml:lang="en">The user real email</description>
+      <mapping>
+         <database>
+            <type>column</type>
+            <value>jbp_realemail</value>
+         </database>
+         <ldap>
+            <value>mail</value>
+         </ldap>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.email.fake</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>mandatory</usage>
+      <display-name xml:lang="en">Fake email</display-name>
+      <description xml:lang="en">The user fake email</description>
+      <mapping>
+         <database>
+            <type>column</type>
+            <value>jbp_fakeemail</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.registration-date</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>mandatory</usage>
+      <display-name xml:lang="en">Registration date</display-name>
+      <description xml:lang="en">Registration date of user</description>
+      <mapping>
+         <database>
+            <type>column</type>
+            <value>jbp_regdate</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.email.view-real</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>mandatory</usage>
+      <display-name xml:lang="en">View real email</display-name>
+      <description xml:lang="en">Is user real email displayed in public</description>
+      <mapping>
+         <database>
+            <type>column</type>
+            <value>jbp_viewrealemail</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.enabled</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>mandatory</usage>
+      <display-name xml:lang="en">Enabled</display-name>
+      <description xml:lang="en">User enabled state</description>
+      <mapping>
+         <database>
+            <type>column</type>
+            <value>jbp_enabled</value>
+         </database>
+      </mapping>
+   </property>
+
+   <!--Dynamic database store-->
+   <property>
+      <name>portal.user.location</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Location</display-name>
+      <description xml:lang="en">The user location</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.location</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.occupation</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Occupation</display-name>
+      <description xml:lang="en">The user occupation</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.occupation</value>
+         </database>
+         <ldap>
+            <value>title</value>
+         </ldap>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.extra</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Extra info</display-name>
+      <description xml:lang="en">Extra informtion about user</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.extra</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.signature</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Signature</display-name>
+      <description xml:lang="en">The user signature</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.signature</value>
+         </database>
+         <ldap>
+            <value>personalSignature</value>
+         </ldap>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.interests</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Interests</display-name>
+      <description xml:lang="en">The user interests</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.interests</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.locale</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Locale</display-name>
+      <description xml:lang="en">The user locale</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.locale</value>
+         </database>
+         <ldap>
+            <value>localityName</value>
+         </ldap>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.im.icq</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">ICQ</display-name>
+      <description xml:lang="en">The user ICQ id</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.im.icq</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.im.aim</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">AIM</display-name>
+      <description xml:lang="en">The user AIM id</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.im.aim</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.im.msnm</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">MSN</display-name>
+      <description xml:lang="en">The user MSN id</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.im.msnm</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.im.yim</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">YIM</display-name>
+      <description xml:lang="en">The user YIM id</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.im.yim</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.im.skype</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Skype</display-name>
+      <description xml:lang="en">The user skype id</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.im.skype</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.homepage</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Homepage</display-name>
+      <description xml:lang="en">The user homepage</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.homepage</value>
+         </database>
+         <ldap>
+            <value>seeAlso</value>
+         </ldap>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.time-zone-offset</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Timezone</display-name>
+      <description xml:lang="en">Timezone in users location</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.time-zone-offset</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.theme</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Theme</display-name>
+      <description xml:lang="en">Portlat theme that user is using</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.theme</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.security.question</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Password Question</display-name>
+      <description xml:lang="en">Portal password recovery question</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.security.question</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.security.answer</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Password Answer</display-name>
+      <description xml:lang="en">Portal password recovery answer</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.security.answer</value>
+         </database>
+      </mapping>
+   </property>
+   <property>
+      <name>portal.user.last-login-date</name>
+      <type>java.lang.String</type>
+      <access-mode>read-write</access-mode>
+      <usage>optional</usage>
+      <display-name xml:lang="en">Last login</display-name>
+      <description xml:lang="en">The date of users last login</description>
+      <mapping>
+         <database>
+            <type>dynamic</type>
+            <value>portal.user.last-login-date</value>
+         </database>
+      </mapping>
+   </property>
+</profile>
\ No newline at end of file

Modified: trunk/core/src/resources/portal-core-war/WEB-INF/jboss-portlet.xml
===================================================================
--- trunk/core/src/resources/portal-core-war/WEB-INF/jboss-portlet.xml	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-core-war/WEB-INF/jboss-portlet.xml	2006-12-17 14:26:07 UTC (rev 5883)
@@ -135,6 +135,16 @@
       <service-ref>:service=Module,type=Role</service-ref>
    </service>
    <service>
+      <service-name>UserProfileModule</service-name>
+      <service-class>org.jboss.portal.identity.UserProfileModule</service-class>
+      <service-ref>:service=Module,type=UserProfile</service-ref>
+   </service>
+   <service>
+      <service-name>MembershipModule</service-name>
+      <service-class>org.jboss.portal.identity.MembershipModule</service-class>
+      <service-ref>:service=Module,type=Membership</service-ref>
+   </service>
+   <service>
       <service-name>MailModule</service-name>
       <service-class>org.jboss.portal.core.modules.MailModule</service-class>
       <service-ref>:service=Module,type=Mail</service-ref>

Modified: trunk/core/src/resources/portal-samples-war/WEB-INF/jboss-portlet.xml
===================================================================
--- trunk/core/src/resources/portal-samples-war/WEB-INF/jboss-portlet.xml	2006-12-17 14:17:34 UTC (rev 5882)
+++ trunk/core/src/resources/portal-samples-war/WEB-INF/jboss-portlet.xml	2006-12-17 14:26:07 UTC (rev 5883)
@@ -134,6 +134,16 @@
       <service-ref>:service=Module,type=Role</service-ref>
    </service>
    <service>
+      <service-name>UserProfileModule</service-name>
+      <service-class>org.jboss.portal.identity.UserProfileModule</service-class>
+      <service-ref>:service=Module,type=UserProfile</service-ref>
+   </service>
+   <service>
+      <service-name>MembershipModule</service-name>
+      <service-class>org.jboss.portal.identity.MembershipModule</service-class>
+      <service-ref>:service=Module,type=Membership</service-ref>
+   </service>
+   <service>
       <service-name>MailModule</service-name>
       <service-class>org.jboss.portal.core.modules.MailModule</service-class>
       <service-ref>:service=Module,type=Mail</service-ref>




More information about the portal-commits mailing list