<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7638.1">
<TITLE>Problems with custom functions and types in one drl file</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">Hi, </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">i have som</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">e problems with custom functions and types.</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> </SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">I m</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">using</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> Drools 5.0 and Eclipse 3.4.2 (have to use these eclipse version, so my decision was to use the drools beta).</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">I declared a type in my rule file like : </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="de"><B></B></SPAN><SPAN LANG="de"><B></B></SPAN><SPAN LANG="de"><B></B></SPAN><B><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">declare</FONT></SPAN></B><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New"></FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">VarHolder</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">var1</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New"> : String</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">var2</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New"> :</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">Long</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">var3</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New"> :</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">String</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="de"><B></B></SPAN><SPAN LANG="de"><B></B></SPAN><SPAN LANG="de"><B></B></SPAN><B><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">end</FONT></SPAN></B><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">also i specified a custom function in the same file, whi</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">ch i have to use in my rules</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> (</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">it&#8217;s</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">a example function)</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> : </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">function String hello(String name) {</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;</FONT></SPAN><SPAN LANG="de"> <FONT SIZE=2 FACE="Courier New">return &quot;Hello &quot;+name+&quot;!&quot;;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="de"><FONT SIZE=2 FACE="Courier New">}</FONT></SPAN><SPAN LANG="de"></SPAN></P>

<P DIR=LTR><SPAN LANG="de"><FONT SIZE=2 FACE="Courier New">.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">The declared Type will be used&nbsp; in the java code</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">: </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">// handle the type as necessary:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">// create instances:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">Object</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">vars</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New"> =</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">varHolderTyp</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">.newInstance();</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">// set attributes values</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">varHolderTyp</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">.set</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">FromMap</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">(</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">vars</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">,</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">varMap);</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">// insert fact into a session</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">StatefulKnowledgeSession ksession = ...</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">ksession.insert(</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">vars</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New"> );</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de-ch"></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="de-ch"></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">When it comes to the</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">&#8220;</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">setFromMap</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">&#8221;</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">, then</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">I</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> get a ClassCastException for the VarHolderTyp. But when</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">I</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> remove the declaration</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> of the function in the rule file, then everything works fine (all variables will be filled correctly). It seems, that the reflection</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">mechanism</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"></FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">will not work correctly, when drools want to create the Pojo for VarHolder and</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">the Static Method for the function. But it s very</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">difficult</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> to debug, because the exception fire</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">s in the drools engine. </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Calibri">Maybe</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">I&#8217;</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">ve make a mistake</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> so</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">anyone</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">&nbsp; knows a solution for this problem or can tell me, where my mistake is.</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">It will be nice, when</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">I</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> can declare a type and a function</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">together</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"></FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">in one rule</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">file.</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"></FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us">&nbsp;<FONT FACE="Calibri"> At the moment,</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">I</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> created a java class for VarHolder, so the exception does not appear, bu</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">t</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"> <FONT FACE="Calibri">I</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"> m losing a lot of dynamic. </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri">Please give me a hint</FONT></SPAN><SPAN LANG="de"></SPAN><SPAN LANG="en-us"></SPAN></P>

</BODY>
</HTML>