Ok, i have looked at the drools source and I see the following:
TypeDeclaration lastType = null;
try {
// Add the type declarations to the RuleBase
if ( newPkg.getTypeDeclarations() != null ) {
// add type declarations
for ( TypeDeclaration type :
newPkg.getTypeDeclarations().values() ) {
lastType = type;
type.setTypeClass( this.rootClassLoader.loadClass(
pkg.getName() + "." + type.getTypeName() ) );
}
}
} catch ( ClassNotFoundException e ) {
throw new RuntimeDroolsException( "unable to resolve Type
Declaration class '" + lastType.getTypeName() + "'" );
}
If I debug this, I find that the pkg.getName() + "." + type.getTypeName()
is resolved to
defaultPackage.Message
so, its trying to load a class called "defaultPackage.Message"
which obviously isn't found..
richarda wrote:
Yeah, its in the classpath.. and to be doubly sure just before the code I
do a
Message s=new Message();
and that works.. so jvm can find the Message object.
I have created
https://jira.jboss.org/jira/browse/JBRULES-2348
I would love to know if any workarounds are possible, this has ground my
project to a halt.
thanks
Ric
Edson Tirelli-4 wrote:
>
> Kris just reminded me of something: do you have the actual Message
> class
> in the test program classpath?
>
> When downloading the package from guvnor, I think it does not download
> the model jar... only the actual rules, etc...
>
> Edson
>
> 2009/11/25 richarda <richard.ambridge(a)gmail.com>
>
>>
>> Also tried under 5.1.0M1 release.. same issue :(
>> Am i doing something wrong by declaring the @role in the Configuration
>> section?
>>
>>
>> richarda wrote:
>> >
>> > Still trying to get this to work.
>> > I have managed to create from a default (new) guvnor setup.
>> >
>> > Steps I do..
>> > 1. Create fresh guvnor
>> > 2. In eclipse create Message.java file in package com.sample, and
>> create
>> > a jar file
>> > 3. In guvnor import the model for the Message.jar file
>> > 4. In guvnor create a category
>> > 5. Create an import statement for import com.sample.Message
>> > 6. Create a simple technical rule, something like when, Message(),
>> > then, System.out.println(".");
>> > 7. Build the pkg
>> > 8. download the pkg
>> >
>> > use the code from previous post to load the pkg...
>> > it works fine..
>> >
>> > now, goto guvnor advanced view and change the Configuration from:
>> > import com.sample.Message
>> >
>> > to:
>> >
>> > import com.sample.Message;
>> >
>> > declare Message
>> > @role( event )
>> > end
>> >
>> >
>> > build the pkg,
>> > download the pkg,
>> > run the test program...
>> >
>> > I get:
>> > org.drools.RuntimeDroolsException: unable to resolve Type Declaration
>> > class 'Message'
>> > at
>> org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:754)
>> > at
>> >
>> org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:515)
>> > at
>> >
>> org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:25)
>> > at com.sample.DroolsTest.readKnowledgeBase(DroolsTest.java:69)
>> > at com.sample.DroolsTest.main(DroolsTest.java:27)
>> >
>> >
>> > richarda wrote:
>> >>
>> >> So, my code is doing this:
>> >>
>> >> KnowledgeBaseConfiguration conf =
>> >> KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
>> >> conf.setOption(EventProcessingOption.STREAM);
>> >> KnowledgeBuilder builder =
>> >> KnowledgeBuilderFactory.newKnowledgeBuilder();
>> >> try {
>> >> File f = new File("/tmp/my.pkg");
>> >> InputStream stream = new FileInputStream(f);
>> >> if (stream == null) {
>> >> jlog.fatal("Unable to find rule pkg");
>> >> } else {
>> >> jlog.info("adding pkg");
>> >>
>> >> builder.add(ResourceFactory.newInputStreamResource(stream),
>> >> ResourceType.PKG);
>> >> }
>> >> } catch (Exception e) {
>> >> e.printStackTrace();
>> >> }
>> >> KnowledgeBase kbase =
>> >> KnowledgeBaseFactory.newKnowledgeBase(conf);
>> >>
>> kbase.addKnowledgePackages(builder.getKnowledgePackages());
>> >> jlog.info("setup creating knowledge session");
>> >> ksession = kbase.newStatefulKnowledgeSession();
>> >> jlog.info(" setup ksession created");
>> >>
>> >>
>> >> The pkg was created from Guvnor.
>> >>
>> >> If in the package declaration area in Guvnor, (where you put the
>> import
>> >> statements)
>> >> If I put
>> >> declare Signature
>> >> @role ( event )
>> >> end
>> >>
>> >> then build the package, save it to disk /tmp/my.pkg
>> >> on startup I get:
>> >>
>> >>
>>
[#|2009-11-24T14:50:38.944+0000|WARNING|sun-appserver2.1|javax.enterprise.system.stream.err|_ThreadID=12;_ThreadName=pool-1-thread-3;_RequestID=7c35064d-757e-4519-b5eb-433db89e168d;|org.drools.RuntimeDroolsException:
>> >> unable to resolve Type Declaration class 'Signature'
>> >> at
>> >>
>> org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:754)
>> >> at
>> >>
>> org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:515)
>> >> at
>> >>
>> org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:25)
>> >>
>> >>
>> >> I need to declare 'Signature' as an 'event'
>> >> Am I doing this wrong?
>> >>
>> >> If I do this all in Eclipse and load the DRL files manually it all
>> works.
>> >>
>> >
>> >
>>
>> --
>> View this message in context:
>>
http://old.nabble.com/unable-to-resolve-Type-Declaration-class-tp26497326...
>> Sent from the drools - user mailing list archive at
Nabble.com.
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>
>
>
> --
> Edson Tirelli
> JBoss Drools Core Development
> JBoss by Red Hat @
www.jboss.com
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>