Author: sohil.shah(a)jboss.com
Date: 2008-07-17 19:39:12 -0400 (Thu, 17 Jul 2008)
New Revision: 11493
Modified:
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/ha/HAJCRCMS.java
branches/JBoss_Portal_Branch_2_7/core-cms/build.xml
Log:
JBPORTAL-2075 - CMS failure in jboss-portal-ha when LDAP is used for authentication
Modified:
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java
===================================================================
---
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java 2008-07-17
23:23:05 UTC (rev 11492)
+++
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java 2008-07-17
23:39:12 UTC (rev 11493)
@@ -577,6 +577,11 @@
JCRCMS.turnOffWorkflow();
clusterWorkflowStatus = true;
}
+ Boolean enableUISecurityFilter =
(Boolean)propagatedContext.getClusterContextInfo("enableUISecurityFilter");
+ if(enableUISecurityFilter != null)
+ {
+ JCRCMS.enableUISecurityFilter();
+ }
}
// .... add new nodes & properties and save them
Modified:
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/ha/HAJCRCMS.java
===================================================================
---
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/ha/HAJCRCMS.java 2008-07-17
23:23:05 UTC (rev 11492)
+++
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/ha/HAJCRCMS.java 2008-07-17
23:39:12 UTC (rev 11493)
@@ -22,6 +22,7 @@
******************************************************************************/
package org.jboss.portal.cms.impl.jcr.ha;
+import org.apache.log4j.Logger;
import org.jboss.portal.cms.CMSException;
import org.jboss.portal.cms.Command;
import org.jboss.portal.cms.impl.jcr.JCRCMS;
@@ -40,6 +41,7 @@
*/
public class HAJCRCMS extends JCRCMS implements HASingletonInvoker.Callback
{
+ private static Logger log = Logger.getLogger(HAJCRCMS.class);
/** The invoker. */
private HASingletonInvoker invoker;
@@ -54,71 +56,118 @@
}
else
{
+ //Add the user Identity ThreadLocal variable to the Command Context for
propagation to the Master Node
+ if (this.getUserInfo().get() != null)
+ {
+ User user = (User)this.getUserInfo().get();
+ JCRCommandContext context = this.getCommandContext((JCRCommand)cmd);
+ context.setClusterContextInfo("user", new
CMSUser(user.getUserName()));
+ }
+
+ //Add the Workflow ThreadLocal variable to the Command Context for propagation
to the Master Node
+ if (this.turnOffWorkflow.get() != null)
+ {
+ Boolean workflowStatus = (Boolean)this.turnOffWorkflow.get();
+ JCRCommandContext context = this.getCommandContext((JCRCommand)cmd);
+ context.setClusterContextInfo("workflowStatus", workflowStatus);
+ }
+
+ //Add the enableUISecurityFilter indicator to the Command Context for
propagation to the Master Node
+ if(this.isUISecurityFilterActive())
+ {
+ JCRCommandContext context = this.getCommandContext((JCRCommand)cmd);
+ context.setClusterContextInfo("enableUISecurityFilter",
Boolean.TRUE);
+ }
+
+ // Use the proxy to invoke on the singleton
+ Object returnValue = null;
try
{
- //Add the user Identity ThreadLocal variable to the Command Context for
propagation to the Master Node
- if (this.getUserInfo().get() != null)
+ returnValue = invoker.invoke("execute", new Class[]{Command.class},
new Object[]{cmd});
+ if(returnValue instanceof CMSException)
{
- User user = (User)this.getUserInfo().get();
- JCRCommandContext context =
(JCRCommandContext)((JCRCommand)cmd).getContext();
- if (context == null)
+ if(returnValue.toString().indexOf("Access to this resource is
denied") != -1)
{
- context = new JCRCommandContext(null, null, null);
- ((JCRCommand)cmd).setContext(context);
+ throw (CMSException)returnValue;
}
- context.setClusterContextInfo("user", new
CMSUser(user.getUserName()));
- }
-
- //Add the Workflow ThreadLocal variable to the Command Context for
propagation to the Master Node
- if (this.turnOffWorkflow.get() != null)
- {
- Boolean workflowStatus = (Boolean)this.turnOffWorkflow.get();
- JCRCommandContext context =
(JCRCommandContext)((JCRCommand)cmd).getContext();
- if (context == null)
+ else
{
- context = new JCRCommandContext(null, null, null);
- ((JCRCommand)cmd).setContext(context);
+ returnValue = null;
}
- context.setClusterContextInfo("workflowStatus",
workflowStatus);
}
-
- // Use the proxy to invoke on the singleton
- return invoker.invoke("execute", new Class[]{Command.class}, new
Object[]{cmd});
}
- catch (Exception e)
+ catch(Exception e)
{
- e.printStackTrace();
- throw new RuntimeException("Fixme bad contract", e);
+ if(e instanceof CMSException)
+ {
+ throw (CMSException)e;
+ }
+ else
+ {
+ throw new CMSException(e);
+ }
}
+
+ return returnValue;
}
}
+ /**
+ *
+ */
public void startService() throws Exception
{
// Do nothing
}
+ /**
+ *
+ */
public void stopService()
{
// Do nothing
}
+ /**
+ *
+ */
public void setInvoker(HASingletonInvoker invoker)
{
this.invoker = invoker;
}
+ /**
+ *
+ */
public Object invoke(String methodName, Class[] types, Object[] args) throws
CMSException
{
- Command cmd = (Command)args[0];
- return super.execute(cmd);
+ Object result = null;
+ try
+ {
+ Command cmd = (Command)args[0];
+ result = super.execute(cmd);
+ }
+ catch(CMSException ce)
+ {
+ if (ce.toString().indexOf("Access to this resource is denied") != -1)
+ {
+ result = ce;
+ }
+ }
+ return result;
}
+ /**
+ *
+ */
public String getDisplayName()
{
return "HAJCRCMS";
}
+ /**
+ *
+ */
public void startSingleton()
{
try
@@ -127,12 +176,34 @@
}
catch (Exception e)
{
- e.printStackTrace();
+ log.error(this, e);
}
}
+ /**
+ *
+ */
public void stopSingleton()
{
super.stopService();
}
+
+ /**
+ *
+ * @param command
+ * @return
+ */
+ private JCRCommandContext getCommandContext(JCRCommand command)
+ {
+ JCRCommandContext context = null;
+
+ context = (JCRCommandContext)((JCRCommand)command).getContext();
+ if (context == null)
+ {
+ context = new JCRCommandContext(null, null, null);
+ ((JCRCommand)command).setContext(context);
+ }
+
+ return context;
+ }
}
Modified: branches/JBoss_Portal_Branch_2_7/core-cms/build.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-cms/build.xml 2008-07-17 23:23:05 UTC (rev
11492)
+++ branches/JBoss_Portal_Branch_2_7/core-cms/build.xml 2008-07-17 23:39:12 UTC (rev
11493)
@@ -381,6 +381,10 @@
<copy
todir="${jboss.home}/server/${portal-ha.deploy.dir}/jboss-portal-ha.sar/portal-cms-ha.sar"
overwrite="true">
<fileset dir="${build.lib}/portal-cms-ha-exploded.sar"/>
</copy>
+ <require
file="${jboss.home}/server/${portal-ha.node2.deploy.dir}"/>
+ <copy
todir="${jboss.home}/server/${portal-ha.node2.deploy.dir}/jboss-portal-ha.sar/portal-cms-ha.sar"
overwrite="true">
+ <fileset dir="${build.lib}/portal-cms-ha-exploded.sar"/>
+ </copy>
</target>
<!--