[rules-users] drools 6 equivalent of addKnowledgePackages

Edson Tirelli ed.tirelli at gmail.com
Tue Dec 3 13:59:55 EST 2013


   There are several different ways of doing it, but here is a snippet to
help creating an in-memory kjar with default kbases and ksessions:


    public static byte[] createKJar(KieServices ks,
                                    ReleaseId releaseId,
                                    String pom,
                                    String... drls) {
        KieFileSystem kfs = ks.newKieFileSystem();
        if( pom != null ) {
            kfs.write("pom.xml", pom);
        } else {
            kfs.generateAndWritePomXML(releaseId);
        }
        KieResources kr = KieServices.getResources();
        for (int i = 0; i < drls.length; i++) {
            if (drls[i] != null) {
                kfs.write( kr.newByteArrayResource( drls[i].getBytes()
).setSourcePath("my/pkg/drl"+i+".drl") );
            }
        }
        KieBuilder kb = ks.newKieBuilder(kfs).buildAll();
        if( kb.getResults().hasMessages(
org.kie.api.builder.Message.Level.ERROR ) ) {
            for( org.kie.api.builder.Message result :
kb.getResults().getMessages() ) {
                System.out.println(result.getText());
            }
            return null;
        }
        InternalKieModule kieModule = (InternalKieModule) ks.getRepository()
                .getKieModule(releaseId);
        byte[] jar = kieModule.getBytes();
        return jar;
    }

   Please note that you usually don't need the byte[] back, so you can
ignore everything after the last 3 lines of the code. Also, the error check
in the snippet is just printing to sysout. You should handle this
accordingly in your application.

   Hope it helps.

   Edson




On Tue, Dec 3, 2013 at 3:25 AM, pmander <paul.s.mander at gmail.com> wrote:

> I head previously read that but didn't spot the bit that mentions creating
> from a drl defined as a String. I take it this can be done from
> KieFileSystem.
>
> String rules = ...
> KieFileSystem kfs = kieServices.newKieFileSystem();
> kfs.write(kieServices.getResources().newReaderResource(new
> StringReader(rules)));
>
> This throws an exception complaining that the resource doesn't have a
> source
> or target path set.
>
> Is there a way to push a dynamically created drl into this without writing
> it to disk first?
>
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/drools-6-equivalent-of-addKnowledgePackages-tp4027044p4027059.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
>



-- 
  Edson Tirelli
  Principal Software Engineer
  Red Hat Business Systems and Intelligence Group
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20131203/a96bef97/attachment-0001.html 


More information about the rules-users mailing list