Author: sohil.shah(a)jboss.com
Date: 2008-07-17 19:11:34 -0400 (Thu, 17 Jul 2008)
New Revision: 11490
Modified:
branches/JBoss_Portal_Branch_2_6/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java
branches/JBoss_Portal_Branch_2_6/cms/src/main/org/jboss/portal/cms/impl/jcr/ha/HAJCRCMS.java
branches/JBoss_Portal_Branch_2_6/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_6/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java 2008-07-17
22:47:52 UTC (rev 11489)
+++
branches/JBoss_Portal_Branch_2_6/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java 2008-07-17
23:11:34 UTC (rev 11490)
@@ -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_6/cms/src/main/org/jboss/portal/cms/impl/jcr/ha/HAJCRCMS.java
===================================================================
---
branches/JBoss_Portal_Branch_2_6/cms/src/main/org/jboss/portal/cms/impl/jcr/ha/HAJCRCMS.java 2008-07-17
22:47:52 UTC (rev 11489)
+++
branches/JBoss_Portal_Branch_2_6/cms/src/main/org/jboss/portal/cms/impl/jcr/ha/HAJCRCMS.java 2008-07-17
23:11:34 UTC (rev 11490)
@@ -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_6/core-cms/build.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_6/core-cms/build.xml 2008-07-17 22:47:52 UTC (rev
11489)
+++ branches/JBoss_Portal_Branch_2_6/core-cms/build.xml 2008-07-17 23:11:34 UTC (rev
11490)
@@ -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>
<!--
@@ -397,7 +401,7 @@
description="Undeploy."
depends="init">
<require file="${jboss.home}/server/${portal-ha.deploy.dir}"/>
- <delete
file="${jboss.home}/server/${portal-ha.deploy.dir}/portal-cms-ha.sar"/>
+ <delete
file="${jboss.home}/server/${portal-ha.deploy.dir}/portal-cms-ha.sar"/>
</target>
<target name="tests" depends="init,
_buildmagic:configure:deployment">