[jbpm-commits] JBoss JBPM SVN: r4362 - jbpm3/trunk/modules/core/src/main/java/org/jbpm/logging/db.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Mar 30 16:35:29 EDT 2009


Author: bradsdavis
Date: 2009-03-30 16:35:29 -0400 (Mon, 30 Mar 2009)
New Revision: 4362

Added:
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/logging/db/FilteredDbLoggerService.java
   jbpm3/trunk/modules/core/src/main/java/org/jbpm/logging/db/FilteredDbLoggerServiceFactory.java
Log:
Added filtered logger for filtering jbpm_log messages by jBPM logger class type within the jBPM configuration.

Added: jbpm3/trunk/modules/core/src/main/java/org/jbpm/logging/db/FilteredDbLoggerService.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/logging/db/FilteredDbLoggerService.java	                        (rev 0)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/logging/db/FilteredDbLoggerService.java	2009-03-30 20:35:29 UTC (rev 4362)
@@ -0,0 +1,103 @@
+package org.jbpm.logging.db;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.Session;
+import org.jbpm.JbpmContext;
+import org.jbpm.JbpmException;
+import org.jbpm.logging.LoggingService;
+import org.jbpm.logging.log.CompositeLog;
+import org.jbpm.logging.log.ProcessLog;
+
+public class FilteredDbLoggerService implements LoggingService {
+
+	private static final Log log = LogFactory.getLog(FilteredDbLoggerService.class);
+	
+	private static final long serialVersionUID = -7522553683755123498L;
+	protected Set<Class> filteredClassesSet = null;
+	protected Session session = null;
+
+	public FilteredDbLoggerService(Set<Class> filteredClasses) {
+		
+		if(filteredClasses==null||filteredClasses.size()==0)
+		{
+			log.warn("No filtered classes exist.  Logs for JBPM have been disabled.");
+			filteredClasses = new HashSet<Class>();
+		}
+		filteredClassesSet = filteredClasses;
+		
+		JbpmContext currentJbpmContext = JbpmContext.getCurrentJbpmContext();
+		if (currentJbpmContext == null) {
+			throw new JbpmException("instantiation of the FilteredLoggerService requires a current JbpmContext");
+		}
+		
+		log.trace("Setting filtered logger service session.");
+		
+		session = currentJbpmContext.getSession();
+	}
+
+	public void log(ProcessLog processLog) {
+		if (session != null) {
+			
+			if (log.isTraceEnabled()) {
+				log.trace("Attempt to persist ProcessLog type: "+processLog.getClass());
+			}
+			if(filteredClassesSet.contains(processLog.getClass()))
+			{
+				log.trace(" + Type exists in filter. Persist.");
+				if(processLog.getParent()!=null&&!filteredClassesSet.contains(processLog.getParent().getClass()))
+				{
+					log.trace(" + Removing parent log. Parent is not contained in filter.");
+					
+					//Get rid of composite.
+					processLog.setParent(null);
+				}
+				if(CompositeLog.class.isAssignableFrom(processLog.getClass()))
+				{
+					log.trace("Is a composite log.");
+					Collection<ProcessLog> logs = ((CompositeLog)processLog).getChildren();
+					List<ProcessLog> childrenFiltered = new ArrayList<ProcessLog>();
+					for(ProcessLog childLog : logs)
+					{
+						//If the child log is not in our filter, remove it.
+						if(filteredClassesSet.contains(childLog.getClass()))
+						{
+							if(log.isTraceEnabled())
+							{
+								log.trace("It contains child type: "+childLog.getClass());
+							}
+							childrenFiltered.add(childLog);
+							continue;
+						}
+						//Assign this as the new children.
+						if(log.isTraceEnabled())
+						{
+							log.trace("Does not contain child type: "+childLog.getClass());
+						}
+					}
+					
+					log.trace("Removing children.  Already persisted filtered.");
+					((CompositeLog)processLog).setChildren(childrenFiltered);
+				}
+				session.save(processLog);
+			}
+			else
+			{
+				log.trace(" + Type does not exist in filter.");
+			}
+		}
+	}
+
+	public void close() {
+		if(log.isTraceEnabled())
+		{
+			log.trace("Closing "+FilteredDbLoggerService.class);
+		}
+	}
+}

Added: jbpm3/trunk/modules/core/src/main/java/org/jbpm/logging/db/FilteredDbLoggerServiceFactory.java
===================================================================
--- jbpm3/trunk/modules/core/src/main/java/org/jbpm/logging/db/FilteredDbLoggerServiceFactory.java	                        (rev 0)
+++ jbpm3/trunk/modules/core/src/main/java/org/jbpm/logging/db/FilteredDbLoggerServiceFactory.java	2009-03-30 20:35:29 UTC (rev 4362)
@@ -0,0 +1,84 @@
+package org.jbpm.logging.db;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jbpm.svc.Service;
+import org.jbpm.svc.ServiceFactory;
+
+/**
+ * @author Brad Davis (bradsdavis at gmail.com)
+ * 
+ * Purpose: the purpose of this logger is to limit the type of logs being persisted to the jbpm_log table.
+ * Use: From the jBPM configuration, replace the logger service with: 
+ *  <service name="logging">
+ *		<factory>
+ *			<bean name="org.jbpm.logging.db.FilteredDbLoggerServiceFactory" class="org.jbpm.logging.db.FilteredDbLoggerServiceFactory">
+ *				<field name="filteredClasses">
+ *					<list>
+ *						<string value="org.jbpm.taskmgmt.log.TaskLog"/>
+ *						<string value="org.jbpm.taskmgmt.log.SwimlaneAssignLog"/>
+ *						...
+ *					</list>
+ *				</field>
+ *			</bean>
+ *		</factory>
+ *	</service>
+ *
+ */
+public class FilteredDbLoggerServiceFactory implements ServiceFactory {
+
+	private static final Log log = LogFactory.getLog(FilteredDbLoggerServiceFactory.class);
+
+	protected Set<Class> filteredClassCollection = null;
+
+	//Populated from the jBPM configuration
+	protected List<String> filteredClasses = null;
+	
+	public Service openService() {
+		if (log.isDebugEnabled()) {
+			log.debug("Opening FilteredLoggerService.");
+		}
+		
+		if(filteredClassCollection==null&&filteredClasses!=null)
+		{
+			log.trace("Setting class collection first time.");
+			filteredClassCollection = generateClassCollection(filteredClasses);
+		}
+		
+		return new FilteredDbLoggerService(filteredClassCollection);
+	}
+
+	public void close() {
+	}
+
+	protected Set<Class> generateClassCollection(Collection<String> filteredClasses) {
+		
+		Set<Class> tempFilterCollection = new HashSet<Class>();
+		log.trace("Calling generate collection.");
+		
+		//Go ahead and build class collection.
+		for(String className : filteredClasses)
+		{
+			if (log.isTraceEnabled()) {
+				log.trace("Looking for match for: "+className);
+			}
+			//Get the class.
+			try {
+				Class located = Class.forName(className);
+				
+				tempFilterCollection.add(located);
+			}
+			catch(ClassNotFoundException e)
+			{
+				log.warn("Class: "+className+" was not found on the class loader.  Ignoring.");
+			}
+		}
+		
+		return tempFilterCollection;
+	}
+}




More information about the jbpm-commits mailing list