[jboss-svn-commits] JBL Code SVN: r12699 - in labs/jbossrules/trunk/drools-compiler: src/main/java/org/drools/brms/server/rules and 11 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Jun 19 23:29:36 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-06-19 23:29:36 -0400 (Tue, 19 Jun 2007)
New Revision: 12699
Modified:
labs/jbossrules/trunk/drools-compiler/.classpath
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.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/compiler/ProcessBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
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-compiler/src/test/java/org/drools/rule/builder/dialect/java/AccumulateTemplateTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixerTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/not_with_bindings_rule_test.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Serializable.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/waltz/waltz.drl
Log:
-refactor for more robust classloading
Modified: labs/jbossrules/trunk/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.classpath 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/.classpath 2007-06-20 03:29:36 UTC (rev 12699)
@@ -8,9 +8,9 @@
<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
<classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta25/mvel14-1.2beta25.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel14/1.2beta26/mvel14-1.2beta26.jar"/>
<classpathentry kind="var" path="M2_REPO/xstream/xstream/1.1.3/xstream-1.1.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.1.v_677_R32x/core-3.2.1.v_677_R32x.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
<classpathentry kind="var" path="M2_REPO/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar"/>
<classpathentry kind="var" path="M2_REPO/janino/janino/2.5.7/janino-2.5.7.jar"/>
<classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.4.0/xercesImpl-2.4.0.jar"/>
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/rules/SuggestionCompletionLoader.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -45,27 +45,32 @@
private final SuggestionCompletionEngineBuilder builder = new SuggestionCompletionEngineBuilder();
private final DrlParser parser = new DrlParser();
- private final ByteArrayClassLoader loader;
- protected List errors = new ArrayList();
- private ClassLoader existingLoader;
+ private final ByteArrayClassLoader loader;
+ protected List errors = new ArrayList();
+ // iterating over the import list
+ final ClassTypeResolver resolver;
/**
* This uses the current classes classloader as a base,
* and jars can be added.
*/
public SuggestionCompletionLoader() {
- this.loader = new ByteArrayClassLoader( this.getClass().getClassLoader() );
-
+ this(null);
}
/**
* This allows a pre existing classloader to be used (and preferred)
* for resolving types.
*/
- public SuggestionCompletionLoader(
- ClassLoader classLoader) {
- this();
- this.existingLoader = classLoader;
+ public SuggestionCompletionLoader(ClassLoader classLoader) {
+ if ( classLoader == null ) {
+ classLoader = Thread.currentThread().getContextClassLoader();
+ if ( classLoader == null ) {
+ classLoader = this.getClass().getClassLoader();
+ }
+ }
+ this.loader = new ByteArrayClassLoader( classLoader );
+ this.resolver = new ClassTypeResolver(new ArrayList(), this.loader);
}
/**
@@ -177,7 +182,7 @@
final String shortTypeName = global.getType();
if ( !this.builder.hasFieldsForType( shortTypeName ) ) {
final Class clazz = loadClass( global.getType(),
- jars );
+ jars );
loadClassFields( clazz,
shortTypeName );
@@ -186,7 +191,7 @@
}
this.builder.addGlobalType( global.getIdentifier(),
- shortTypeName );
+ shortTypeName );
} catch ( final IOException e ) {
this.errors.add( "Error while inspecting class for global: " + global.getType() + " error message: " + e.getMessage() );
}
@@ -199,16 +204,13 @@
*/
private void populateModelInfo(final PackageDescr pkgDescr,
final List jars) {
-
- // iterating over the import list
- final ClassTypeResolver resolver = new ClassTypeResolver();
for ( final Iterator it = pkgDescr.getImports().iterator(); it.hasNext(); ) {
final ImportDescr imp = (ImportDescr) it.next();
- final String classname = imp.getTarget();
- resolver.addImport( classname );
+ final String className = imp.getTarget();
+ resolver.addImport( className );
- final Class clazz = loadClass( classname,
- jars );
+ final Class clazz = loadClass(className, jars);
+
if ( clazz != null ) {
try {
final String shortTypeName = getShortNameOfClass( clazz.getName() );
@@ -216,7 +218,7 @@
shortTypeName );
this.builder.addFactType( shortTypeName );
} catch ( final IOException e ) {
- this.errors.add( "Error while inspecting the class: " + classname + ". The error was: " + e.getMessage() );
+ this.errors.add( "Error while inspecting the class: " + className + ". The error was: " + e.getMessage() );
}
}
}
@@ -240,7 +242,7 @@
final String[] fields = new String[templ.getFields().size()];
this.builder.addFieldsForType( factType,
- fields );
+ fields );
int index = 0;
for ( final Iterator fieldsIt = templ.getFields().iterator(); fieldsIt.hasNext(); ) {
@@ -255,10 +257,26 @@
this.errors.add( "Fact template field type not found: " + fieldType );
}
this.builder.addFieldType( factType + "." + fieldDescr.getName(),
- getFieldType( fieldTypeClass ) );
+ getFieldType( fieldTypeClass ) );
}
}
}
+
+ private Class loadClass(String className,
+ List jars) {
+ Class clazz = null;
+ try {
+ clazz = resolver.resolveType( className );
+ } catch ( ClassNotFoundException e1 ) {
+ try {
+ addJars( jars );
+ clazz = resolver.resolveType( className );
+ } catch ( Exception e) {
+ this.errors.add( "Class not found: " + className );
+ }
+ }
+ return clazz;
+ }
private void loadClassFields(final Class clazz,
final String shortTypeName) throws IOException {
@@ -271,12 +289,12 @@
fields = removeIrrelevantFields( fields );
this.builder.addFieldsForType( shortTypeName,
- fields );
+ fields );
for ( int i = 0; i < fields.length; i++ ) {
final Class type = (Class) inspector.getFieldTypes().get( fields[i] );
final String fieldType = getFieldType( type );
this.builder.addFieldType( shortTypeName + "." + fields[i],
- fieldType );
+ fieldType );
}
}
@@ -302,39 +320,6 @@
}
/**
- * @param pkg
- * @param classname
- * @param clazz
- * @return
- */
- private Class loadClass(final String classname,
- final List jars) {
- Class clazz = null;
- try {
- // check if it is already in the classpath
- if (this.existingLoader != null) {
- clazz = this.existingLoader.loadClass( classname );
- } else {
- clazz = this.loader.loadClass( classname );
- }
-
- } catch ( final ClassNotFoundException e1 ) {
-
- // not found in the classpath, so check if it
- // is in a package model
- try {
- addJars( jars );
- clazz = this.loader.loadClass( classname );
- } catch ( final IOException e ) {
- throw new IllegalStateException( e.getMessage() );
- } catch ( final ClassNotFoundException e ) {
- this.errors.add( "Class not found: " + classname );
- }
- }
- return clazz;
- }
-
- /**
* This will add the given jars to the classloader.
*/
private void addJars(final List jars) throws IOException {
@@ -352,7 +337,7 @@
len );
}
this.loader.addResource( entry.getName(),
- out.toByteArray() );
+ out.toByteArray() );
}
}
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 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -120,12 +120,12 @@
if ( this.pkg != null ) {
this.typeResolver = new ClassTypeResolver( this.pkg.getImports(),
- this.pkg.getPackageCompilationData().getClassLoader() );
+ this.configuration.getClassLoader() );
// make an automatic import for the current package
this.typeResolver.addImport( this.pkg.getName() + ".*" );
} else {
this.typeResolver = new ClassTypeResolver( new ArrayList(),
- Thread.currentThread().getContextClassLoader() );
+ this.configuration.getClassLoader() );
}
this.dialects = configuration.buildDialectRegistry( this );
@@ -295,7 +295,7 @@
private Package newPackage(final PackageDescr packageDescr) {
final Package pkg = new Package( packageDescr.getName(),
- Thread.currentThread().getContextClassLoader() );
+ this.configuration.getClassLoader() );
this.dialect.init( pkg );
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 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilderConfiguration.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -53,7 +53,7 @@
private int compiler;
-// private ClassLoader classLoader;
+ private ClassLoader classLoader;
private String languageLevel;
@@ -84,11 +84,6 @@
null );
}
-// public PackageBuilderConfiguration(ClassLoader classLoader) {
-// init( classLoader,
-// null );
-// }
-
private void init(ClassLoader classLoader,
Properties properties) {
if ( classLoader == null ) {
@@ -96,11 +91,10 @@
if ( classLoader == null ) {
classLoader = this.getClass().getClassLoader();
}
- //setClassLoader( classLoader );
}
- //setClassLoader( classLoader );
+ setClassLoader( classLoader );
- this.chainedProperties = new ChainedProperties( Thread.currentThread().getContextClassLoader(),
+ this.chainedProperties = new ChainedProperties( this.classLoader,
"packagebuilder.conf" );
if ( properties != null ) {
@@ -182,17 +176,17 @@
}
}
-// public ClassLoader getClassLoader() {
-// return this.classLoader;
-// }
-//
-// /** Use this to override the classloader that will be used for the rules. */
-// public void setClassLoader(final ClassLoader classLoader) {
-// if ( classLoader != null ) {
-// this.classLoader = classLoader;
-// }
-// }
+ public ClassLoader getClassLoader() {
+ return this.classLoader;
+ }
+ /** Use this to override the classloader that will be used for the rules. */
+ public void setClassLoader(final ClassLoader classLoader) {
+ if ( classLoader != null ) {
+ this.classLoader = classLoader;
+ }
+ }
+
/**
* This will attempt to read the System property to work out what default to set.
* This should only be done once when the class is loaded. After that point, you will have
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -68,6 +68,7 @@
final XStream stream = new XStream();
stream.setMode( XStream.ID_REFERENCES );
+
final ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
final ClassLoader newLoader = this.getClass().getClassLoader();
try {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -27,8 +27,8 @@
0, // offset is 0 by default
objectType,
null );
-
- final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( DroolsQuery.class, "name" );
+ ClassLoader classloader = context.getPkg().getPackageCompilationData().getClassLoader();
+ final FieldExtractor extractor = context.getDialect().getClassFieldExtractorCache().getExtractor( DroolsQuery.class, "name", classloader );
final FieldValue field = FieldFactory.getFieldValue( queryDescr.getName(),
ValueType.STRING_TYPE );
@@ -41,7 +41,6 @@
Extractor arrayExtractor = null;
try {
- ClassLoader classloader = context.getPkg().getPackageCompilationData().getClassLoader();
arrayExtractor = context.getDialect().getClassFieldExtractorCache().getExtractor( ((ClassObjectType) objectType).getClassType(),
"arguments",
classloader );
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuildContext.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -80,7 +80,7 @@
private DialectRegistry dialectRegistry;
- private Dialect dialect;
+ private Dialect dialect;
/**
* Default constructor
@@ -113,22 +113,22 @@
ruleDescr.getAttributes() );
this.dialectRegistry = dialectRegistry;
- this.dialect = ( this.rule.getDialect() != null ) ? this.dialectRegistry.getDialect( this.rule.getDialect() ) : defaultDialect;
-
+ this.dialect = (this.rule.getDialect() != null) ? this.dialectRegistry.getDialect( this.rule.getDialect() ) : defaultDialect;
+
getDialect().init( ruleDescr );
}
public Dialect getDialect() {
return dialect;
}
-
+
/**
* Allows the change of the current dialect in the context
*/
- public void setDialect( Dialect dialect ) {
+ public void setDialect(Dialect dialect) {
this.dialect = dialect;
}
-
+
public Dialect getDialect(String dialectName) {
return (Dialect) this.dialectRegistry.getDialect( dialectName );
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixer.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -23,10 +23,10 @@
import org.mvel.MacroProcessor;
public class KnowledgeHelperFixer {
- private static final MacroProcessor macroProcessor;
+ private static final Map macros;
static {
- Map macros = new HashMap(5);
+ macros = new HashMap(5);
macros.put( "insert",
new Macro() {
@@ -68,16 +68,16 @@
public String doMacro() {
return "drools.retract";
}
- } );
- macroProcessor = new MacroProcessor();
- macroProcessor.setMacros(macros);
+ } );
}
public String fix(final String raw) {
if ( raw == null || "".equals( raw.trim() )) {
return raw;
}
-
+
+ MacroProcessor macroProcessor = new MacroProcessor();
+ macroProcessor.setMacros( macros );
return macroProcessor.parse( raw );
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -6,12 +6,14 @@
import org.drools.FactHandle;
import org.drools.base.mvel.DroolsMVELFactory;
+import org.drools.base.mvel.DroolsMVELKnowledgeHelper;
import org.drools.base.mvel.DroolsMVELPreviousDeclarationVariable;
import org.drools.base.mvel.MVELConsequence;
import org.drools.compiler.RuleError;
import org.drools.lang.descr.RuleDescr;
import org.drools.rule.builder.ConsequenceBuilder;
import org.drools.rule.builder.RuleBuildContext;
+import org.drools.spi.KnowledgeHelper;
import org.mvel.ASTNode;
import org.mvel.MVEL;
import org.mvel.Macro;
@@ -27,21 +29,21 @@
//private final Interceptor assertInterceptor;
//private final Interceptor modifyInterceptor;
private final Map interceptors;
- private final Map macros;
+ private final Map macros;
public MVELConsequenceBuilder() {
this.interceptors = new HashMap(1);
this.interceptors.put( "Modify", new ModifyInterceptor() );
-// this.assertInterceptor = new AssertInterceptor();
-// this.modifyInterceptor = new ModifyInterceptor();
- this.macros = new HashMap(1);
-// macros.put( "assert",
-// new Macro() {
-// public String doMacro() {
-// return "@Modify with";
-// }
-// } );
+
+ macros = new HashMap(4);
+ macros.put( "insert",
+ new Macro() {
+ public String doMacro() {
+ return "drools.insert";
+ }
+ } );
+
macros.put( "modify",
new Macro() {
public String doMacro() {
@@ -49,7 +51,19 @@
}
} );
-
+ macros.put( "update",
+ new Macro() {
+ public String doMacro() {
+ return "drools.update";
+ }
+ } );
+
+ macros.put( "retract",
+ new Macro() {
+ public String doMacro() {
+ return "drools.retract";
+ }
+ } );
}
public void build(final RuleBuildContext context) {
@@ -62,9 +76,10 @@
context.getPkg().getGlobals() );
factory.setNextFactory( ((MVELDialect) context.getDialect()).getClassImportResolverFactory() );
+ MacroProcessor macroProcessor = new MacroProcessor();
+ macroProcessor.setMacros( macros );
-
- final Serializable expr = MVEL.compileExpression( new MacroProcessor(delimitExpressions( (String) context.getRuleDescr().getConsequence() )).parse(this.macros),
+ final Serializable expr = MVEL.compileExpression( macroProcessor.parse( delimitExpressions( (String) context.getRuleDescr().getConsequence() )),
((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses(), this.interceptors );
context.getRule().setConsequence( new MVELConsequence( expr,
@@ -153,16 +168,19 @@
VariableResolverFactory factory) {
Object object = ((WithNode) node). getNestedStatement().getValue( null,
factory );
- FactHandle handle = ((DroolsMVELFactory) factory).getWorkingMemory().getFactHandle( object );
- ((DroolsMVELFactory) factory).getWorkingMemory().modifyRetract( handle, null, null );
+
+ DroolsMVELKnowledgeHelper resolver = ( DroolsMVELKnowledgeHelper ) factory.getVariableResolver( "drools" );
+ KnowledgeHelper helper = ( KnowledgeHelper ) resolver.getValue();
+ helper.modifyRetract( object );
return 0;
}
public int doAfter(Object value,
ASTNode node,
VariableResolverFactory factory) {
- FactHandle handle = ((DroolsMVELFactory) factory).getWorkingMemory().getFactHandle( value );
- ((DroolsMVELFactory) factory).getWorkingMemory().modifyInsert( handle, value, null, null );
+ DroolsMVELKnowledgeHelper resolver = ( DroolsMVELKnowledgeHelper ) factory.getVariableResolver( "drools" );
+ KnowledgeHelper helper = ( KnowledgeHelper ) resolver.getValue();
+ helper.modifyInsert( value );
return 0;
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -177,7 +177,7 @@
index + 1 );
try {
- Class cls = Thread.currentThread().getContextClassLoader().loadClass( className );
+ Class cls = configuration.getClassLoader().loadClass( className );
Method[] methods = cls.getDeclaredMethods();
for ( int i = 0; i < methods.length; i++ ) {
if ( methods[i].equals( "methodName" ) ) {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlPackageReader.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -127,10 +127,10 @@
this.handlers.put( "and-restriction-connective",
new RestrictionConnectiveHandler( this ) );
-
+
this.handlers.put( "or-restriction-connective",
- new RestrictionConnectiveHandler( this) );
-
+ new RestrictionConnectiveHandler( this ) );
+
this.handlers.put( "and",
new AndHandler( this ) );
this.handlers.put( "or",
@@ -157,7 +157,7 @@
new ReturnValueRestrictionHandler( this ) );
this.handlers.put( "field-binding",
new FieldBindingHandler( this ) );
-
+
initEntityResolver();
}
@@ -263,7 +263,8 @@
throw new RuntimeException( "parser must be namespace-aware" );
}
- localParser.parse( in, this );
+ localParser.parse( in,
+ this );
return this.packageDescr;
}
@@ -340,9 +341,13 @@
return;
}
- validate( uri, localName, handler );
+ validate( uri,
+ localName,
+ handler );
- final Object node = handler.start( uri, localName, attrs );
+ final Object node = handler.start( uri,
+ localName,
+ attrs );
if ( node != null ) {
this.parents.add( node );
@@ -377,7 +382,8 @@
this.current = getParent( handler.generateNodeFor() );
- final Object node = handler.end( uri, localName );
+ final Object node = handler.end( uri,
+ localName );
// next
if ( node != null && !this.lastWasEndElement ) {
@@ -427,7 +433,7 @@
}
}
if ( !validParent ) {
- throw new SAXParseException( "<" + localName + "> has an invalid parent element [" + parent + "]",
+ throw new SAXParseException( "<" + localName + "> has an invalid parent element [" + parent + "]",
getLocator() );
}
}
@@ -651,7 +657,6 @@
}
// Try looking in META-INF
-
{
final InputStream is = cl.getResourceAsStream( "META-INF/" + xsd );
if ( is != null ) {
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 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -46,6 +46,7 @@
import org.drools.WorkingMemory;
import org.drools.base.DefaultKnowledgeHelper;
import org.drools.common.ActivationGroupNode;
+import org.drools.common.DroolsObjectInputStream;
import org.drools.common.InternalFactHandle;
import org.drools.common.LogicalDependency;
import org.drools.common.RuleFlowGroupNode;
@@ -268,7 +269,7 @@
private Object serializeIn(final byte[] bytes) throws IOException,
ClassNotFoundException {
- final ObjectInput in = new ObjectInputStream( new ByteArrayInputStream( bytes ) );
+ final ObjectInput in = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ) );
final Object obj = in.readObject();
in.close();
return obj;
@@ -1185,7 +1186,7 @@
ObjectOutputStream out = new ObjectOutputStream(data);
out.writeObject( pkg );
- ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(data.toByteArray()));
+ ObjectInputStream objIn = new DroolsObjectInputStream(new ByteArrayInputStream(data.toByteArray()));
Package pkg2 = (Package) objIn.readObject();
assertNotNull(pkg2);
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 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -62,6 +62,7 @@
import org.drools.WorkingMemory;
import org.drools.Cheesery.Maturity;
import org.drools.common.AbstractWorkingMemory;
+import org.drools.common.DroolsObjectInputStream;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsError;
import org.drools.compiler.DroolsParserException;
@@ -1583,7 +1584,7 @@
protected Object serializeIn(final byte[] bytes) throws IOException,
ClassNotFoundException {
- final ObjectInput in = new ObjectInputStream( new ByteArrayInputStream( bytes ) );
+ final ObjectInput in = new DroolsObjectInputStream( new ByteArrayInputStream( bytes ) );
final Object obj = in.readObject();
in.close();
return obj;
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/AccumulateTemplateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/AccumulateTemplateTest.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/AccumulateTemplateTest.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -42,7 +42,8 @@
new PatternExtractor( new ClassObjectType( Cheese.class ) ),
null ), new Declaration( "price",
ClassFieldExtractorCache.getExtractor( Cheese.class,
- "price" ),
+ "price",
+ getClass().getClassLoader() ),
null )};
final String[] globals = new String[]{"aGlobal", "anotherGlobal"};
final List globalTypes = Arrays.asList( new String[]{"String", "String"} );
@@ -110,16 +111,19 @@
final String[] declarationTypes = new String[]{"String", "int"};
final Declaration[] declarations = new Declaration[]{new Declaration( "name",
ClassFieldExtractorCache.getExtractor( Person.class,
- "name" ),
+ "name",
+ getClass().getClassLoader() ),
null ), new Declaration( "age",
ClassFieldExtractorCache.getExtractor( Person.class,
- "age" ),
+ "age",
+ getClass().getClassLoader() ),
null )};
final Declaration[] inner = new Declaration[]{new Declaration( "cheese",
new PatternExtractor( new ClassObjectType( Cheese.class ) ),
null ), new Declaration( "price",
ClassFieldExtractorCache.getExtractor( Cheese.class,
- "price" ),
+ "price",
+ getClass().getClassLoader() ),
null )};
final String[] globals = new String[]{"aGlobal", "anotherGlobal"};
final List globalTypes = Arrays.asList( new String[]{"String", "String"} );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixerTest.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixerTest.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -26,113 +26,140 @@
public void testAdd__Handle__Simple() {
String result = KnowledgeHelperFixerTest.fixer.fix( "update(myObject );" );
- assertEquals( "drools.update( myObject );",
- result );
+ assertEqualsIgnoreWhitespace( "drools.update(myObject );",
+ result );
result = KnowledgeHelperFixerTest.fixer.fix( "update ( myObject );" );
- assertEquals( "drools.update( myObject );",
- result );
+ assertEqualsIgnoreWhitespace( "drools.update( myObject );",
+ result );
}
public void testAdd__Handle__withNewLines() {
- final String result = KnowledgeHelperFixerTest.fixer.fix( "\n\t\n\tupdate(myObject );" );
- assertEquals( "\n\t\n\tdrools.update( myObject );",
- result );
+ final String result = KnowledgeHelperFixerTest.fixer.fix( "\n\t\n\tupdate( myObject );" );
+ assertEqualsIgnoreWhitespace( "\n\t\n\tdrools.update( myObject );",
+ result );
}
public void testAdd__Handle__rComplex() {
- String result = KnowledgeHelperFixerTest.fixer.fix( "something update(myObject ); other" );
- assertEquals( "something drools.update( myObject ); other",
- result );
+ String result = KnowledgeHelperFixerTest.fixer.fix( "something update( myObject); other" );
+ assertEqualsIgnoreWhitespace( "something drools.update( myObject); other",
+ result );
- result = KnowledgeHelperFixerTest.fixer.fix( "something update (myObject );" );
- assertEquals( "something drools.update( myObject );",
- result );
+ result = KnowledgeHelperFixerTest.fixer.fix( "something update ( myObject );" );
+ assertEqualsIgnoreWhitespace( "something drools.update( myObject );",
+ result );
- result = KnowledgeHelperFixerTest.fixer.fix( " update(myObject ); x" );
- assertEquals( " drools.update( myObject ); x",
- result );
+ result = KnowledgeHelperFixerTest.fixer.fix( " update( myObject ); x" );
+ assertEqualsIgnoreWhitespace( " drools.update( myObject ); x",
+ result );
//should not touch, as it is not a stand alone word
result = KnowledgeHelperFixerTest.fixer.fix( "xxupdate(myObject ) x" );
- assertEquals( "xxupdate(myObject ) x",
- result );
+ assertEqualsIgnoreWhitespace( "xxupdate(myObject ) x",
+ result );
}
public void testMultipleMatches() {
String result = KnowledgeHelperFixerTest.fixer.fix( "update(myObject); update(myObject );" );
- assertEquals( "drools.update( myObject ); drools.update( myObject );",
- result );
+ assertEqualsIgnoreWhitespace( "drools.update(myObject); drools.update(myObject );",
+ result );
- result = KnowledgeHelperFixerTest.fixer.fix( "xxx update(myObject ); update(myObject ); update(yourObject ); yyy" );
- assertEquals( "xxx drools.update( myObject ); drools.update( myObject ); drools.update( yourObject ); yyy",
- result );
+ result = KnowledgeHelperFixerTest.fixer.fix( "xxx update(myObject ); update( myObject ); update( yourObject ); yyy" );
+ assertEqualsIgnoreWhitespace( "xxx drools.update(myObject ); drools.update( myObject ); drools.update( yourObject ); yyy",
+ result );
}
- public void testAssert() {
- final String raw = "some code; insert(new String(\"foo\"));\n More();";
- final String result = "some code; drools.insert(new String(\"foo\"));\n More();";
- assertEquals( result,
- KnowledgeHelperFixerTest.fixer.fix( raw ) );
+ public void testAssert1() {
+ final String raw = "insert( foo );";
+ final String result = "drools.insert( foo );";
+ assertEqualsIgnoreWhitespace( result,
+ KnowledgeHelperFixerTest.fixer.fix( raw ) );
}
+ public void testAssert2() {
+ final String raw = "some code; insert( new String(\"foo\") );\n More();";
+ final String result = "some code; drools.insert( new String(\"foo\") );\n More();";
+ assertEqualsIgnoreWhitespace( result,
+ KnowledgeHelperFixerTest.fixer.fix( raw ) );
+ }
+
public void testAssertLogical() {
final String raw = "some code; insertLogical(new String(\"foo\"));\n More();";
final String result = "some code; drools.insertLogical(new String(\"foo\"));\n More();";
- assertEquals( result,
- KnowledgeHelperFixerTest.fixer.fix( raw ) );
+ assertEqualsIgnoreWhitespace( result,
+ KnowledgeHelperFixerTest.fixer.fix( raw ) );
}
+ public void testModifyRetractModifyInsert() {
+ final String raw = "some code; insert( bar ); modifyRetract( foo );\n More(); retract( bar ); modifyInsert( foo );";
+ final String result = "some code; drools.insert( bar ); drools.modifyRetract( foo );\n More(); drools.retract( bar ); drools.modifyInsert( foo );";
+ assertEqualsIgnoreWhitespace( result,
+ KnowledgeHelperFixerTest.fixer.fix( raw ) );
+ }
+
public void testAllActionsMushedTogether() {
String result = KnowledgeHelperFixerTest.fixer.fix( "insert(myObject ); update(ourObject);\t retract(herObject);" );
- assertEquals( "drools.insert(myObject ); drools.update( ourObject );\t drools.retract( herObject );",
- result );
+ assertEqualsIgnoreWhitespace( "drools.insert(myObject ); drools.update(ourObject);\t drools.retract(herObject);",
+ result );
- result = KnowledgeHelperFixerTest.fixer.fix( "insert(myObject ); update(ourObject);\t retract(herObject);\ninsert(myObject); update(ourObject);\t retract(herObject);" );
- assertEquals( "drools.insert(myObject ); drools.update( ourObject );\t drools.retract( herObject);\ndrools.insert(myObject); drools.update( ourObject );\t drools.retract( herObject );",
- result );
+ result = KnowledgeHelperFixerTest.fixer.fix( "insert( myObject ); update(ourObject);\t retract(herObject );\ninsert( myObject ); update(ourObject);\t retract( herObject );" );
+ assertEqualsIgnoreWhitespace( "drools.insert( myObject ); drools.update(ourObject);\t drools.retract(herObject );\ndrools.insert( myObject ); drools.update(ourObject);\t drools.retract( herObject );",
+ result );
}
public void testLeaveLargeAlone() {
final String original = "yeah yeah yeah minsert( xxx ) this is a long() thing Person (name=='drools') modify a thing";
final String result = KnowledgeHelperFixerTest.fixer.fix( original );
- assertEquals( original,
- result );
+ assertEqualsIgnoreWhitespace( original,
+ result );
}
public void testWithNull() {
final String original = null;
final String result = KnowledgeHelperFixerTest.fixer.fix( original );
- assertEquals( original,
- result );
+ assertEqualsIgnoreWhitespace( original,
+ result );
}
public void testLeaveAssertAlone() {
final String original = "drools.insert(foo)";
- assertEquals( original,
- KnowledgeHelperFixerTest.fixer.fix( original ) );
+ assertEqualsIgnoreWhitespace( original,
+ KnowledgeHelperFixerTest.fixer.fix( original ) );
}
public void testLeaveAssertLogicalAlone() {
final String original = "drools.insertLogical(foo)";
- assertEquals( original,
- KnowledgeHelperFixerTest.fixer.fix( original ) );
+ assertEqualsIgnoreWhitespace( original,
+ KnowledgeHelperFixerTest.fixer.fix( original ) );
}
public void testWackyAssert() {
final String raw = "System.out.println($person1.getName() + \" and \" + $person2.getName() +\" are sisters\");\n" + "insert($person1.getName(\"foo\") + \" and \" + $person2.getName() +\" are sisters\"); yeah();";
final String expected = "System.out.println($person1.getName() + \" and \" + $person2.getName() +\" are sisters\");\n" + "drools.insert($person1.getName(\"foo\") + \" and \" + $person2.getName() +\" are sisters\"); yeah();";
- assertEquals( expected,
- KnowledgeHelperFixerTest.fixer.fix( raw ) );
-
+ assertEqualsIgnoreWhitespace( expected,
+ KnowledgeHelperFixerTest.fixer.fix( raw ) );
}
public void testMoreAssertCraziness() {
final String raw = "foobar(); (insert(new String(\"blah\").get()); bangBangYudoHono();)";
- assertEquals( "foobar(); (drools.insert(new String(\"blah\").get()); bangBangYudoHono();)",
- KnowledgeHelperFixerTest.fixer.fix( raw ) );
+ assertEqualsIgnoreWhitespace( "foobar(); (drools.insert(new String(\"blah\").get()); bangBangYudoHono();)",
+ KnowledgeHelperFixerTest.fixer.fix( raw ) );
}
+ private void assertEqualsIgnoreWhitespace(final String expected,
+ final String actual) {
+ if ( expected == null || actual == null ) {
+ assertEquals(expected, actual);
+ return;
+ }
+ final String cleanExpected = expected.replaceAll( "\\s+",
+ "" );
+ final String cleanActual = actual.replaceAll( "\\s+",
+ "" );
+
+ assertEquals( cleanExpected,
+ cleanActual );
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -37,7 +37,7 @@
public void testSimpleExpression() throws Exception {
final Package pkg = new Package( "pkg1" );
final RuleDescr ruleDescr = new RuleDescr( "rule 1" );
- ruleDescr.setConsequence( "cheese.setPrice( 5 );" );
+ ruleDescr.setConsequence( "modify (cheese) {price = 5 }; retract (cheese)" );
MVELDialect mvelDialect = new MVELDialect( new PackageBuilder( pkg ) );
DialectRegistry registry = new DialectRegistry();
@@ -91,6 +91,10 @@
assertEquals( 5,
cheddar.getPrice() );
}
+
+ public void testKnowledgeHelper() {
+
+ }
/**
* Just like MVEL command line, we can allow expressions to span lines, with optional ";"
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -50,7 +50,8 @@
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
- final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class, "price" );
+ final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class, "price",
+ getClass().getClassLoader() );
final Pattern pattern = new Pattern( 0,
new ClassObjectType( int.class ) );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -52,7 +52,8 @@
mvelDialect );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
- final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class, "price" );
+ final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class, "price",
+ getClass().getClassLoader() );
final Pattern patternA = new Pattern( 0,
new ClassObjectType( int.class ) );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java 2007-06-20 03:29:36 UTC (rev 12699)
@@ -56,7 +56,8 @@
mvelDialect );
final InstrumentedDeclarationScopeResolver declarationResolver = new InstrumentedDeclarationScopeResolver();
- final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class, "price" );
+ final FieldExtractor extractor = ClassFieldExtractorCache.getExtractor( Cheese.class, "price",
+ getClass().getClassLoader() );
final Pattern patternA = new Pattern( 0,
new ClassObjectType( int.class ) );
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/not_with_bindings_rule_test.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/not_with_bindings_rule_test.drl 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/not_with_bindings_rule_test.drl 2007-06-20 03:29:36 UTC (rev 12699)
@@ -13,7 +13,6 @@
$person : Person( $likes:likes )
not Cheese( type == $likes )
then
- //System.out.println( "help" );
list.add( $person );
end
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Serializable.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Serializable.drl 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Serializable.drl 2007-06-20 03:29:36 UTC (rev 12699)
@@ -3,8 +3,9 @@
import org.drools.Person;
import org.drools.Cheese;
import org.drools.Cheesery;
+import java.util.List
-global java.util.List list
+global List list
rule "match Person 1"
salience 10
@@ -17,9 +18,11 @@
rule "match Person 2"
agenda-group "xxx"
+ salience ($age2 - $age1)
when
$person : Person(name=="mark", $age1 : age )
- Cheesery( cheeses contains $person )
+ cheesery : Cheesery( cheeses contains $person )
+ cheeses : List() from cheesery.getCheeses()
Person( age < ( $age1 ) )
Person( $age2 : age -> ( $age1 == $age2 ) )
eval( $age1 == $age2 )
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/waltz/waltz.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/waltz/waltz.drl 2007-06-20 03:29:19 UTC (rev 12698)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/waltz/waltz.drl 2007-06-20 03:29:36 UTC (rev 12699)
@@ -59,8 +59,9 @@
$stage: Stage ( value == Stage.DUPLICATE )
not ( Line() )
then
+ modifyRetract( $stage );
$stage.setValue ( Stage.DETECT_JUNCTIONS );
- update($stage);
+ modifyInsert( $stage );
//sysout.println("reversing done");
end
More information about the jboss-svn-commits
mailing list