[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