[jboss-svn-commits] JBL Code SVN: r36153 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/compiler and 13 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Dec 1 22:47:41 EST 2010
Author: mark.proctor at jboss.com
Date: 2010-12-01 22:47:39 -0500 (Wed, 01 Dec 2010)
New Revision: 36153
Added:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/util/FastClassLoader.java
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DroolsCompositeClassLoader.java
Modified:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/util/CompositeClassLoader.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectRuntimeData.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectRuntimeRegistry.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectRuntimeData.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectRuntimeData.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/MVELClassFieldExtractorTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DroolsObjectIOTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/ClassBuilderTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/InstancesHashcodedTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/PackageCompilationDataTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/time/impl/CronJobTest.java
Log:
JBRULES-2813 Unify two Composite ClassLoader implementations
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/util/CompositeClassLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/util/CompositeClassLoader.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/util/CompositeClassLoader.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -29,6 +29,10 @@
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicReference;
+/**
+ * This is an Internal Drools Class
+ *
+ */
public class CompositeClassLoader extends ClassLoader {
/* Assumption: modifications are really rare, but iterations are frequent. */
private final List<ClassLoader> classLoaders = new CopyOnWriteArrayList<ClassLoader>();
@@ -76,11 +80,34 @@
*/
public Class< ? > loadClass(final String name,
final boolean resolve) throws ClassNotFoundException {
- return loader.get().load( this,
- name,
- resolve );
+ Class cls = loader.get().load( this,
+ name,
+ resolve );
+ if ( cls == null ) {
+ throw new ClassNotFoundException( "Unable to load class: " + name );
+ }
+
+ return cls;
}
-
+
+ /**
+ * This ClassLoader never has classes of it's own, so only search the child ClassLoaders
+ * and the parent ClassLoader if one is provided
+ */
+ public Class< ? > loadClass(final String name,
+ final boolean resolve,
+ final ClassLoader ignore) throws ClassNotFoundException {
+ Class cls = loader.get().load( this,
+ name,
+ resolve,
+ ignore );
+ if ( cls == null ) {
+ throw new ClassNotFoundException( "Unable to load class" + name );
+ }
+
+ return cls;
+ }
+
/**
* This ClassLoader never has classes of it's own, so only search the child ClassLoaders
* and the parent ClassLoader if one is provided
@@ -135,6 +162,11 @@
final String name,
final boolean resolve);
+ public Class< ? > load(CompositeClassLoader compositeClassLoader,
+ String name,
+ boolean resolve,
+ java.lang.ClassLoader ignore);
+
public void reset();
}
@@ -151,32 +183,42 @@
public Class< ? > load(final CompositeClassLoader cl,
final String name,
final boolean resolve) {
+ return load(cl, name, resolve, null);
+ }
+
+ public Class< ? > load(CompositeClassLoader cl,
+ String name,
+ boolean resolve,
+ ClassLoader ignore) {
// search the child ClassLoaders
Class< ? > cls = null;
for ( final ClassLoader classLoader : cl.classLoaders ) {
- try {
- cls = Class.forName( name,
- true,
- classLoader );
- } catch ( ClassNotFoundException e ) {
- // swallow as we need to check more classLoaders
+ if ( classLoader != ignore ) {
+ if ( classLoader instanceof FastClassLoader ) {
+ cls = ((FastClassLoader)classLoader).fastFindClass( name );
+ } else {
+ // we ignore a calling classloader, to stop recursion
+ try {
+ cls = Class.forName( name,
+ resolve,
+ classLoader );
+ } catch ( ClassNotFoundException e ) {
+ // swallow as we need to check more classLoaders
+ }
+ }
+ if ( cls != null ) {
+ break;
+ }
}
- if ( cls != null ) {
- break;
- }
}
- if ( resolve ) {
- cl.resolveClass( cls );
- }
-
return cls;
}
-
+
public void reset() {
// nothing to do
- }
+ }
}
private static class CachingLoader
@@ -191,6 +233,13 @@
public Class< ? > load(final CompositeClassLoader cl,
final String name,
final boolean resolve) {
+ return load(cl, name, resolve, null);
+ }
+
+ public Class< ? > load(CompositeClassLoader cl,
+ String name,
+ boolean resolve,
+ ClassLoader ignore) {
if ( classLoaderResultMap.containsKey( name ) ) {
cacheHits++;
return (Class< ? >) classLoaderResultMap.get( name );
@@ -199,40 +248,45 @@
Class< ? > cls = null;
for ( final ClassLoader classLoader : cl.classLoaders ) {
- try {
- cls = Class.forName( name,
- true,
- classLoader );
- } catch ( ClassNotFoundException e ) {
- // swallow as we need to check more classLoaders
+ if ( classLoader != ignore ) {
+ if ( classLoader instanceof FastClassLoader ) {
+ cls = ((FastClassLoader)classLoader).fastFindClass( name );
+ } else {
+ // we ignore a calling classloader, to stop recursion
+ try {
+ cls = Class.forName( name,
+ resolve,
+ classLoader );
+ } catch ( ClassNotFoundException e ) {
+ // swallow as we need to check more classLoaders
+ }
+ }
+ if ( cls != null ) {
+ break;
+ }
}
- if ( cls != null ) {
- break;
- }
}
-
- if ( resolve ) {
- cl.resolveClass( cls );
- }
-
- classLoaderResultMap.put( name,
- cls );
if ( cls != null ) {
+ classLoaderResultMap.put( name,
+ cls );
+
this.successfulCalls++;
} else {
this.failedCalls++;
}
return cls;
- }
-
+ }
+
public void reset() {
+ this.classLoaderResultMap.clear();
this.successfulCalls = this.failedCalls = this.cacheHits = 0;
}
public String toString() {
return new StringBuilder().append( "TotalCalls: " ).append( successfulCalls + failedCalls + cacheHits ).append( " CacheHits: " ).append( cacheHits ).append( " successfulCalls: " ).append( successfulCalls ).append( " FailedCalls: " ).append( failedCalls ).toString();
}
+
}
private static class CompositeEnumeration<URL>
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/util/FastClassLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/util/FastClassLoader.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/util/FastClassLoader.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -0,0 +1,5 @@
+package org.drools.util;
+
+public interface FastClassLoader {
+ public Class<?> fastFindClass(String name);
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -70,7 +70,6 @@
import org.drools.lang.dsl.DSLTokenizedMappingFile;
import org.drools.lang.dsl.DefaultExpander;
import org.drools.reteoo.ReteooRuleBase;
-import org.drools.rule.DroolsCompositeClassLoader;
import org.drools.rule.Function;
import org.drools.rule.ImportDeclaration;
import org.drools.rule.JavaDialectRuntimeData;
@@ -85,6 +84,7 @@
import org.drools.spi.InternalReadAccessor;
import org.drools.type.DateFormats;
import org.drools.type.DateFormatsImpl;
+import org.drools.util.CompositeClassLoader;
import org.drools.xml.XmlChangeSetReader;
import org.xml.sax.SAXException;
@@ -120,7 +120,7 @@
*/
private final String defaultDialect;
- private DroolsCompositeClassLoader rootClassLoader;
+ private CompositeClassLoader rootClassLoader;
private Map<String, Class< ? >> globals;
@@ -185,8 +185,7 @@
//this.environment.set( EnvironmentName.DATE_FORMATS , this.dateFormats );
}
- this.rootClassLoader = new DroolsCompositeClassLoader( this.configuration.getClassLoader(),
- this.configuration.isClassLoaderCacheEnabled() );
+ this.rootClassLoader = this.configuration.getClassLoader();
this.defaultDialect = this.configuration.getDefaultDialect();
@@ -215,8 +214,7 @@
if ( ruleBase != null ) {
this.rootClassLoader = ((InternalRuleBase) ruleBase).getRootClassLoader();
} else {
- this.rootClassLoader = new DroolsCompositeClassLoader( this.configuration.getClassLoader(),
- this.configuration.isClassLoaderCacheEnabled() );
+ this.rootClassLoader = this.configuration.getClassLoader();
}
this.dateFormats = null;//(DateFormats) this.environment.get( EnvironmentName.DATE_FORMATS );
@@ -1512,7 +1510,7 @@
return name.toUpperCase().charAt( 0 ) + name.substring( 1 );
}
- public DroolsCompositeClassLoader getRootClassLoader() {
+ public CompositeClassLoader getRootClassLoader() {
return this.rootClassLoader;
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -317,7 +317,7 @@
configuration );
}
- public ClassLoader getClassLoader() {
+ public CompositeClassLoader getClassLoader() {
return this.classLoader;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaFunctionBuilder.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -100,8 +100,6 @@
final String text = String.valueOf(TemplateRuntime.eval( template, null, new MapVariableResolverFactory(vars)));
- //System.out.println( text );
-
final BufferedReader reader = new BufferedReader( new StringReader( text ) );
String line = null;
final String lineStartsWith = " public static " + functionDescr.getReturnType() + " " + functionDescr.getName();
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel 2010-12-02 03:47:39 UTC (rev 36153)
@@ -350,7 +350,6 @@
public void evaluate(org.drools.spi.KnowledgeHelper knowledgeHelper,
org.drools.WorkingMemory workingMemory) throws Exception {
-
org.drools.spi.Tuple tuple = knowledgeHelper.getTuple();
org.drools.rule.Declaration[] declarations = knowledgeHelper.getRule().getDeclarations();
@@ -359,7 +358,7 @@
@{type} @{declr.identifier} = ( @{type} ) declarations[@{index}].@{declr.nativeReadMethod.name}((org.drools.common.InternalWorkingMemory) workingMemory, @{declr.identifier}__Handle__.getObject() );
@if{notPattern}@{declr.identifier}__Handle__ = (org.drools.common.InternalFactHandle) knowledgeHelper.getWorkingMemory().getFactHandle( @{declr.identifier} );@end{}
knowledgeHelper.getIdentityMap().put(@{declr.identifier}, @{declr.identifier}__Handle__ );
- @end{}
+ @end{}
@foreach{type : globalTypes, identifier : globals} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
@end{}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -67,7 +67,6 @@
import org.drools.reteoo.ReteooRuleBase;
import org.drools.rule.Behavior;
import org.drools.rule.Declaration;
-import org.drools.rule.DroolsCompositeClassLoader;
import org.drools.rule.EvalCondition;
import org.drools.rule.GroupElement;
import org.drools.rule.JavaDialectRuntimeData;
@@ -85,6 +84,8 @@
import org.drools.spi.CompiledInvoker;
import org.drools.spi.PropagationContext;
import org.drools.spi.Tuple;
+import org.drools.util.ClassLoaderUtil;
+import org.drools.util.CompositeClassLoader;
public class PackageBuilderTest extends DroolsTestCase {
@@ -1026,8 +1027,7 @@
assertFalse( builder.hasErrors() );
Package bp = builder.getPackage();
- DroolsCompositeClassLoader rootClassloader = new DroolsCompositeClassLoader( Thread.currentThread().getContextClassLoader(),
- false );
+ CompositeClassLoader rootClassloader = ClassLoaderUtil.getClassLoader( new ClassLoader[] { Thread.currentThread().getContextClassLoader() } , getClass(), false );
JavaDialectRuntimeData dialectData = (JavaDialectRuntimeData) bp.getDialectRuntimeRegistry().getDialectData( "java" );
dialectData.onAdd( bp.getDialectRuntimeRegistry(),
rootClassloader );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -5370,7 +5370,13 @@
public void testDynamicallyAddInitialFactRule() throws Exception {
PackageBuilder builder = new PackageBuilder();
- String rule = "package org.drools.test\n global java.util.List list\n rule xxx\n when\n i:Integer()\nthen\n list.add(i);\nend";
+ String rule = "package org.drools.test\n" +
+ "global java.util.List list\n" +
+ "rule xxx when\n" +
+ " i:Integer()\n" +
+ "then\n" +
+ " list.add(i);\n"+
+ "end";
builder.addPackageFromDrl( new StringReader( rule ) );
Package pkg = builder.getPackage();
@@ -5390,7 +5396,12 @@
list.get( 0 ) );
builder = new PackageBuilder();
- rule = "package org.drools.test\n global java.util.List list\n rule xxx\n when\nthen\n list.add(\"x\");\nend";
+ rule = "package org.drools.test\n"+
+ "global java.util.List list\n" +
+ "rule xxx when\n" +
+ "then\n" +
+ " list.add(\"x\");\n"+
+ "end";
builder.addPackageFromDrl( new StringReader( rule ) );
pkg = builder.getPackage();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -781,7 +781,7 @@
return this.conflictResolver;
}
- public ClassLoader getClassLoader() {
+ public CompositeClassLoader getClassLoader() {
return classLoader;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELConsequence.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -32,87 +32,94 @@
import org.mvel2.compiler.CompiledExpression;
import org.mvel2.debug.DebugTools;
-public class MVELConsequence implements Consequence, MVELCompileable,
- Externalizable {
- private static final long serialVersionUID = 510l;
+public class MVELConsequence
+ implements
+ Consequence,
+ MVELCompileable,
+ Externalizable {
+ private static final long serialVersionUID = 510l;
- private MVELCompilationUnit unit;
- private String id;
+ private MVELCompilationUnit unit;
+ private String id;
- private Serializable expr;
- private DroolsMVELFactory prototype;
+ private Serializable expr;
+ private DroolsMVELFactory prototype;
- public MVELConsequence() {
- }
+ public MVELConsequence() {
+ }
- public MVELConsequence(final MVELCompilationUnit unit, final String id) {
- this.unit = unit;
- this.id = id;
- }
+ public MVELConsequence(final MVELCompilationUnit unit,
+ final String id) {
+ this.unit = unit;
+ this.id = id;
+ }
- public void readExternal(ObjectInput in) throws IOException,
- ClassNotFoundException {
- unit = (MVELCompilationUnit) in.readObject();
- id = in.readUTF();
- }
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ unit = (MVELCompilationUnit) in.readObject();
+ id = in.readUTF();
+ }
- public void writeExternal(ObjectOutput out) throws IOException {
- out.writeObject(unit);
- out.writeUTF(id);
- }
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( unit );
+ out.writeUTF( id );
+ }
- public void compile(ClassLoader classLoader) {
- expr = unit.getCompiledExpression(classLoader);
- prototype = unit.getFactory();
- }
+ public void compile(ClassLoader classLoader) {
+ expr = unit.getCompiledExpression( classLoader );
+ prototype = unit.getFactory();
+ }
- public void evaluate(final KnowledgeHelper knowledgeHelper,
- final WorkingMemory workingMemory) throws Exception {
- DroolsMVELFactory factory = (DroolsMVELFactory) this.prototype.clone();
+ public void evaluate(final KnowledgeHelper knowledgeHelper,
+ final WorkingMemory workingMemory) throws Exception {
+ DroolsMVELFactory factory = (DroolsMVELFactory) this.prototype.clone();
- factory.setContext(knowledgeHelper.getTuple(), knowledgeHelper, null,
- workingMemory, null);
+ factory.setContext( knowledgeHelper.getTuple(),
+ knowledgeHelper,
+ null,
+ workingMemory,
+ null );
- // do we have any functions for this namespace?
- Package pkg = workingMemory.getRuleBase().getPackage("MAIN");
- if (pkg != null) {
- MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkg
- .getDialectRuntimeRegistry().getDialectData(this.id);
- factory.setNextFactory(data.getFunctionFactory());
- }
+ // do we have any functions for this namespace?
+ Package pkg = workingMemory.getRuleBase().getPackage( "MAIN" );
+ if ( pkg != null ) {
+ MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkg
+ .getDialectRuntimeRegistry().getDialectData( this.id );
+ factory.setNextFactory( data.getFunctionFactory() );
+ }
- CompiledExpression compexpr = (CompiledExpression) this.expr;
+ CompiledExpression compexpr = (CompiledExpression) this.expr;
- pkg = knowledgeHelper.getWorkingMemory().getRuleBase().getPackage(
- knowledgeHelper.getRule().getPackage());
+ pkg = knowledgeHelper.getWorkingMemory().getRuleBase().getPackage(knowledgeHelper.getRule().getPackage() );
- ClassLoader tempClassLoader = Thread.currentThread()
- .getContextClassLoader();
- Thread.currentThread().setContextClassLoader(
- ((InternalRuleBase) workingMemory.getRuleBase())
- .getRootClassLoader());
+ ClassLoader tempClassLoader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader( ((InternalRuleBase) workingMemory.getRuleBase()).getRootClassLoader() );
- try {
- if (MVELDebugHandler.isDebugMode()) {
- if (MVELDebugHandler.verbose) {
- System.out.println("Executing expression " + compexpr.getSourceName());
- System.out.println(DebugTools.decompile(compexpr));
- }
- MVEL.executeDebugger(compexpr, null, factory);
- } else {
- MVEL.executeExpression(compexpr, null, factory);
- }
- } finally {
- Thread.currentThread().setContextClassLoader(tempClassLoader);
- }
- }
+ try {
+ if ( MVELDebugHandler.isDebugMode() ) {
+ if ( MVELDebugHandler.verbose ) {
+ System.out.println( "Executing expression " + compexpr.getSourceName() );
+ System.out.println( DebugTools.decompile( compexpr ) );
+ }
+ MVEL.executeDebugger( compexpr,
+ null,
+ factory );
+ } else {
+ MVEL.executeExpression( compexpr,
+ null,
+ factory );
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader( tempClassLoader );
+ }
+ }
- public Serializable getCompExpr() {
- return expr;
- }
-
+ public Serializable getCompExpr() {
+ return expr;
+ }
+
public String getName() {
return "default";
- }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -52,7 +52,6 @@
import org.drools.impl.EnvironmentFactory;
import org.drools.management.DroolsManagementAgent;
import org.drools.rule.DialectRuntimeRegistry;
-import org.drools.rule.DroolsCompositeClassLoader;
import org.drools.rule.Function;
import org.drools.rule.ImportDeclaration;
import org.drools.rule.InvalidPatternException;
@@ -60,6 +59,8 @@
import org.drools.rule.Rule;
import org.drools.rule.TypeDeclaration;
import org.drools.spi.FactHandleFactory;
+import org.drools.util.ClassLoaderUtil;
+import org.drools.util.CompositeClassLoader;
/**
* Implementation of <code>RuleBase</code>.
@@ -87,7 +88,7 @@
private Map agendaGroupRuleTotals;
- private transient DroolsCompositeClassLoader rootClassLoader;
+ private transient CompositeClassLoader rootClassLoader;
/**
* The fact handle factory.
@@ -153,8 +154,8 @@
this.agendaGroupRuleTotals = new HashMap();
}
- this.rootClassLoader = new DroolsCompositeClassLoader( this.config.getClassLoader(),
- this.config.isClassLoaderCacheEnabled() );
+ this.rootClassLoader = this.config.getClassLoader();
+
this.pkgs = new HashMap<String, Package>();
this.processes = new HashMap();
this.globals = new HashMap<String, Class< ? >>();
@@ -255,8 +256,10 @@
}
boolean classLoaderCacheEnabled = droolsStream.readBoolean();
- this.rootClassLoader = new DroolsCompositeClassLoader( droolsStream.getParentClassLoader(),
+ this.rootClassLoader = ClassLoaderUtil.getClassLoader( new ClassLoader[] { droolsStream.getParentClassLoader() },
+ getClass(),
classLoaderCacheEnabled );
+
droolsStream.setClassLoader( this.rootClassLoader );
droolsStream.setRuleBase( this );
@@ -976,7 +979,7 @@
return this.config;
}
- public DroolsCompositeClassLoader getRootClassLoader() {
+ public CompositeClassLoader getRootClassLoader() {
return this.rootClassLoader;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -30,11 +30,11 @@
import org.drools.reteoo.Rete;
import org.drools.reteoo.ReteooBuilder;
import org.drools.reteoo.ReteooWorkingMemory;
-import org.drools.rule.DroolsCompositeClassLoader;
import org.drools.rule.Package;
import org.drools.rule.TypeDeclaration;
import org.drools.spi.FactHandleFactory;
import org.drools.spi.PropagationContext;
+import org.drools.util.CompositeClassLoader;
public interface InternalRuleBase
extends
@@ -100,7 +100,7 @@
PropagationContext context,
ReteooWorkingMemory workingMemory) throws FactException;
- public DroolsCompositeClassLoader getRootClassLoader();
+ public CompositeClassLoader getRootClassLoader();
public Rete getRete();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectRuntimeData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectRuntimeData.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectRuntimeData.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -16,7 +16,9 @@
package org.drools.rule;
+import org.drools.util.CompositeClassLoader;
+
public interface DialectRuntimeData extends Cloneable {
public void removeRule(Package pkg, Rule rule);
@@ -30,10 +32,10 @@
public void reload();
- public DialectRuntimeData clone(DialectRuntimeRegistry registry, DroolsCompositeClassLoader rootClassLoader);
+ public DialectRuntimeData clone(DialectRuntimeRegistry registry, CompositeClassLoader rootClassLoader);
public void onAdd(DialectRuntimeRegistry dialectRuntimeRegistry,
- DroolsCompositeClassLoader rootClassLoader);
+ CompositeClassLoader rootClassLoader);
public void onRemove();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectRuntimeRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectRuntimeRegistry.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DialectRuntimeRegistry.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -25,6 +25,8 @@
import java.util.Map;
import java.util.Map.Entry;
+import org.drools.util.CompositeClassLoader;
+
public class DialectRuntimeRegistry
implements
Externalizable {
@@ -60,12 +62,12 @@
this.lineMappings = (Map) stream.readObject();
}
- public void onAdd(DroolsCompositeClassLoader rootClassLoader) {
+ public void onAdd(CompositeClassLoader rootClassLoader) {
//this.classLoader = rootClassLoader;
for ( Iterator it = this.dialects.values().iterator(); it.hasNext(); ) {
DialectRuntimeData data = (DialectRuntimeData) it.next();
data.onAdd( this,
- rootClassLoader );
+ rootClassLoader );
}
}
@@ -103,7 +105,7 @@
}
public void merge(DialectRuntimeRegistry newDatas,
- DroolsCompositeClassLoader rootClassLoader) {
+ CompositeClassLoader rootClassLoader) {
for ( Entry<String, DialectRuntimeData> entry : newDatas.dialects.entrySet() ) {
DialectRuntimeData data = this.dialects.get( entry.getKey() );
if ( data == null ) {
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DroolsCompositeClassLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DroolsCompositeClassLoader.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DroolsCompositeClassLoader.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -1,136 +0,0 @@
-/**
- * Copyright 2010 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.drools.rule;
-
-import java.io.InputStream;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import org.drools.core.util.DroolsClassLoader;
-
-/**
- * A classloader that loads from a (dynamic) list of sub-classloaders.
- */
-public class DroolsCompositeClassLoader extends ClassLoader
- implements
- DroolsClassLoader {
-
- /* Assumption: modifications are really rare, but iterations are frequent. */
- private final List<ClassLoader> classLoaders = new CopyOnWriteArrayList<ClassLoader>();
- private final boolean hasParent;
-
- public DroolsCompositeClassLoader(final ClassLoader parentClassLoader,
- final boolean cacheParentCalls) {
- super( parentClassLoader );
- this.hasParent = parentClassLoader != null;
- }
-
- public synchronized void addClassLoader(final ClassLoader classLoader) {
- if ( classLoader == null || classLoader == this ) {
- // do not add a null classloader or add itself
- return;
- }
- /* NB: we need synchronized here even though we use a COW list:
- * two threads may try to add the same new class loader, so we need
- * to protect over a bigger area than just a single iteration.
- */
- // don't add duplicate ClassLoaders;
- for ( final ClassLoader cl : this.classLoaders ) {
- if ( cl == classLoader ) {
- return;
- }
- }
- this.classLoaders.add( classLoader );
- }
-
- public synchronized void removeClassLoader(final ClassLoader classLoader) {
- /* synchronized to protect against concurrent runs of
- * addClassLoader(x) and removeClassLoader(x).
- */
- classLoaders.remove( classLoader );
- }
-
- /**
- * Search the list of child ClassLoaders
- */
- public Class< ? > fastFindClass(final String name) {
- for ( final ClassLoader classLoader : this.classLoaders ) {
- final Class< ? > cls = ((DroolsClassLoader) classLoader).fastFindClass( name );
- if ( cls != null ) {
- return cls;
- }
- }
- return null;
- }
-
- /**
- * This ClassLoader never has classes of it's own, so only search the child ClassLoaders
- * and the parent ClassLoader if one is provided
- */
- public Class< ? > loadClass(final String name,
- final boolean resolve) throws ClassNotFoundException {
- // search the child ClassLoaders
- Class< ? > cls;
- cls = fastFindClass( name );
-
- // still not found so search the parent ClassLoader
- if ( this.hasParent && cls == null ) {
- cls = Class.forName( name,
- true,
- getParent() );
- }
-
- if ( resolve ) {
- resolveClass( cls );
- }
-
- return cls;
- }
-
- /**
- * This ClassLoader never has classes of it's own, so only search the child ClassLoaders
- * and the parent ClassLoader if one is provided
- */
- public InputStream getResourceAsStream(final String name) {
- for ( final ClassLoader classLoader : this.classLoaders ) {
- InputStream stream = classLoader.getResourceAsStream( name );
- if ( stream != null ) {
- return stream;
- }
- }
-
- if ( this.hasParent ) {
- return getParent().getResourceAsStream( name );
- }
-
- return null;
-
- }
-
- /**
- * This ClassLoader never has classes of it's own, so only search the child ClassLoaders
- */
- protected Class< ? > findClass(final String name) throws ClassNotFoundException {
- final Class< ? > cls = fastFindClass( name );
-
- if ( cls == null ) {
- throw new ClassNotFoundException( name );
- }
- return cls;
- }
-
-}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectRuntimeData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectRuntimeData.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectRuntimeData.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -46,6 +46,8 @@
import org.drools.core.util.KeyStoreHelper;
import org.drools.core.util.StringUtils;
import org.drools.spi.Wireable;
+import org.drools.util.CompositeClassLoader;
+import org.drools.util.FastClassLoader;
public class JavaDialectRuntimeData
implements
@@ -67,7 +69,7 @@
private transient PackageClassLoader classLoader;
- private transient DroolsCompositeClassLoader rootClassLoader;
+ private transient CompositeClassLoader rootClassLoader;
private boolean dirty;
@@ -216,7 +218,7 @@
}
public void onAdd(DialectRuntimeRegistry registry,
- DroolsCompositeClassLoader rootClassLoader) {
+ CompositeClassLoader rootClassLoader) {
this.registry = registry;
this.rootClassLoader = rootClassLoader;
this.classLoader = new PackageClassLoader( this,
@@ -247,7 +249,7 @@
}
public DialectRuntimeData clone(DialectRuntimeRegistry registry,
- DroolsCompositeClassLoader rootClassLoader) {
+ CompositeClassLoader rootClassLoader) {
DialectRuntimeData cloneOne = new JavaDialectRuntimeData();
cloneOne.merge( registry,
this );
@@ -518,24 +520,38 @@
getInvokers().remove( className );
}
- public static class PackageClassLoader extends ClassLoader
- implements
- DroolsClassLoader {
+ /**
+ * This is an Internal Drools Class
+ *
+ */
+ public static class PackageClassLoader extends ClassLoader implements FastClassLoader {
private JavaDialectRuntimeData store;
- DroolsCompositeClassLoader rootClassLoader;
+ CompositeClassLoader rootClassLoader;
- private Map<String, Object> cache = new HashMap<String, Object>();
- private long successfulCalls = 0;
- private long failedCalls = 0;
- private long cacheHits = 0;
-
public PackageClassLoader(JavaDialectRuntimeData store,
- DroolsCompositeClassLoader rootClassLoader) {
+ CompositeClassLoader rootClassLoader) {
super( rootClassLoader );
this.rootClassLoader = rootClassLoader;
this.store = store;
}
+ public Class< ? > loadClass(final String name,
+ final boolean resolve) throws ClassNotFoundException {
+ Class< ? > cls = fastFindClass( name );
+
+ if ( cls == null ) {
+ final CompositeClassLoader parent = ( CompositeClassLoader ) getParent();
+ cls = parent.loadClass( name, resolve, this );
+ }
+
+ if ( cls == null ) {
+ throw new ClassNotFoundException("Unable to load class: " + name);
+ }
+
+ return cls;
+ }
+
+
public Class< ? > fastFindClass(final String name) {
Class< ? > cls = findLoadedClass( name );
@@ -554,61 +570,22 @@
"",
null );
}
+
cls = defineClass( name,
clazzBytes,
0,
clazzBytes.length,
PROTECTION_DOMAIN );
}
+
+ if ( cls != null ) {
+ resolveClass( cls );
+ }
}
-
+
return cls;
}
- public Class< ? > loadClass(final String name,
- final boolean resolve) throws ClassNotFoundException {
- try {
- if ( cache.containsKey( name ) ) {
- this.cacheHits++;
- Object result = cache.get( name );
- if ( result instanceof ClassNotFoundException ) {
- throw (ClassNotFoundException) result;
- } else {
- return (Class< ? >) result;
- }
- }
- Class< ? > cls = fastFindClass( name );
- if ( cls == null ) {
- final ClassLoader parent = getParent();
- if ( parent != null ) {
- cls = Class.forName( name,
- true,
- parent );
- }
- }
- if ( resolve && cls != null ) {
- resolveClass( cls );
- }
- if ( cls != null ) {
- this.successfulCalls++;
- } else {
- this.failedCalls++;
- }
- cache.put( name,
- cls );
- return cls;
- } catch ( ClassNotFoundException e ) {
- this.failedCalls++;
- cache.put( name,
- e );
- throw e;
- }
- }
-
- protected Class< ? > findClass(final String name) throws ClassNotFoundException {
- return fastFindClass( name );
- }
-
public InputStream getResourceAsStream(final String name) {
final byte[] clsBytes = this.store.read( name );
if ( clsBytes != null ) {
@@ -616,16 +593,6 @@
}
return null;
}
-
- public void reset() {
- this.cacheHits = this.failedCalls = this.successfulCalls = 0;
- this.cache.clear();
- }
-
- public void printStats() {
- System.out.println( "CacheHits = " + this.cacheHits + "\nSuccessful=" + this.successfulCalls + "\nFailed=" + this.failedCalls + "\n" );
-
- }
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectRuntimeData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectRuntimeData.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MVELDialectRuntimeData.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -30,6 +30,7 @@
import org.drools.base.mvel.MVELCompileable;
import org.drools.spi.Wireable;
+import org.drools.util.CompositeClassLoader;
import org.mvel2.integration.VariableResolver;
import org.mvel2.integration.impl.MapVariableResolverFactory;
@@ -41,7 +42,7 @@
private Map<Wireable, MVELCompileable> invokerLookups;
- private DroolsCompositeClassLoader rootClassLoader;
+ private CompositeClassLoader rootClassLoader;
private List<Wireable> wireList = Collections.<Wireable> emptyList();
@@ -86,7 +87,7 @@
}
public DialectRuntimeData clone(DialectRuntimeRegistry registry,
- DroolsCompositeClassLoader rootClassLoader) {
+ CompositeClassLoader rootClassLoader) {
DialectRuntimeData clone = new MVELDialectRuntimeData();
clone.merge( registry,
this );
@@ -96,7 +97,7 @@
}
public void onAdd(DialectRuntimeRegistry registry,
- DroolsCompositeClassLoader rootClassLoader) {
+ CompositeClassLoader rootClassLoader) {
this.rootClassLoader = rootClassLoader;
// for (Entry<Wireable, MVELCompilable> entry : this.invokerLookups.entrySet() ) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -26,9 +26,7 @@
import org.drools.core.util.DroolsClassLoader;
-public class MapBackedClassLoader extends ClassLoader
- implements
- DroolsClassLoader {
+public class MapBackedClassLoader extends ClassLoader {
private static final long serialVersionUID = 510l;
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/MVELClassFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/MVELClassFieldExtractorTest.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/extractors/MVELClassFieldExtractorTest.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -212,8 +212,7 @@
}
}
if ( !errors.isEmpty() ) {
- System.out.println( errors.toString() );
- fail( " Errors occured during execution " );
+ fail( " Errors occured during execution\n" + errors.toString() );
}
} catch ( InterruptedException e ) {
e.printStackTrace();
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DroolsObjectIOTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DroolsObjectIOTest.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/DroolsObjectIOTest.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -69,7 +69,6 @@
DroolsStreamUtils.streamOut(new FileOutputStream(file), testGroupElement);
InputStream fis = getClass().getResourceAsStream(TEST_FILE);
- System.out.println(fis.available());
GroupElement that = (GroupElement)DroolsStreamUtils.streamIn(fis);
assertEquals(that, testGroupElement);
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/ClassBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/ClassBuilderTest.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/ClassBuilderTest.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -31,9 +31,9 @@
import org.drools.base.ClassFieldAccessorCache;
import org.drools.base.ClassFieldAccessorStore;
-import org.drools.rule.DroolsCompositeClassLoader;
import org.drools.rule.JavaDialectRuntimeData;
import org.drools.rule.JavaDialectRuntimeData.PackageClassLoader;
+import org.drools.util.ClassLoaderUtil;
public class ClassBuilderTest extends TestCase {
@@ -55,7 +55,7 @@
data.write( JavaDialectRuntimeData.convertClassToResourcePath( classDef.getClassName() ),
d );
- classLoader = new PackageClassLoader(data, new DroolsCompositeClassLoader( getClass().getClassLoader(), false ));
+ classLoader = new PackageClassLoader(data, ClassLoaderUtil.getClassLoader( null, getClass(), false ));
this.store = new ClassFieldAccessorStore();
store.setClassFieldAccessorCache( new ClassFieldAccessorCache( classLoader ) );
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/InstancesHashcodedTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/InstancesHashcodedTest.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/InstancesHashcodedTest.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -21,9 +21,9 @@
import org.drools.base.ClassFieldAccessorCache;
import org.drools.base.ClassFieldAccessorStore;
-import org.drools.rule.DroolsCompositeClassLoader;
import org.drools.rule.JavaDialectRuntimeData;
import org.drools.rule.JavaDialectRuntimeData.PackageClassLoader;
+import org.drools.util.ClassLoaderUtil;
import junit.framework.TestCase;
@@ -51,7 +51,7 @@
JavaDialectRuntimeData data = new JavaDialectRuntimeData();
data.write( JavaDialectRuntimeData.convertClassToResourcePath( classDef.getClassName() ),
d );
- ClassLoader classLoader = new PackageClassLoader(data, new DroolsCompositeClassLoader( getClass().getClassLoader(), false ));
+ ClassLoader classLoader = new PackageClassLoader(data, ClassLoaderUtil.getClassLoader( null, getClass(), false ));
ClassFieldAccessorStore store = new ClassFieldAccessorStore();
store.setClassFieldAccessorCache( new ClassFieldAccessorCache( classLoader ) );
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/PackageCompilationDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/PackageCompilationDataTest.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/PackageCompilationDataTest.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -86,8 +86,6 @@
Class cls = ((InternalRuleBase)rb).getRootClassLoader().loadClass( "org.drools.rule.PackageCompilationDataTest$TestEvalExpression" );
- System.out.println( cls );
-
final CodeSource codeSource = invoker.getEvalExpression().getClass().getProtectionDomain().getCodeSource();
assertNotNull(codeSource.getLocation());
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/time/impl/CronJobTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/time/impl/CronJobTest.java 2010-12-01 22:22:12 UTC (rev 36152)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/time/impl/CronJobTest.java 2010-12-02 03:47:39 UTC (rev 36153)
@@ -38,7 +38,6 @@
DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
Date date = df.parse( "2009-01-01T00:00:00.000-0000" );
- System.out.println( "current time " + date );
timeService.advanceTime( date.getTime(), TimeUnit.MILLISECONDS );
More information about the jboss-svn-commits
mailing list