[jboss-svn-commits] JBL Code SVN: r20818 - in labs/jbossrules/trunk/drools-clips/src: test/java/org/drools/clips and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jun 26 13:59:49 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-06-26 13:59:49 -0400 (Thu, 26 Jun 2008)
New Revision: 20818

Modified:
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Shell.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ShellTest.java
Log:
JBRULES-720 Clips Parser 
-We now set the ContextClassLoader for MVEL, so it can see Drools specific classes.

Modified: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Shell.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Shell.java	2008-06-26 17:59:41 UTC (rev 20817)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Shell.java	2008-06-26 17:59:49 UTC (rev 20818)
@@ -378,10 +378,16 @@
                                appendable );
 
         ParserContext context = new ParserContext();
+        
 
         String namespace = this.session.getAgenda().getFocus().getName();
 
         Package pkg = this.ruleBase.getPackage( namespace );
+        if ( pkg == null ) {
+            this.packageBuilder.addPackage( createPackageDescr( namespace ) );
+            pkg = this.ruleBase.getPackage( namespace );
+            
+        }
 
         if ( pkg != null ) {
             // only time this will be null is if we have yet to do any packagedescr work
@@ -408,12 +414,16 @@
             this.factory.setNextFactory( data.getFunctionFactory() );
         }
 
+        ClassLoader tempClassLoader = Thread.currentThread().getContextClassLoader();
+        Thread.currentThread().setContextClassLoader( pkg.getPackageScopeClassLoader() );
+        
         ExpressionCompiler expr = new ExpressionCompiler( appendable.toString() );
         Serializable executable = expr.compile( context );
 
         MVEL.executeExpression( executable,
                                 this,
                                 this.factory );
+        Thread.currentThread().setContextClassLoader( tempClassLoader );
     }
 
     public void templateHandler(TypeDeclarationDescr typeDescr) {

Modified: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ShellTest.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ShellTest.java	2008-06-26 17:59:41 UTC (rev 20817)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ShellTest.java	2008-06-26 17:59:49 UTC (rev 20818)
@@ -256,6 +256,18 @@
     public void testTemplateCreation() throws Exception {
         this.shell.eval( "(deftemplate Person (slot name (type String) ) (slot age (type int) ) )" );
 
+        this.shell.eval( "(defrule xxx (Person (name ?name&bob) (age 30) ) => (printout t hello bob ) )" );
+        
+        this.shell.eval( "(assert (Person (name bob) (age 30) ) )" );
+        this.shell.eval( "(run)" );
+
+        assertEquals( "hellobob",
+                      new String( this.baos.toByteArray() ) );          
+    }    
+    
+    public void testTemplateCreationWithJava() throws Exception {
+        this.shell.eval( "(deftemplate Person (slot name (type String) ) (slot age (type int) ) )" );
+
         this.shell.eval( "(defrule yyy  => (printout t yy \" \" (eq 1 1) ) ) )" );
         Package pkg = shell.getStatefulSession().getRuleBase().getPackage( "MAIN" );
 




More information about the jboss-svn-commits mailing list