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.man...@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@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
  Edson Tirelli
  Principal Software Engineer
  Red Hat Business Systems and Intelligence Group
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to