[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