[jboss-svn-commits] JBL Code SVN: r37191 - in labs/jbossesb/trunk/product: install and 17 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jun 30 22:17:37 EDT 2011


Author: tcunning
Date: 2011-06-30 22:17:36 -0400 (Thu, 30 Jun 2011)
New Revision: 37191

Added:
   labs/jbossesb/trunk/product/lib/ext/mvel2-2.1.0.drools2.jar
   labs/jbossesb/trunk/product/services/jbrules/aop/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/aspect/
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/aspect/DroolsClassFieldAccessorFactoryAspect.java
   labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/aspect/DroolsReteooFactHandleFactoryAspect.java
   labs/jbossesb/trunk/product/services/jbrules/aop/resources/
   labs/jbossesb/trunk/product/services/jbrules/aop/resources/META-INF/
   labs/jbossesb/trunk/product/services/jbrules/aop/resources/META-INF/jboss-aop.xml
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-compiler-5.2.0.Final.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-core-5.2.0.Final.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-decisiontables-5.2.0.Final.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-jsr94-5.2.0.Final.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-templates-5.2.0.Final.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/jxl-2.6.10.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/knowledge-api-5.2.0.Final.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/mvel2-2.1.0.drools2.jar
Removed:
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-api-5.1.0.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-compiler-5.1.0.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-core-5.1.0.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-decisiontables-5.1.0.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-jsr94-5.1.0.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-templates-5.1.0.jar
   labs/jbossesb/trunk/product/services/jbrules/lib/ext/jxl-2.4.2.jar
Modified:
   labs/jbossesb/trunk/product/build.xml
   labs/jbossesb/trunk/product/install/build.xml
   labs/jbossesb/trunk/product/ivy.xml
   labs/jbossesb/trunk/product/services/jbrules/build.xml
   labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java
   labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java
   labs/jbossesb/trunk/product/services/jbrules/src/test/resources/testrules.pkg
Log:
JBESB-3623
Update to drools 5.2.0.Final.


Modified: labs/jbossesb/trunk/product/build.xml
===================================================================
--- labs/jbossesb/trunk/product/build.xml	2011-06-30 22:58:55 UTC (rev 37190)
+++ labs/jbossesb/trunk/product/build.xml	2011-07-01 02:17:36 UTC (rev 37191)
@@ -172,6 +172,10 @@
 
     <target name="dependencies.get" unless="no.ivy">
         <ant antfile="ivy-build.xml" />
+	<!-- sneak the drools version of mvel in -->
+	<copy todir="${org.jboss.esb.internal.dest}/lib"> 
+		<fileset dir="lib/ext" includes="mvel2-*.jar" />
+	</copy>
     </target>
 
     <target name="dependencies.report">

Modified: labs/jbossesb/trunk/product/install/build.xml
===================================================================
--- labs/jbossesb/trunk/product/install/build.xml	2011-06-30 22:58:55 UTC (rev 37190)
+++ labs/jbossesb/trunk/product/install/build.xml	2011-07-01 02:17:36 UTC (rev 37191)
@@ -240,7 +240,7 @@
 	<!-- jbossesb deployer -->
         <property name="deployers.dir" value="${server.dir}/deployers"/>
         <mkdir dir="${deployers.dir}/esb.deployer"/>
-		        
+		 
         <copy todir="${deployers.dir}/esb.deployer/lib" overwrite="true">
             <fileset dir="${org.jboss.esb.dist.lib}/jbossesb.sar/lib">
                 <include name="jbossesb-rosetta.jar"/>
@@ -253,9 +253,9 @@
                 <include name="commons-io-*.jar"/>
                 <include name="groovy-all-*.jar"/>
                 <include name="jsch-*.jar"/>
+		<include name="mvel2-*"/>
                 <include name="mina-core-*.jar"/>
                 <include name="mina-filter-ssl-*.jar"/>
-                <include name="mvel*.jar"/>
                 <include name="milyn*.jar"/>
                 <include name="freemarker*.jar"/>
                 <include name="ognl*.jar"/>

Modified: labs/jbossesb/trunk/product/ivy.xml
===================================================================
--- labs/jbossesb/trunk/product/ivy.xml	2011-06-30 22:58:55 UTC (rev 37190)
+++ labs/jbossesb/trunk/product/ivy.xml	2011-07-01 02:17:36 UTC (rev 37191)
@@ -75,7 +75,8 @@
         <dependency org="org.milyn" name="milyn-smooks-all" rev="${smooks.version}"/>
         <dependency org="org.freemarker" name="freemarker" rev="2.3.15"/>
         <dependency org="org.codehaus.jackson" name="jackson-core-lgpl" rev="1.0.1"/>
-        <dependency org="org.mvel" name="mvel2" rev="2.0.17"/>
+	<!-- Use the drools version of mvel
+        <dependency org="org.mvel" name="mvel2" rev="2.0.17"/>-->
         <dependency org="jaxen" name="jaxen" rev="1.1.1">
             <exclude org="dom4j" module="dom4j"/>
             <exclude org="xerces" module="xmlParserAPIs"/>

