[jboss-svn-commits] JBL Code SVN: r16441 - labs/jbossesb/workspace/jdelong/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Nov 8 21:01:56 EST 2007


Author: jeffdelong
Date: 2007-11-08 21:01:56 -0500 (Thu, 08 Nov 2007)
New Revision: 16441

Added:
   labs/jbossesb/workspace/jdelong/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/BusinessRulesProcessor.java
Log:


Added: labs/jbossesb/workspace/jdelong/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/BusinessRulesProcessor.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/BusinessRulesProcessor.java	                        (rev 0)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/BusinessRulesProcessor.java	2007-11-09 02:01:56 UTC (rev 16441)
@@ -0,0 +1,259 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., 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.
+ */
+package org.jboss.soa.esb.actions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.jboss.internal.soa.esb.services.rules.RuleServiceException;
+import org.jboss.internal.soa.esb.services.rules.RuleServiceFactory;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.services.rules.ListenerTagNames;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.mapping.ObjectMapper;
+import org.jboss.soa.esb.message.mapping.ObjectMappingException;
+import org.jboss.soa.esb.services.registry.Registry;
+import org.jboss.soa.esb.services.registry.RegistryException;
+import org.jboss.soa.esb.services.registry.RegistryFactory;
+
+/**
+ * This action invokes the rules service (typically Drools). 
+ * We keep a HashMap of stateful session working memories.
+ * 
+ * @author jdelong at redhat.com
+ * 
+ */
+public class BusinessRulesProcessor extends AbstractActionPipelineProcessor {
+
+	public static final String OBJECT_PATH_TAG = "object-path";
+
+	public static final String OBJECT_PATH = "esb";
+
+	public static final String DEFAULT_RS_CLASS = "org.jboss.internal.soa.esb.services.rules.DroolsRuleService";
+
+	public BusinessRulesProcessor(ConfigTree config)
+			throws ConfigurationException, RegistryException,
+			RuleServiceException {
+		_config = config;
+		checkMyParms();
+		_registry = RegistryFactory.getRegistry();
+		_rs = RuleServiceFactory.getRuleService(_rsClass);
+		_rs.setConfigTree(config);
+		_mapper = new ObjectMapper(config);
+
+	}
+
+	/** 
+	 * Invoke the appropriate rule service method based on the attributes in the message and 
+	 * configuration
+	 *  
+	 * @param message
+	 * @return Message
+	 * @throws ActionProcessingException
+	 */
+	public Message process(Message message) throws ActionProcessingException {
+		try {
+			List<Object> objectList = _mapper.createObjectList(message,
+					_messagePathList);
+			if (message.getProperties().getProperty("dispose") != null) {
+				_dispose = (Boolean) message.getProperties().getProperty(
+						"dispose");
+			}
+			if (message.getProperties().getProperty("continue") != null) {
+				_continue = (Boolean) message.getProperties().getProperty(
+						"continue");
+			}
+
+			if (!_stateful) {
+
+				if (_ruleSet != null) {
+					_rs.executeStatelessRules(_ruleSet, _ruleLanguage,
+							_ruleReload, message, objectList);
+				}
+
+				if (_decisionTable != null) {
+					_rs.executeStatelessRulesFromDecisionTable(_decisionTable,
+							_ruleReload, message, objectList);
+				}
+
+				if (_ruleAgentProperties != null) {
+					_rs.executeStatelessRulesFromRuleAgent(
+							_ruleAgentProperties, message, objectList);
+				}
+
+			} else {
+				if (_continue) {
+					if (_ruleSet != null) {
+						_rs.continueStatefulRulesExecution(_ruleSet, _dispose,
+								message, objectList);
+					}
+
+					if (_decisionTable != null) {
+						_rs.continueStatefulRulesExecution(_decisionTable,
+								_dispose, message, objectList);
+					}
+
+					if (_ruleAgentProperties != null) {
+						_rs.continueStatefulRulesExecution(
+								_ruleAgentProperties, _dispose, message,
+								objectList);
+					}
+
+				} else {
+					if (_ruleSet != null) {
+						_rs.executeStatefulRules(_ruleSet, _ruleLanguage,
+								_ruleReload, _dispose, message, objectList);
+					}
+
+					if (_decisionTable != null) {
+						_rs.executeStatefulRulesFromDecisionTable(
+								_decisionTable, _ruleReload, _dispose, message,
+								objectList);
+					}
+
+					if (_ruleAgentProperties != null) {
+						_rs.executeStatefulRulesFromRuleAgent(
+								_ruleAgentProperties, _dispose, message,
+								objectList);
+					}
+				}
+
+			}
+
+		} catch (ObjectMappingException ome) {
+			throw new ActionProcessingException(ome.getMessage(), ome);
+		} catch (RuleServiceException mre) {
+			throw new ActionProcessingException(mre.getMessage(), mre);
+		}
+		return message;
+	}
+
+	/**
+	 * Reading the piece of configTree specific to the RuleService, and setting the
+	 * configuration.
+	 *
+	 * @throws ConfigurationException
+	 */
+	protected void checkMyParms() throws ConfigurationException {
+		if (_config.getAttribute(ListenerTagNames.RULE_SET_TAG) == null
+				&& _config.getAttribute(ListenerTagNames.DECISION_TABLE_TAG) == null
+				&& _config
+						.getAttribute(ListenerTagNames.RULE_AGENT_PROPERTIES_TAG) == null) {
+
+			_logger.error("One of the following attributes "
+					+ ListenerTagNames.RULE_SET_TAG + ", "
+					+ ListenerTagNames.DECISION_TABLE_TAG + ", "
+					+ ListenerTagNames.RULE_AGENT_PROPERTIES_TAG
+					+ " is required, and none of them were found in "
+					+ _config.getName() + ".");
+			throw new ConfigurationException("One of the Required attributes: "
+					+ ListenerTagNames.RULE_SET_TAG + ", "
+					+ ListenerTagNames.DECISION_TABLE_TAG + ", "
+					+ ListenerTagNames.RULE_AGENT_PROPERTIES_TAG
+					+ " was not found.");
+		} else {
+			if (_config.getAttribute(ListenerTagNames.RULE_SET_TAG) != null) {
+				_ruleSet = _config.getAttribute(ListenerTagNames.RULE_SET_TAG);
+				_ruleLanguage = _config
+						.getAttribute(ListenerTagNames.RULE_LANGUAGE_TAG);
+			}
+
+			if (_config.getAttribute(ListenerTagNames.DECISION_TABLE_TAG) != null) {
+				_decisionTable = _config
+						.getAttribute(ListenerTagNames.DECISION_TABLE_TAG);
+			}
+
+			if (_config
+					.getAttribute(ListenerTagNames.RULE_AGENT_PROPERTIES_TAG) != null) {
+				_ruleAgentProperties = _config
+						.getAttribute(ListenerTagNames.RULE_AGENT_PROPERTIES_TAG);
+			}
+
+			String ruleReload = _config
+					.getAttribute(ListenerTagNames.RULE_RELOAD_TAG);
+			if (ruleReload != null && "true".equals(ruleReload)) {
+				_ruleReload = true;
+			}
+
+			String stateful = _config
+					.getAttribute(ListenerTagNames.STATEFUL_TAG);
+			if (stateful != null && "true".equals(stateful)) {
+				_stateful = true;
+			}
+
+		}
+		if (_config.getAttribute(ListenerTagNames.RS_CLASS) != null) {
+			_rsClass = _config.getAttribute(ListenerTagNames.RS_CLASS);
+		} else {
+			_rsClass = DEFAULT_RS_CLASS;
+		}
+
+		_messagePathList = new ArrayList<String>();
+		ConfigTree[] objectList = _config.getChildren(OBJECT_PATH_TAG);
+		if (objectList != null) {
+			for (ConfigTree curr : objectList) {
+				try {
+					String objectPath = curr.getRequiredAttribute(OBJECT_PATH);
+					_messagePathList.add(objectPath);
+				} catch (Exception e) {
+					throw new ConfigurationException(
+							"Problems with object path list", e);
+				}
+			}
+		}
+
+	}
+
+	protected ConfigTree _config;
+
+	protected String _rsClass;
+
+	protected String _ruleSet;
+
+	protected String _ruleLanguage;
+
+	protected String _decisionTable;
+
+	protected String _ruleAgentProperties;
+
+	protected boolean _ruleReload;
+
+	protected boolean _dispose = true;
+
+	protected boolean _continue;
+
+	protected boolean _stateful = false;
+
+	protected List<String> _messagePathList;
+
+	protected ObjectMapper _mapper;
+
+	protected Registry _registry;
+
+	protected org.jboss.soa.esb.services.rules.RuleService _rs;
+
+	protected static Logger _logger = Logger
+			.getLogger(BusinessRulesProcessor.class);
+
+}




More information about the jboss-svn-commits mailing list