Hi I am having trouble compiling my .drl file using parameterized types. Is this a known issue or am I doing something wrong?
I have defined a Price class like this: public class Price<T extends Comparable<T>> implements IPrice<T> { ... } I have a Product class that has a field of type Price<Money>. In my Drools client, I instantiate it like this: product2.setRetailPrice(new Price<Money>(Money.createUSDollars(19.95))); That's fine. Here is a snippet from my .drl: rule "Test Type Param" no-loop true when product : IMarketableProduct(productCode == 28014) then System.out.println("Match!"); Money fiveDollars = Money.createUSDollars(5); Price<Money> addFiveDollars = new Price<Money>( product.getRetailPrice().getValue().add(fiveDollars)); product.setRetailPrice(addFiveDollars); end The addition of the $5 works fine from a regular Java class. But I get a few related errors when compiling the above .drl. Here's the first: "Syntax error, parameterized types are only available if source level is 5.0" But I know that Eclipse is using JDK 5. To prove it, here is a copy from "Configuration Details": java.class.version=49.0 java.endorsed.dirs=C:\Program Files\Java\jre1.5.0\lib\endorsed java.ext.dirs=C:\Program Files\Java\jre1.5.0\lib\ext java.home=C:\Program Files\Java\jre1.5.0 java.io.tmpdir=C:\TEMP\ java.library.path=C:\WINDOWS\system32;.;C:\WINDOWS\system32;C:\WINDOWS;c:\files\tools\ruby\bin;c:\Program Files\j2sdk1.4.2_06;C:\Program Files\Java\jdk1.5.0;C:\Program Files\Apache Software Foundation\Maven 1.0\bin;E:\Program Files\Inprise\AppServer\bin;C:\WINDOWS\system32;C:\WINDOWS;E:\PROGRA~1\IBM\CLIENT~1;E:\PROGRA~1\IBM\CLIENT~1\Shared;E:\PROGRA~1\IBM\CLIENT~1\Emulator;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\Files\AppServer\bin;.;C:\Program Files\Apache Software Foundation\Maven 1.0\bin;C:\WINNT\system32;C:\WINNT;C:\Files\downloads\JavaCC\javacc-4.0\bin java.runtime.name=Java(TM) 2 Runtime Environment, Standard Edition java.runtime.version=1.5.0-b64 I also have tested my rules with an enum, and it worked fine. So Drools must know that the source really is 5.0. I checked the settings to double check that everything is set to JDK 5. I am using the Jboss Rules plugin: drools-ide-3.0-RC-2-bin.zip I am using eclipse-SDK-3.2RC3-win32.zip Here is the second related error: "The type Price is not generic; it cannot be parameterized with arguments <Money>" Clearly it is generic, and there is not another Price class I am using. (My import is correct and there's no other Price on the cp). Finally, to prove that Drools knows about the correct Price class, here is the 3rd related compiler error: "The method add(Money) is undefined for the type Comparable" So Drools apparently is picking up the Price class, as Price is parameterized on <T extends Comparable<T>> That means that Drools loads the correct class because it can see the upper bound of the type parameter (Comparable). I have been using this Price class for months in many contexts and it works great. It is not an issue with the class itself. Am I doing something wrong? Can we not use parameterized types yet? I looked at Jira and didn't see anything about this. Thank you very much for your help Eben