Added: labs/jbossesb/trunk/product/lib/ext/mvel2-2.1.0.drools2.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/lib/ext/mvel2-2.1.0.drools2.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/aspect/DroolsClassFieldAccessorFactoryAspect.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/aspect/DroolsClassFieldAccessorFactoryAspect.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/aspect/DroolsClassFieldAccessorFactoryAspect.java	2011-07-01 02:17:36 UTC (rev 37191)
@@ -0,0 +1,591 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.internal.soa.esb.services.drools.aspect;
+
+import java.lang.reflect.Method;
+import org.jboss.aop.joinpoint.MethodInvocation;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
+import java.util.Map;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.ClassFieldAccessorCache.ByteArrayClassLoader;
+import org.drools.base.ClassFieldAccessorCache.CacheEntry;
+import org.drools.base.extractors.BaseBooleanClassFieldReader;
+import org.drools.base.extractors.BaseBooleanClassFieldWriter;
+import org.drools.base.extractors.BaseByteClassFieldReader;
+import org.drools.base.extractors.BaseByteClassFieldWriter;
+import org.drools.base.extractors.BaseCharClassFieldReader;
+import org.drools.base.extractors.BaseCharClassFieldWriter;
+import org.drools.base.extractors.BaseDoubleClassFieldReader;
+import org.drools.base.extractors.BaseDoubleClassFieldWriter;
+import org.drools.base.extractors.BaseFloatClassFieldReader;
+import org.drools.base.extractors.BaseFloatClassFieldWriter;
+import org.drools.base.extractors.BaseIntClassFieldReader;
+import org.drools.base.extractors.BaseIntClassFieldWriter;
+import org.drools.base.extractors.BaseLongClassFieldReader;
+import org.drools.base.extractors.BaseLongClassFieldWriter;
+import org.drools.base.extractors.BaseObjectClassFieldReader;
+import org.drools.base.extractors.BaseObjectClassFieldWriter;
+import org.drools.base.extractors.BaseShortClassFieldReader;
+import org.drools.base.extractors.BaseShortClassFieldWriter;
+import org.drools.base.extractors.MVELClassFieldReader;
+import org.drools.base.extractors.SelfReferenceClassFieldReader;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.core.util.asm.ClassFieldInspector;
+import org.mvel2.asm.ClassWriter;
+import org.mvel2.asm.Label;
+import org.mvel2.asm.MethodVisitor;
+import org.mvel2.asm.Opcodes;
+import org.mvel2.asm.Type;
+import org.drools.base.*;
+
+public class DroolsClassFieldAccessorFactoryAspect {
+
+
+    private static final String                        BASE_PACKAGE         = "org/drools/base";
+
+    private static final String                        SELF_REFERENCE_FIELD = "this";
+
+    private static final ProtectionDomain              PROTECTION_DOMAIN;
+//
+//    private final Map<Class< ? >, ClassFieldInspector> inspectors           = new HashMap<Class< ? >, ClassFieldInspector>();
+//
+//    private ByteArrayClassLoader                       byteArrayClassLoader;
+
+    static {
+        PROTECTION_DOMAIN = AccessController.doPrivileged( new PrivilegedAction<ProtectionDomain>() {
+            public ProtectionDomain run() {
+                return ClassFieldAccessorFactory.class.getProtectionDomain();
+            }
+        } );
+    }
+    
+    private static ClassFieldAccessorFactory instance = new ClassFieldAccessorFactory();
+    
+    public static ClassFieldAccessorFactory getInstance() {
+        return instance;
+    }
+
+    public BaseClassFieldReader getClassFieldReader(final MethodInvocation invocation) {
+        final Object[] args = invocation.getArguments();
+	final Class<?> clazz = (Class<?>) args[0];
+	final String fieldName = (String) args[1];
+	CacheEntry cache = (CacheEntry) args[2];
+
+        ByteArrayClassLoader byteArrayClassLoader = cache.getByteArrayClassLoader();
+        Map<Class< ? >, ClassFieldInspector> inspectors = cache.getInspectors();
+//        if ( byteArrayClassLoader == null || byteArrayClassLoader.getParent() != classLoader ) {
+//            if ( classLoader == null ) {
+//                throw new RuntimeDroolsException( "ClassFieldAccessorFactory cannot have a null parent ClassLoader" );
+//            }
+//            byteArrayClassLoader = new ByteArrayClassLoader( classLoader );
+//        }
+        try {
+            // if it is a self reference
+            if ( SELF_REFERENCE_FIELD.equals( fieldName ) ) {
+                // then just create an instance of the special class field extractor
+                return new SelfReferenceClassFieldReader( clazz,
+                                                          fieldName );
+            } else if ( fieldName.indexOf( '.' ) > -1 || fieldName.indexOf( '[' ) > -1 ) {
+                // we need MVEL extractor for expressions
+                return new MVELClassFieldReader( clazz.getName(),
+                                                 fieldName,
+                                                 true );
+            } else {
+                // otherwise, bytecode generate a specific extractor
+                ClassFieldInspector inspector = inspectors.get( clazz );
+                if ( inspector == null ) {
+                    inspector = new ClassFieldInspector( clazz );
+                    inspectors.put( clazz,
+                                    inspector );
+                }
+                final Class< ? > fieldType = (Class< ? >) inspector.getFieldTypes().get( fieldName );
+                final Method getterMethod = (Method) inspector.getGetterMethods().get( fieldName );
+                if ( fieldType != null && getterMethod != null ) {
+                    final String className = DroolsClassFieldAccessorFactoryAspect.BASE_PACKAGE + "/" + Type.getInternalName( clazz ) + Math.abs( System.identityHashCode( clazz ) ) + "$" + getterMethod.getName();
+
+                    // generating byte array to create target class
+                    final byte[] bytes = dumpReader( clazz,
+                                                     className,
+                                                     getterMethod,
+                                                     fieldType,
+                                                     clazz.isInterface() );
+                    // use bytes to get a class 
+
+                    final Class< ? > newClass = byteArrayClassLoader.defineClass( className.replace( '/',
+                                                                                                     '.' ),
+                                                                                  bytes,
+                                                                                  PROTECTION_DOMAIN );
+                    // instantiating target class
+                    final Integer index = (Integer) inspector.getFieldNames().get( fieldName );
+                    final ValueType valueType = ValueType.determineValueType( fieldType );
+                    final Object[] params = {index, fieldType, valueType};
+                    return (BaseClassFieldReader) newClass.getConstructors()[0].newInstance( params );
+                } else {
+                    throw new RuntimeDroolsException( "Field/method '" + fieldName + "' not found for class '" + clazz.getName() + "'\n" );
+                }
+            }
+        } catch ( final RuntimeDroolsException e ) {
+            throw e;
+        } catch ( final Exception e ) {
+            throw new RuntimeDroolsException( e );
+        }
+    }
+
+    private byte[] dumpReader(final Class< ? > originalClass,
+                              final String className,
+                              final Method getterMethod,
+                              final Class< ? > fieldType,
+                              final boolean isInterface) throws Exception {
+
+        final ClassWriter cw = new ClassWriter( ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS );
+
+        final Class< ? > superClass = getReaderSuperClassFor( fieldType );
+        buildClassHeader( superClass,
+                          className,
+                          cw );
+
+        //        buildConstructor( superClass,
+        //                          className,
+        //                          cw );
+
+        build3ArgConstructor( superClass,
+                              className,
+                              cw );
+
+        buildGetMethod( originalClass,
+                        className,
+                        superClass,
+                        getterMethod,
+                        cw );
+
+        cw.visitEnd();
+
+        return cw.toByteArray();
+    }
+
+    private byte[] dumpWriter(final Class< ? > originalClass,
+                              final String className,
+                              final Method getterMethod,
+                              final Class< ? > fieldType,
+                              final boolean isInterface) throws Exception {
+
+        final ClassWriter cw = new ClassWriter( ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS );
+
+        final Class< ? > superClass = getWriterSuperClassFor( fieldType );
+        buildClassHeader( superClass,
+                          className,
+                          cw );
+
+        build3ArgConstructor( superClass,
+                              className,
+                              cw );
+
+        buildSetMethod( originalClass,
+                        className,
+                        superClass,
+                        getterMethod,
+                        fieldType,
+                        cw );
+
+        cw.visitEnd();
+
+        return cw.toByteArray();
+    }
+
+    /**
+     * Builds the class header
+     *  
+     * @param clazz The class to build the extractor for
+     * @param className The extractor class name
+     * @param cw
+     */
+    protected void buildClassHeader(final Class< ? > superClass,
+                                    final String className,
+                                    final ClassWriter cw) {
+        cw.visit( Opcodes.V1_5,
+                  Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER,
+                  className,
+                  null,
+                  Type.getInternalName( superClass ),
+                  null );
+
+        cw.visitSource( null,
+                        null );
+    }
+
+    /**
+     * Creates a constructor for the field extractor receiving
+     * the index, field type and value type
+     * 
+     * @param originalClassName
+     * @param className
+     * @param cw
+     */
+    private void build3ArgConstructor(final Class< ? > superClazz,
+                                      final String className,
+                                      final ClassWriter cw) {
+        MethodVisitor mv;
+        {
+            mv = cw.visitMethod( Opcodes.ACC_PUBLIC,
+                                 "<init>",
+                                 Type.getMethodDescriptor( Type.VOID_TYPE,
+                                                           new Type[]{Type.getType( int.class ), Type.getType( Class.class ), Type.getType( ValueType.class )} ),
+                                 null,
+                                 null );
+            mv.visitCode();
+            final Label l0 = new Label();
+            mv.visitLabel( l0 );
+            mv.visitVarInsn( Opcodes.ALOAD,
+                             0 );
+            mv.visitVarInsn( Opcodes.ILOAD,
+                             1 );
+            mv.visitVarInsn( Opcodes.ALOAD,
+                             2 );
+            mv.visitVarInsn( Opcodes.ALOAD,
+                             3 );
+            mv.visitMethodInsn( Opcodes.INVOKESPECIAL,
+                                Type.getInternalName( superClazz ),
+                                "<init>",
+                                Type.getMethodDescriptor( Type.VOID_TYPE,
+                                                          new Type[]{Type.getType( int.class ), Type.getType( Class.class ), Type.getType( ValueType.class )} ) );
+            final Label l1 = new Label();
+            mv.visitLabel( l1 );
+            mv.visitInsn( Opcodes.RETURN );
+            final Label l2 = new Label();
+            mv.visitLabel( l2 );
+            mv.visitLocalVariable( "this",
+                                   "L" + className + ";",
+                                   null,
+                                   l0,
+                                   l2,
+                                   0 );
+            mv.visitLocalVariable( "index",
+                                   Type.getDescriptor( int.class ),
+                                   null,
+                                   l0,
+                                   l2,
+                                   1 );
+            mv.visitLocalVariable( "fieldType",
+                                   Type.getDescriptor( Class.class ),
+                                   null,
+                                   l0,
+                                   l2,
+                                   2 );
+            mv.visitLocalVariable( "valueType",
+                                   Type.getDescriptor( ValueType.class ),
+                                   null,
+                                   l0,
+                                   l2,
+                                   3 );
+            mv.visitMaxs( 0,
+                          0 );
+            mv.visitEnd();
+        }
+    }
+
+    /**
+     * Creates the proxy reader method for the given method
+     * 
+     * @param fieldName
+     * @param fieldFlag
+     * @param method
+     * @param cw
+     */
+    protected void buildGetMethod(final Class< ? > originalClass,
+                                  final String className,
+                                  final Class< ? > superClass,
+                                  final Method getterMethod,
+                                  final ClassWriter cw) {
+
+        final Class< ? > fieldType = getterMethod.getReturnType();
+        Method overridingMethod;
+        try {
+            overridingMethod = superClass.getMethod( getOverridingGetMethodName( fieldType ),
+                                                     new Class[]{InternalWorkingMemory.class, Object.class} );
+        } catch ( final Exception e ) {
+            throw new RuntimeDroolsException( "This is a bug. Please report back to JBoss Rules team.",
+                                              e );
+        }
+        final MethodVisitor mv = cw.visitMethod( Opcodes.ACC_PUBLIC,
+                                                 overridingMethod.getName(),
+                                                 Type.getMethodDescriptor( overridingMethod ),
+                                                 null,
+                                                 null );
+
+        mv.visitCode();
+
+        final Label l0 = new Label();
+        mv.visitLabel( l0 );
+        mv.visitVarInsn( Opcodes.ALOAD,
+                         2 );
+        mv.visitTypeInsn( Opcodes.CHECKCAST,
+                          Type.getInternalName( originalClass ) );
+
+        if ( originalClass.isInterface() ) {
+            mv.visitMethodInsn( Opcodes.INVOKEINTERFACE,
+                                Type.getInternalName( originalClass ),
+                                getterMethod.getName(),
+                                Type.getMethodDescriptor( getterMethod ) );
+        } else {
+            mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
+                                Type.getInternalName( originalClass ),
+                                getterMethod.getName(),
+                                Type.getMethodDescriptor( getterMethod ) );
+        }
+        mv.visitInsn( Type.getType( fieldType ).getOpcode( Opcodes.IRETURN ) );
+        final Label l1 = new Label();
+        mv.visitLabel( l1 );
+        mv.visitLocalVariable( "this",
+                               "L" + className + ";",
+                               null,
+                               l0,
+                               l1,
+                               0 );
+        mv.visitLocalVariable( "workingMemory",
+                               Type.getDescriptor( InternalWorkingMemory.class ),
+                               null,
+                               l0,
+                               l1,
+                               1 );
+        mv.visitLocalVariable( "object",
+                               Type.getDescriptor( Object.class ),
+                               null,
+                               l0,
+                               l1,
+                               2 );
+        mv.visitMaxs( 0,
+                      0 );
+        mv.visitEnd();
+    }
+
+    /**
+     * Creates the set method for the given field definition
+     *
+     * @param cw
+     * @param classDef
+     * @param fieldDef
+     */
+    protected void buildSetMethod(final Class< ? > originalClass,
+                                  final String className,
+                                  final Class< ? > superClass,
+                                  final Method setterMethod,
+                                  final Class< ? > fieldType,
+                                  final ClassWriter cw) {
+        MethodVisitor mv;
+        // set method
+        {
+            Method overridingMethod;
+            try {
+                overridingMethod = superClass.getMethod( getOverridingSetMethodName( fieldType ),
+                                                         new Class[]{Object.class, fieldType.isPrimitive() ? fieldType : Object.class} );
+            } catch ( final Exception e ) {
+                throw new RuntimeDroolsException( "This is a bug. Please report back to JBoss Rules team.",
+                                                  e );
+            }
+
+            mv = cw.visitMethod( Opcodes.ACC_PUBLIC,
+                                 overridingMethod.getName(),
+                                 Type.getMethodDescriptor( overridingMethod ),
+                                 null,
+                                 null );
+
+            mv.visitCode();
+            final Label l0 = new Label();
+            mv.visitLabel( l0 );
+
+            mv.visitVarInsn( Opcodes.ALOAD,
+                             1 );
+            mv.visitTypeInsn( Opcodes.CHECKCAST,
+                              Type.getInternalName( originalClass ) );
+
+            mv.visitVarInsn( Type.getType( fieldType ).getOpcode( Opcodes.ILOAD ),
+                             2 );
+
+            if ( !fieldType.isPrimitive() ) {
+                mv.visitTypeInsn( Opcodes.CHECKCAST,
+                                  Type.getInternalName( fieldType ) );
+            }
+
+            if ( originalClass.isInterface() ) {
+                mv.visitMethodInsn( Opcodes.INVOKEINTERFACE,
+                                    Type.getInternalName( originalClass ),
+                                    setterMethod.getName(),
+                                    Type.getMethodDescriptor( setterMethod ) );
+            } else {
+                mv.visitMethodInsn( Opcodes.INVOKEVIRTUAL,
+                                    Type.getInternalName( originalClass ),
+                                    setterMethod.getName(),
+                                    Type.getMethodDescriptor( setterMethod ) );
+            }
+
+            mv.visitInsn( Opcodes.RETURN );
+
+            final Label l1 = new Label();
+            mv.visitLabel( l1 );
+            mv.visitLocalVariable( "this",
+                                   "L" + className + ";",
+                                   null,
+                                   l0,
+                                   l1,
+                                   0 );
+            mv.visitLocalVariable( "bean",
+                                   Type.getDescriptor( Object.class ),
+                                   null,
+                                   l0,
+                                   l1,
+                                   1 );
+            mv.visitLocalVariable( "value",
+                                   Type.getDescriptor( fieldType ),
+                                   null,
+                                   l0,
+                                   l1,
+                                   2 );
+            mv.visitMaxs( 0,
+                          0 );
+            mv.visitEnd();
+
+        }
+    }
+
+    private String getOverridingGetMethodName(final Class< ? > fieldType) {
+        String ret = null;
+        if ( fieldType.isPrimitive() ) {
+            if ( fieldType == char.class ) {
+                ret = "getCharValue";
+            } else if ( fieldType == byte.class ) {
+                ret = "getByteValue";
+            } else if ( fieldType == short.class ) {
+                ret = "getShortValue";
+            } else if ( fieldType == int.class ) {
+                ret = "getIntValue";
+            } else if ( fieldType == long.class ) {
+                ret = "getLongValue";
+            } else if ( fieldType == float.class ) {
+                ret = "getFloatValue";
+            } else if ( fieldType == double.class ) {
+                ret = "getDoubleValue";
+            } else if ( fieldType == boolean.class ) {
+                ret = "getBooleanValue";
+            }
+        } else {
+            ret = "getValue";
+        }
+        return ret;
+    }
+
+    private String getOverridingSetMethodName(final Class< ? > fieldType) {
+        String ret = null;
+        if ( fieldType.isPrimitive() ) {
+            if ( fieldType == char.class ) {
+                ret = "setCharValue";
+            } else if ( fieldType == byte.class ) {
+                ret = "setByteValue";
+            } else if ( fieldType == short.class ) {
+                ret = "setShortValue";
+            } else if ( fieldType == int.class ) {
+                ret = "setIntValue";
+            } else if ( fieldType == long.class ) {
+                ret = "setLongValue";
+            } else if ( fieldType == float.class ) {
+                ret = "setFloatValue";
+            } else if ( fieldType == double.class ) {
+                ret = "setDoubleValue";
+            } else if ( fieldType == boolean.class ) {
+                ret = "setBooleanValue";
+            }
+        } else {
+            ret = "setValue";
+        }
+        return ret;
+    }
+
+    /**
+     * Returns the appropriate Base class field extractor class
+     * for the given fieldType
+     * 
+     * @param fieldType
+     * @return
+     */
+    private Class< ? > getReaderSuperClassFor(final Class< ? > fieldType) {
+        Class< ? > ret = null;
+        if ( fieldType.isPrimitive() ) {
+            if ( fieldType == char.class ) {
+                ret = BaseCharClassFieldReader.class;
+            } else if ( fieldType == byte.class ) {
+                ret = BaseByteClassFieldReader.class;
+            } else if ( fieldType == short.class ) {
+                ret = BaseShortClassFieldReader.class;
+            } else if ( fieldType == int.class ) {
+                ret = BaseIntClassFieldReader.class;
+            } else if ( fieldType == long.class ) {
+                ret = BaseLongClassFieldReader.class;
+            } else if ( fieldType == float.class ) {
+                ret = BaseFloatClassFieldReader.class;
+            } else if ( fieldType == double.class ) {
+                ret = BaseDoubleClassFieldReader.class;
+            } else if ( fieldType == boolean.class ) {
+                ret = BaseBooleanClassFieldReader.class;
+            }
+        } else {
+            ret = BaseObjectClassFieldReader.class;
+        }
+        return ret;
+    }
+
+    /**
+     * Returns the appropriate Base class field extractor class
+     * for the given fieldType
+     * 
+     * @param fieldType
+     * @return
+     */
+    private Class< ? > getWriterSuperClassFor(final Class< ? > fieldType) {
+        Class< ? > ret = null;
+        if ( fieldType.isPrimitive() ) {
+            if ( fieldType == char.class ) {
+                ret = BaseCharClassFieldWriter.class;
+            } else if ( fieldType == byte.class ) {
+                ret = BaseByteClassFieldWriter.class;
+            } else if ( fieldType == short.class ) {
+                ret = BaseShortClassFieldWriter.class;
+            } else if ( fieldType == int.class ) {
+                ret = BaseIntClassFieldWriter.class;
+            } else if ( fieldType == long.class ) {
+                ret = BaseLongClassFieldWriter.class;
+            } else if ( fieldType == float.class ) {
+                ret = BaseFloatClassFieldWriter.class;
+            } else if ( fieldType == double.class ) {
+                ret = BaseDoubleClassFieldWriter.class;
+            } else if ( fieldType == boolean.class ) {
+                ret = BaseBooleanClassFieldWriter.class;
+            }
+        } else {
+            ret = BaseObjectClassFieldWriter.class;
+        }
+        return ret;
+    }
+
+
+}

