[rules-users] Drools function not working with Javassist facts

Wolfgang Laun wolfgang.laun at gmail.com
Wed May 16 03:34:33 EDT 2012


You aren't showing all of your code, or not the code you're actually using.

 It's remarkable that you can compile your DRL (without the function)
when the dynamically created class "drools.dynamic.MyDynamicClass"
isn't there yet.

Is the function logMessage declared in the DRL where the error is thrown?
You can't import a DRL function into another DRL file.

-W


On 16/05/2012, Ayush <ayush.vatsyayan at alcatel-lucent.com> wrote:
> Hello,
>
> I'm trying to build a rule which accepts the dynamic facts. The dynamic
> facts are created using the javassist API. The rule works fine when I'm
> adding a single rule but as soon as I declare any function in the drl file
> the rule doesn't compile.
>
> *Following is the code sample for creating the dynamic facts.*
>       // creating class object
>       final ClassPool pool = ClassPool.getDefault ();
>       CtClass evalClass = pool.makeClass ("drools.dynamic.MyDynamicClass");
>
>       // creating class field
>       final CtField nameField = new CtField (CtClass.intType, "Count",
> evalClass);
>       nameField.setModifiers (Modifier.PRIVATE);
>       evalClass.addField (nameField);
>
>       // creating getter for the above created field.
>       final CtMethod getter = CtNewMethod.getter ("getCount", nameField);
>       evalClass.addMethod (getter);
>
>       // creating setter for the above created field.
>       final CtMethod setter = CtNewMethod.setter ("setCount", nameField);
>       evalClass.addMethod (setter);
>
>       // finally creating class
>       final Class tempClass = evalClass.toClass ();
>
>       // creating class object
>       Object obj = tempClass.newInstance()
>
>       // inserting it in drools
>       droolsSession.insert(obj)
>
> *Following is the rule *
> 	rule "DynamicFactRule"
> 	dialect "mvel"
> 	when
> 		$obj : MyDynamicClass()
> 	then
> 		$obj.setCount(8);
> 		System.out.println("Count set is: "+$obj.getCount(8));
> 	end
>
> *This rule works fine but when I'm adding a function in drl file then it
> throws error: *
> 	1) Unable to resolve ObjectType 'MyDynamicClass'
> 	2)Error importing : 'defaultpkg.LogMessage.logMessage'
>
> *The function I added is*
> 	function void logMessage() {
> 		System.out.println("This is log message");
> 	}
>
>
> *Following is the environment I'm using*
> 	- Drools 5.3.0
> 	- JBoss 6.x
> 	- JDK6
>
> I looked at many approaches but I'm confused and out of soln, as none of it
> is working. I also tried looking at Drools trait but it's going over my head
>
>
> I'll highly appreciate if someone can please suggest what should be the
> ideal approach to solve it.
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Drools-function-not-working-with-Javassist-facts-tp3996584.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>


More information about the rules-users mailing list