[jboss-svn-commits] JBL Code SVN: r18452 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Feb 10 21:22:36 EST 2008
Author: KrisVerlaenen
Date: 2008-02-10 21:22:36 -0500 (Sun, 10 Feb 2008)
New Revision: 18452
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/ThreadedWorkingMemoryFileLogger.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java
Log:
JSR-1462: Improve audit to support realtime auditing
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/ThreadedWorkingMemoryFileLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/ThreadedWorkingMemoryFileLogger.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/ThreadedWorkingMemoryFileLogger.java 2008-02-11 02:22:36 UTC (rev 18452)
@@ -0,0 +1,52 @@
+package org.drools.audit;
+
+import org.drools.WorkingMemory;
+import org.drools.audit.event.LogEvent;
+
+public class ThreadedWorkingMemoryFileLogger extends WorkingMemoryFileLogger {
+
+ private int interval = 1000;
+ private Writer writer;
+
+ public ThreadedWorkingMemoryFileLogger(WorkingMemory workingMemory) {
+ super(workingMemory);
+ setSplit(false);
+ }
+
+ public void start(int interval) {
+ this.interval = interval;
+ writer = new Writer();
+ new Thread(writer).start();
+ }
+
+ public void stop() {
+ writer.interrupt();
+ writeToDisk();
+ }
+
+ public synchronized void logEventCreated(final LogEvent logEvent) {
+ super.logEventCreated(logEvent);
+ }
+
+ public synchronized void writeToDisk() {
+ super.writeToDisk();
+ }
+
+ private class Writer implements Runnable {
+ private boolean interrupt = false;
+ public void run() {
+ while (!interrupt) {
+ try {
+ Thread.sleep(interval);
+ } catch (Throwable t) {
+ // do nothing
+ }
+ writeToDisk();
+ }
+ }
+ public void interrupt() {
+ this.interrupt = true;
+ }
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java 2008-02-11 02:22:32 UTC (rev 18451)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java 2008-02-11 02:22:36 UTC (rev 18452)
@@ -18,7 +18,6 @@
import java.io.FileNotFoundException;
import java.io.FileWriter;
-import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
@@ -45,10 +44,12 @@
*/
public class WorkingMemoryFileLogger extends WorkingMemoryLogger {
- private final List events = new ArrayList();
+ private final List<LogEvent> events = new ArrayList<LogEvent>();
private String fileName = "event";
private int maxEventsInMemory = 1000;
private int nbOfFile = 0;
+ private boolean split = true;
+ private boolean initialized = false;
/**
* Creates a new WorkingMemoryFileLogger for the given working memory.
@@ -78,27 +79,47 @@
* The log is automatically cleared afterwards.
*/
public void writeToDisk() {
- ObjectOutputStream out = null;
+ if (!initialized) {
+ initializeLog();
+ }
+ FileWriter fileWriter = null;
try {
+ fileWriter = new FileWriter(this.fileName + (this.nbOfFile == 0 ? ".log" : this.nbOfFile + ".log"), !split );
final XStream xstream = new XStream();
- out = xstream.createObjectOutputStream( new FileWriter( this.fileName + (this.nbOfFile == 0 ? ".log" : this.nbOfFile + ".log"),
- false ) );
- out.writeObject( this.events );
- this.nbOfFile++;
+ for (LogEvent event : this.events) {
+ fileWriter.write(xstream.toXML(event) + "\n");
+ }
+ if (split) {
+ this.nbOfFile++;
+ initialized = false;
+ }
clear();
} catch ( final FileNotFoundException exc ) {
throw new RuntimeException( "Could not create the log file. Please make sure that directory that the log file should be placed in does exist." );
} catch ( final Throwable t ) {
t.printStackTrace( System.err );
} finally {
- if( out != null ) { try { out.close(); } catch(Exception e) {} }
+ if( fileWriter != null ) { try { fileWriter.close(); } catch(Exception e) {} }
}
}
+ private void initializeLog() {
+ try {
+ FileWriter writer = new FileWriter(this.fileName + (this.nbOfFile == 0 ? ".log" : this.nbOfFile + ".log"), false);
+ writer.append("<object-stream>\n");
+ writer.close();
+ initialized = true;
+ } catch ( final FileNotFoundException exc ) {
+ throw new RuntimeException( "Could not create the log file. Please make sure that directory that the log file should be placed in does exist." );
+ } catch ( final Throwable t ) {
+ t.printStackTrace( System.err );
+ }
+ }
+
/**
* Clears all the events in the log.
*/
- public void clear() {
+ private void clear() {
this.events.clear();
}
@@ -122,5 +143,9 @@
writeToDisk();
}
}
+
+ public void setSplit(boolean split) {
+ this.split = split;
+ }
}
More information about the jboss-svn-commits
mailing list