Added: labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/aspect/DroolsReteooFactHandleFactoryAspect.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/aspect/DroolsReteooFactHandleFactoryAspect.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/services/jbrules/aop/java/org/jboss/internal/soa/esb/services/drools/aspect/DroolsReteooFactHandleFactoryAspect.java	2011-07-01 02:17:36 UTC (rev 37191)
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2005 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.jboss.internal.soa.esb.services.drools.aspect;
+
+import java.sql.Date;
+import org.jboss.aop.joinpoint.MethodInvocation;
+
+import org.drools.common.AbstractFactHandleFactory;
+import org.drools.common.DefaultFactHandle;
+import org.drools.common.EventFactHandle;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.TypeDeclaration;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+import org.drools.spi.FactHandleFactory;
+
+import org.drools.reteoo.ObjectTypeConf;
+import org.drools.reteoo.ReteooFactHandleFactory;
+
+public class DroolsReteooFactHandleFactoryAspect {
+
+    private static final long serialVersionUID = 510l;
+
+    /* (non-Javadoc)
+     * @see org.drools.reteoo.FactHandleFactory#newFactHandle(long)
+     */
+    public final InternalFactHandle newFactHandle(final MethodInvocation invocation) { 
+	final Object[] args = invocation.getArguments();
+	final int id = ((Integer) args[0]).intValue();
+	final Object object = (Object) args[1];
+	final long recency = ((Long) args[2]).longValue();
+	final ObjectTypeConf conf = (ObjectTypeConf) args[3];
+	final InternalWorkingMemory workingMemory = (InternalWorkingMemory) args[4];
+	final WorkingMemoryEntryPoint wmEntryPoint = (WorkingMemoryEntryPoint) args[5];	
+
+        if ( conf != null && conf.isEvent() ) {
+            TypeDeclaration type = conf.getTypeDeclaration();
+            long timestamp;
+            if ((type.getTimestampExtractor() != null ) && ( type.getTimestampExtractor().getExtractToClass() != null) ) {
+                if ( Date.class.isAssignableFrom( type.getTimestampExtractor().getExtractToClass() ) ) {
+                    timestamp = ((Date) type.getTimestampExtractor().getValue( workingMemory,
+                                                                               object )).getTime();
+                } else {
+                    timestamp = type.getTimestampExtractor().getLongValue( workingMemory,
+                                                                           object );
+                }
+            } else {
+                timestamp = workingMemory.getTimerService().getCurrentTime();
+            }
+            long duration = 0;
+            if ( type.getDurationExtractor() != null ) {
+                duration = type.getDurationExtractor().getLongValue( workingMemory,
+                                                                     object );
+            }
+            return new EventFactHandle( id,
+                                        object,
+                                        recency,
+                                        timestamp,
+                                        duration,
+                                        wmEntryPoint );
+        } else {
+            return new DefaultFactHandle( id,
+                                          object,
+                                          recency,
+                                          wmEntryPoint );
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.reteoo.FactHandleFactory#newInstance()
+     */
+    public FactHandleFactory newInstance() {
+        return new ReteooFactHandleFactory();
+    }
+
+    public FactHandleFactory newInstance(int id,
+                                         long counter) {
+        return new ReteooFactHandleFactory( id,
+                                            counter );
+    }
+
+    public Class getFactHandleType() {
+        return DefaultFactHandle.class;
+    }
+}

Added: labs/jbossesb/trunk/product/services/jbrules/aop/resources/META-INF/jboss-aop.xml
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/aop/resources/META-INF/jboss-aop.xml	                        (rev 0)
+++ labs/jbossesb/trunk/product/services/jbrules/aop/resources/META-INF/jboss-aop.xml	2011-07-01 02:17:36 UTC (rev 37191)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<aop xmlns="urn:jboss:aop-beans:1.0">
+   <aspect class="org.jboss.internal.soa.esb.services.drools.aspect.DroolsClassFieldAccessorFactoryAspect" scope="PER_VM"/>  
+   <aspect class="org.jboss.internal.soa.esb.services.drools.aspect.DroolsReteooFactHandleFactoryAspect" scope="PER_VM"/>
+ 
+   <bind pointcut="execution(* org.drools.base.ClassFieldAccessorFactory->getClassFieldReader(..))">
+	<advice name="getClassFieldReader" aspect="org.jboss.internal.soa.esb.services.drools.aspect.DroolsClassFieldAccessorFactoryAspect"/>
+   </bind>
+
+   <bind pointcut="execution(* org.drools.reteoo.ReteooFactHandleFactory->newFactHandle(..))">
+        <advice name="newFactHandle" aspect="org.jboss.internal.soa.esb.services.drools.aspect.DroolsReteooFactHandleFactoryAspect"/>
+   </bind>
+
+</aop>
+

Modified: labs/jbossesb/trunk/product/services/jbrules/build.xml
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/build.xml	2011-06-30 22:58:55 UTC (rev 37190)
+++ labs/jbossesb/trunk/product/services/jbrules/build.xml	2011-07-01 02:17:36 UTC (rev 37191)
@@ -3,8 +3,46 @@
 	<property file="build.properties"/>
 	<!-- Import the base Ant build script... -->
 	<import file="${services.base.build}"/>
+
+	<property name="drools.core.jar" value="drools-core-5.2.0.Final.jar"/>
+	<property name="drools.core.aop.jar" value="drools-core-5.2.0.Final-aop.jar"/>
+        <property name="aop.dir" location="aop"/>
+        <property name="aop.src.dir" location="${aop.dir}/java"/>
+        <property name="aop.resources.dir" location="${aop.dir}/resources"/>
+        <property name="aop.jar.version" value="5.2.0.Final"/>
+        <property name="aop.jar.name" value="drools-core-${aop.jar.version}.aop"/>
+        <property name="aop.jar" value="build/${aop.jar.name}"/>
+        <property name="aop.classes.dir" location="build/aop-classes"/>
+        <property name="aopc.drools.classes.dir" location="build/aopc-drools-classes"/>
+
+    <property file="${esb.root.dir}/install/deployment.properties"/>
+
+    <path id="jboss-esb-dependencies">
+        <fileset dir="../../build/jbossesb/lib" includes="jbossesb-rosetta.jar" />
+    </path>
+
+    <path id="build.classpath">
+        <path location="${basedir}/src/test/resources"/>
+	<path location="${aopc.drools.classes.dir}"/>
+        <fileset dir="../../build/lib" includes="jboss-aop-jdk50-1.5.6.GA.jar, jboss-system-4.2.2.GA.jar" />
+	<fileset dir="lib/ext" includes="*.jar"/>	
+        <fileset dir="../../lib/ext" includes="*.jar" />
+        <fileset dir="../../build/lib" includes="*.jar" />
+        <fileset dir="../../../testlib" includes="*.jar"/>
+	<!--
+	<fileset dir="${org.jboss.esb.server.home}/client">
+                <include name="jboss-mdr.jar"/>
+                <include name="javassist*.jar"/>
+                <include name="trove*.jar"/>
+                <include name="concurrent*.jar"/> <include name="jboss-aop*.jar"/>
+                <include name="jboss-common*.jar"/>
+                <include name="jboss-logging-*.jar"/>
+	</fileset>
+	-->
+        <path refid="jboss-esb-dependencies" />
+    </path>
 	
-	<target name="test">
+	<target name="test" depends="esb">
 		<copy todir="${basedir}/build/tests/classes" overwrite="true">
 			<fileset dir="${basedir}/src/test/resources">
 				<include name="*.xls"/>	
@@ -13,7 +51,57 @@
 				<include name="*.pkg"/>	
 			</fileset>
 		</copy>
-		<antcall target="base.test"/>
+		<mkdir dir="build/tests/classes"/>
+		<mkdir dir="build/tests/report"/>
+        	<javac srcdir="src/test/java" destdir="build/tests/classes" debug="on" >
+                <classpath>
+                <path refid="exec.classpath" />
+		<path refid="test.classpath" />
+                </classpath>
+                </javac>
+                <copy todir="build/tests/classes" >
+                  <fileset dir="src/test/java" excludes="**/*.java" />
+                </copy>
+            <junit printsummary="yes" haltonerror="yes" haltonfailure="yes" showoutput="no" fork="true">
+            <formatter type="plain" usefile="false"/>
+            <formatter type="xml"/>
+            <batchtest todir="build/tests/report">
+                <fileset dir="src/test/java">
+                    <include name="**/*UnitTest.java"/>
+                </fileset>
+            </batchtest>
+            <classpath>
+		    <pathelement location="build/jbrules.esb/${drools.core.aop.jar}"/>
+		    <fileset dir="../../build/lib" includes="jboss-aop-jdk50-1.5.6.GA.jar"/>
+		    <pathelement location="${aop.jar}"/>
+       		    <fileset dir="${org.jboss.esb.server.home}/client">
+                <include name="jboss-mdr.jar"/>
+                <include name="javassist*.jar"/>
+                <include name="trove*.jar"/>
+                <include name="concurrent*.jar"/>
+                <include name="jboss-aop*.jar"/>
+                <include name="jboss-common*.jar"/>
+                <include name="jboss-logging-*.jar"/>
+        	    </fileset>
+
+                    <pathelement location="${esb.root.dir}/ftp/lib/slf4j-log4j12-1.3.0.jar"/>
+                    <pathelement location="${esb.root.dir}/ftp/lib/slf4j-api-1.3.0.jar"/>
+                    <pathelement location="${esb.root.dir}/build/jbossesb/lib/test-util.jar"/>
+                        <!-- log4j location  -->
+                    <pathelement location="test/resources"/>
+                        <!-- using instrumented code for code coverage -->
+                    <pathelement location="${coverage.dir}/instr"/>
+                    <pathelement location="build/tests/classes/"/>
+                    <path refid="exec.classpath" />
+                    <path refid="test.classpath" />
+            </classpath>
+                        <!-- emma jvm args -->
+                        <jvmarg value="-Demma.coverage.out.file=${coverage.dir}/coverage.emma" />
+                <sysproperty key="log4j.configuration" value="log4j.xml"/>
+            <sysproperty key="jboss.esb.invm.scope.default" value="NONE"/>
+                        <jvmarg line="-Djava.endorsed.dirs=${endorsed.dir}"/>
+        </junit>
+
 	</target>
 	
     <target name="generatePackageFile" depends="compile" 
@@ -25,5 +113,47 @@
             <classpath refid="classpath" />
         </java>
     </target>  
-    
+   
+       <target name="aop-compile">
+                <mkdir dir="${aop.classes.dir}"/>
+                <javac srcdir="${aop.src.dir}" destdir="${aop.classes.dir}"
+                        debug="true" source="1.5" classpathref="build.classpath"/>
+        </target>
+
+        <target name="aop-jar" depends="aop-compile">
+                <jar destfile="${aop.jar}">
+                        <fileset dir="${aop.classes.dir}"/>
+                        <fileset dir="${aop.resources.dir}"/>
+                </jar>
+        </target>
+
+        <target name="aopc-jar">
+                <taskdef name="aopc" classname="org.jboss.aop.ant.AopC" classpathref="build.classpath"/>
+
+                <delete dir="${aopc.drools.classes.dir}" quiet="true"/>
+                <mkdir dir="${aopc.drools.classes.dir}"/>
+
+                <unzip dest="${aopc.drools.classes.dir}" src="lib/ext/${drools.core.jar}"/>
+
+                <aopc compilerclasspathref="build.classpath" verbose="true">
+                        <classpath path="${aopc.drools.classes.dir}"/>
+                        <src path="${aopc.drools.classes.dir}"/>
+			<include name="org/drools/base/ClassFieldAccessorFactory.class"/>
+			<include name="org/drools/reteoo/ReteooFactHandleFactory.class"/>
+                        <aoppath path="${aop.resources.dir}/META-INF/jboss-aop.xml"/>
+                        <aopclasspath path="${aop.classes.dir}"/>
+                </aopc>
+		
+                <zip destfile="build/${drools.core.aop.jar}" basedir="${aopc.drools.classes.dir}"/>
+		<delete file="build/jbrules.esb/${drools.core.jar}"/>
+		<copy file="build/${drools.core.aop.jar}" todir="build/jbrules.esb"/>
+        </target>
+	
+	<target name="service-compile" depends="aop-jar,aopc-jar"/>
+
+	<target name="service-esb">
+ 		<delete file="build/jbrules.esb/${drools.core.jar}"/>
+		<copy file="${aop.jar}" todir="build/jbrules.esb"/>	
+	</target>
+ 
     </project>

Deleted: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-api-5.1.0.jar
===================================================================
(Binary files differ)

Deleted: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-compiler-5.1.0.jar
===================================================================
(Binary files differ)

Added: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-compiler-5.2.0.Final.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-compiler-5.2.0.Final.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Deleted: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-core-5.1.0.jar
===================================================================
(Binary files differ)

Added: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-core-5.2.0.Final.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-core-5.2.0.Final.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Deleted: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-decisiontables-5.1.0.jar
===================================================================
(Binary files differ)

Added: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-decisiontables-5.2.0.Final.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-decisiontables-5.2.0.Final.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Deleted: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-jsr94-5.1.0.jar
===================================================================
(Binary files differ)

Added: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-jsr94-5.2.0.Final.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-jsr94-5.2.0.Final.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Deleted: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-templates-5.1.0.jar
===================================================================
(Binary files differ)

Added: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-templates-5.2.0.Final.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/services/jbrules/lib/ext/drools-templates-5.2.0.Final.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Deleted: labs/jbossesb/trunk/product/services/jbrules/lib/ext/jxl-2.4.2.jar
===================================================================
(Binary files differ)

Added: labs/jbossesb/trunk/product/services/jbrules/lib/ext/jxl-2.6.10.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/services/jbrules/lib/ext/jxl-2.6.10.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: labs/jbossesb/trunk/product/services/jbrules/lib/ext/knowledge-api-5.2.0.Final.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/services/jbrules/lib/ext/knowledge-api-5.2.0.Final.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: labs/jbossesb/trunk/product/services/jbrules/lib/ext/mvel2-2.1.0.drools2.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossesb/trunk/product/services/jbrules/lib/ext/mvel2-2.1.0.drools2.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Modified: labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java	2011-06-30 22:58:55 UTC (rev 37190)
+++ labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java	2011-07-01 02:17:36 UTC (rev 37191)
@@ -36,6 +36,7 @@
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseConfiguration;
 import org.drools.KnowledgeBaseFactory;
+import org.drools.RuntimeDroolsException;
 import org.drools.agent.KnowledgeAgent;
 import org.drools.agent.KnowledgeAgentConfiguration;
 import org.drools.agent.KnowledgeAgentFactory;
@@ -104,7 +105,7 @@
 	 * 			add the package to the RuleBase.
 	 */
 	public KnowledgeBase createRuleBaseFromRuleFiles(
-			final RuleInfo ruleInfo ) throws RuleServiceException
+			final RuleInfo ruleInfo ) throws RuleServiceException, RuntimeDroolsException
 	{
 		final String drl = ruleInfo.getRuleSource();
 		final String dsl = ruleInfo.getDslSource();

Modified: labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java	2011-06-30 22:58:55 UTC (rev 37190)
+++ labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java	2011-07-01 02:17:36 UTC (rev 37191)
@@ -27,6 +27,7 @@
 
 import org.apache.log4j.Logger;
 import org.drools.KnowledgeBase;
+import org.drools.RuntimeDroolsException;
 import org.drools.agent.KnowledgeAgent;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.jboss.internal.soa.esb.assertion.AssertArgument;
@@ -134,7 +135,7 @@
 	 * @throws RuleServiceException If a problem occurs while trying to create the Drools RuleBase or if an exception
 	 *                             occurs during execution
 	 */
-	public Message executeStatefulRules(final StatefulRuleInfo ruleInfo, final Message msg) throws RuleServiceException
+	public Message executeStatefulRules(final StatefulRuleInfo ruleInfo, final Message msg) throws RuleServiceException, RuntimeDroolsException
     {
 		AssertArgument.isNotNull(ruleInfo, "ruleInfo");
 		final DroolsRuleBaseState ruleBaseState = getRuleBaseStateForFileBasedRules(ruleInfo);
@@ -207,7 +208,7 @@
 	 *
 	 * @return Message with updated objects.
 	 */
-	DroolsRuleBaseState getRuleBaseStateForFileBasedRules(final RuleInfo ruleInfo) throws RuleServiceException
+	DroolsRuleBaseState getRuleBaseStateForFileBasedRules(final RuleInfo ruleInfo) throws RuleServiceException, RuntimeDroolsException
 	{
 		final String ruleSet = ruleInfo.getRuleSource();
 		final String dsl = ruleInfo.getDslSource();

Modified: labs/jbossesb/trunk/product/services/jbrules/src/test/resources/testrules.pkg
===================================================================
(Binary files differ)



More information about the jboss-svn-commits mailing list