Java源码示例:org.kie.api.io.Resource

示例1
@Test
public void testKieConsoleLogger() throws Exception {
    String drl = "package org.drools.integrationtests\n" + 
    		"import org.drools.compiler.Message;\n" +
    		"rule \"Hello World\"\n" + 
    		"    when\n" + 
    		"        m : Message( myMessage : message )\n" + 
    		"    then\n" + 
    		"end";
    // get the resource
    Resource dt = ResourceFactory.newByteArrayResource( drl.getBytes() ).setTargetPath( "org/drools/integrationtests/hello.drl" );
    
    // create the builder
    KieSession ksession = getKieSession( dt );
    KieRuntimeLogger logger = KieServices.Factory.get().getLoggers().newConsoleLogger( ksession );

    ksession.insert( new Message("Hello World") );
    int fired = ksession.fireAllRules();
    assertEquals( 1, fired ); 
    
    logger.close();
}
 
示例2
/**
 * The same resource (containing a type declaration) is added twice in the
 * kbuilder.
 */
@Test
public void testDuplicatedTypeDeclarationWith2FieldsInSameResource() {
    //same package, different resources
    String str1 = "";
    str1 += "package org.drools.compiler \n" +
    		"declare org.drools.ClassA \n" +
    		"    name : String \n" +
    		"    lastName : String \n" +
    		"end \n";

    Resource resource = ResourceFactory.newByteArrayResource( str1.getBytes());

    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

    kbuilder.add( resource, ResourceType.DRL );

    kbuilder.add( resource, ResourceType.DRL );

    if ( kbuilder.hasErrors() ) {
       fail( kbuilder.getErrors().toString() );
    }

}
 
示例3
public static byte[] createKJar(KieServices ks,
        ReleaseId releaseId,
        Resource pom,
        Resource... resources) {
    KieFileSystem kfs = ks.newKieFileSystem();
    if (pom != null) {
        kfs.write(pom);
    } else {
        kfs.generateAndWritePomXML(releaseId);
    }
    for (int i = 0; i < resources.length; i++) {
        if (resources[i] != null) {
            kfs.write(resources[i]);
        }
    }
    ks.newKieBuilder(kfs).buildAll();
    InternalKieModule kieModule = (InternalKieModule) ks.getRepository()
            .getKieModule(releaseId);
    byte[] jar = kieModule.getBytes();
    return jar;
}
 
示例4
private static void buildRelease(ReleaseId releaseId, Resource pomResource, Resource kmodule, String... resources) {
    if (releases.contains(releaseId)) {
        ks.getRepository().removeKieModule(releaseId);
    }
    KieServices kieServices = KieServices.Factory.get();

    KieFileSystem kfs = kieServices.newKieFileSystem();

    kfs.write("pom.xml", pomResource);

    kfs.write("src/main/resources/META-INF/kmodule.xml", kmodule);

    for (String res : resources) {
        Resource resource = new ClassPathResource(res);
        kfs.write("src/main/resources/" + res, resource);
    }

    hasErrors(kieServices.newKieBuilder(kfs).buildAll().getResults());

    releases.add(releaseId);
}
 
示例5
@Test
public void testGetDefaultKieSessionModelEmptyKmodule() {
    KieServices kieServices = KieServices.Factory.get();
    String drl = "package org.drools.test\n" +
            "rule R1 when\n" +
            "   $m : Object()\n" +
            "then\n" +
            "end\n";
    Resource resource = kieServices.getResources().newReaderResource( new StringReader( drl), "UTF-8" );
    resource.setTargetPath("org/drools/test/rules.drl");
    String kmodule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<kmodule xmlns=\"http://www.drools.org/xsd/kmodule\">\n" +
            "</kmodule>";

    // Create an in-memory jar for version 1.0.0
    ReleaseId releaseId = kieServices.newReleaseId("org.kie", "test-testGetDefaultKieSessionModelEmptyKmodule", "1.0.0");
    createAndDeployJar(kieServices, kmodule, releaseId, resource);

    KieContainer kieContainer = kieServices.newKieContainer(releaseId);

    KieSessionModel sessionModel = kieContainer.getKieSessionModel(null);
    assertNotNull(sessionModel);
}
 
示例6
@Test
public void testValidXsdTargetNamespace() {
    final String drl1 = "package org.drools.compiler\n" +
            "rule R1 when\n" +
            "   $m : Message()\n" +
            "then\n" +
            "end\n";

    final String kmodule = "<kmodule xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" +
            "         xmlns=\"http://www.drools.org/xsd/kmodule\">\n" +
            "  <kbase name=\"kbase1\">\n" +
            "    <ksession name=\"ksession1\" default=\"true\"/>\n" +
            "  </kbase>\n" +
            "</kmodule>";

    final KieServices ks = KieServices.Factory.get();

    final ReleaseId releaseId1 = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" );
    final Resource r1 = ResourceFactory.newByteArrayResource( drl1.getBytes() ).setResourceType( ResourceType.DRL ).setSourcePath( "kbase1/drl1.drl" );
    final KieModule km = createAndDeployJar( ks,
                                       kmodule,
                                       releaseId1,
                                       r1);

    ks.newKieContainer( km.getReleaseId() );
}
 
示例7
public void addFunction(FunctionDescr functionDescr,
                        TypeResolver typeResolver,
                        Resource resource) {
    //        Serializable s1 = compile( (String) functionDescr.getText(),
    //                                   null,
    //                                   null,
    //                                   null,
    //                                   null,
    //                                   null );
    //        
    //        final ParserContext parserContext = getParserContext( analysis,
    //                                                              outerDeclarations,
    //                                                              otherInputVariables,
    //                                                              context );
    //        return MVELCompilationUnit.compile( text, pkgBuilder.getRootClassLoader(), parserContext, languageLevel );
    //        

    //        Map<String, org.mvel2.ast.Function> map = org.mvel2.util.CompilerTools.extractAllDeclaredFunctions( (org.mvel2.compiler.CompiledExpression) s1 );
    //        MVELDialectRuntimeData data = (MVELDialectRuntimeData) this.packageRegistry.getDialectRuntimeRegistry().getDialectData( getId() );
    //        for ( org.mvel2.ast.Function function : map.values() ) {
    //            data.addFunction( function );
    //        }
}
 
示例8
@Test
public void testKieConsoleLoggerStateless() throws Exception {
    String drl = "package org.drools.integrationtests\n" + 
            "import org.drools.compiler.Message;\n" +
            "rule \"Hello World\"\n" + 
            "    when\n" + 
            "        m : Message( myMessage : message )\n" + 
            "    then\n" + 
            "end";
    // get the resource
    Resource dt = ResourceFactory.newByteArrayResource( drl.getBytes() ).setTargetPath("org/drools/integrationtests/hello.drl");
    
    // create the builder
    StatelessKieSession ksession = getStatelessKieSession(dt);
    KieRuntimeLogger logger = KieServices.Factory.get().getLoggers().newConsoleLogger( ksession );

    AgendaEventListener ael = mock( AgendaEventListener.class );
    ksession.addEventListener( ael );
    
    ksession.execute( new Message("Hello World") );
    
    verify( ael ).afterMatchFired( any(AfterMatchFiredEvent.class) );
    
    logger.close();
}
 
示例9
public void addPackageFromScoreCard(final Resource resource,
                                    final ResourceConfiguration configuration) throws DroolsParserException, IOException {
    this.resource = resource;
    final ScoreCardConfiguration scardConfiguration = configuration instanceof ScoreCardConfiguration ?
            (ScoreCardConfiguration) configuration :
            null;
    final String pmmlString = ScoreCardFactory.getPMMLStringFromInputStream(resource.getInputStream(), scardConfiguration);
    if (pmmlString != null) {
        addPackageFromScoreCard(pmmlString, "scorecard_generated.pmml");
    }
    this.resource = null;
}
 
示例10
@BeforeEach
public void initSession() {
    String drlString = "package org.jboss.brms\n" + 
            "import org.drools.compiler.StockTick\n" + 
            "declare StockTick\n" + 
            "    @role( event )\n" + 
            "    @expires( 4s )\n" + 
            "end\n" + 
            "rule \"TestEventReceived\"\n" + 
            "    when\n" + 
            "        $event : StockTick() over window:time(4s) from entry-point EventStream\n" + 
            "    then\n" + 
            "        // do something;\n" + 
            "end";
    KieServices ks = KieServices.Factory.get();
    KieFileSystem kfs = ks.newKieFileSystem();

    final Resource drl = ks.getResources().newByteArrayResource( drlString.getBytes() ).setTargetPath("org/jboss/brms/lifecycle.drl");
    kfs.write(drl);

    KieModuleModel kmoduleModel = ks.newKieModuleModel();
    kmoduleModel.newKieBaseModel("defaultKBase")
            .addPackage("*")
            .setEventProcessingMode(EventProcessingOption.STREAM)
            .newKieSessionModel("defaultKieSession")
            .setDefault(true)
            .setClockType(ClockTypeOption.get("pseudo"));
    
    kfs.writeKModuleXML(kmoduleModel.toXML());
    
    KieBuilder builder = ks.newKieBuilder(kfs).buildAll();
    assertEquals(0, builder.getResults().getMessages().size());

    this.kieSession = ks.newKieContainer(ks.getRepository()
            .getDefaultReleaseId()).newKieSession();        
}
 
示例11
@Test
public void testJavaSourceFileAndDrlDeploy() {
    final String java = "package org.drools.compiler;\n" +
            "public class JavaSourceMessage { }\n";
    final String drl = "package org.drools.compiler;\n" +
            "import org.drools.compiler.JavaSourceMessage;" +
            "rule R1 when\n" +
            "   $m : JavaSourceMessage()\n" +
            "then\n" +
            "end\n";

    final String kmodule = "<kmodule xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" +
            "         xmlns=\"http://www.drools.org/xsd/kmodule\">\n" +
            "  <kbase name=\"kbase1\">\n" +
            "    <ksession name=\"ksession1\" default=\"true\"/>\n" +
            "  </kbase>\n" +
            "</kmodule>";

    final KieServices ks = KieServices.Factory.get();

    final ReleaseId releaseId1 = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" );
    final Resource javaResource = ResourceFactory.newByteArrayResource( java.getBytes() ).setResourceType( ResourceType.JAVA )
            .setSourcePath( "org/drools/compiler/JavaSourceMessage.java" );
    final Resource drlResource = ResourceFactory.newByteArrayResource( drl.getBytes() ).setResourceType( ResourceType.DRL )
            .setSourcePath( "kbase1/drl1.drl" );
    final KieModule km = createAndDeployJar( ks,
            kmodule,
            releaseId1,
            javaResource, drlResource);

    final KieContainer kieContainer = ks.newKieContainer(km.getReleaseId());
    try {
        final Class<?> messageClass = kieContainer.getClassLoader().loadClass("org.drools.compiler.JavaSourceMessage");
        assertNotNull(messageClass);
    } catch (final ClassNotFoundException e) {
        throw new IllegalStateException("Loading the java class failed.", e);
    }
}
 
示例12
public PackageDescr parse(final boolean isEditor,
                          final Resource resource,
                          final InputStream is) throws DroolsParserException, IOException {
    this.resource = resource;
    String encoding = resource instanceof InternalResource ? ((InternalResource) resource).getEncoding() : null;

    lexer = buildLexer(is, encoding, languageLevel);
    DRLParser parser = buildParser(lexer, languageLevel);
    return compile(isEditor, parser);
}
 
示例13
private IncrementalRuleCodegen(Collection<Resource> resources) {
    this.resources = resources;
    this.kieModuleModel = new KieModuleModelImpl();
    setDefaultsforEmptyKieModule(kieModuleModel);
    this.contextClassLoader = getClass().getClassLoader();
    this.decisionTableSupported = DecisionTableFactory.getDecisionTableProvider() != null;
    this.configs = new HashMap<>();
}
 
示例14
PackageDescr drlToPackageDescr(Resource resource) throws DroolsParserException,
        IOException {
    PackageDescr pkg = KnowledgeBuilderUtil.drlToPackageDescr(resource, results, configuration.getLanguageLevel());
    if (pkg == null) {
        addBuilderResult(new ParserError(resource, "Parser returned a null Package", 0, 0));
    }
    return pkg;
}
 
示例15
private static List<DMNResource> parseDecisions(Path path, List<Resource> resources) throws IOException {
    DMNRuntime dmnRuntime = DMNRuntimeBuilder.fromDefaults()
                                             .setRootClassLoader(null)
                                             .buildConfiguration()
                                             .fromResources(resources)
                                             .getOrElseThrow(e -> new RuntimeException("Error compiling DMN model(s)", e));
    return dmnRuntime.getModels().stream().map( model -> new DMNResource( model, path )).collect( toList() );
}
 
示例16
public DecisionTableConfigurationHandler() {
    if ( (this.validParents == null) && (this.validPeers == null) ) {
        this.validParents = new HashSet( 1 );
        this.validParents.add( Resource.class );

        this.validPeers = new HashSet( 1 );
        this.validPeers.add( null );

        this.allowNesting = false;
    }
}
 
示例17
private StatelessKieSession getStatelessKieSession(Resource dt) {
    KieServices ks = populateKieFileSystem( dt );

    // get the session
    StatelessKieSession ksession = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()).newStatelessKieSession();
    return ksession;
}
 
示例18
@Test
@Timeout(10)
public void testActionNodeIsDroolsAction() throws Exception {
    RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess("org.jbpm.process");
    factory
            .name("ActionNodeActionProcess")
            .version("1")
            .startNode(1)
                .name("Start")
                .done()
            .endNode(3)
                .name("End")
                .done()
            .actionNode(2)
                .name("printTextActionNode")
                .action("java",
                        "System.out.println(\"test print\");",
                        true)
                .done()
            .connection(1, 2)
            .connection(2, 3);
    RuleFlowProcess process = factory.validate().getProcess();

    assertNotNull(process);

    Resource res = ResourceFactory.newByteArrayResource(XmlBPMNProcessDumper.INSTANCE.dump(process).getBytes());
    res.setSourcePath("/tmp/processFactory.bpmn2");
    KieBase kbase = createKnowledgeBaseFromResources(res);
    StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
    ProcessInstance pi = ksession.startProcess("org.jbpm.process");

    assertNotNull(pi);

    assertEquals(ProcessInstance.STATE_COMPLETED,
                 pi.getState());

    ksession.dispose();
}
 
示例19
@Deprecated
void addPackageForExternalType(Resource resource,
                               ResourceType type,
                               ResourceConfiguration configuration) throws Exception {
    KieAssemblers assemblers = ServiceRegistry.getInstance().get(KieAssemblers.class);

    assemblers.addResource(this,
                           resource,
                           type,
                           configuration);
}
 
示例20
public List<RuleImpl> removeRulesGeneratedFromResource(Resource resource) {
    List<RuleImpl> rulesToBeRemoved = getRulesGeneratedFromResource(resource);
    for (RuleImpl rule : rulesToBeRemoved) {
        removeRule(rule);
    }
    return rulesToBeRemoved;
}
 
示例21
public ResourceHandler() {
    if ( (this.validParents == null) && (this.validPeers == null) ) {
        this.validParents = new HashSet(1);
        this.validParents.add( Collection.class );

        this.validPeers = new HashSet(2);
        this.validPeers.add( null );
        this.validPeers.add( Resource.class );

        this.allowNesting = true;
    }
}
 
示例22
@Test
public void testDeclarativeChannelRegistration() {
    final String drl1 = "package org.drools.compiler\n" +
            "rule R1 when\n" +
            "   $m : Message()\n" +
            "then\n" +
            "end\n";

    final String kmodule = "<kmodule xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" +
            "         xmlns=\"http://www.drools.org/xsd/kmodule\">\n" +
            "  <kbase name=\"kbase1\">\n" +
            "    <ksession name=\"ksession1\" default=\"true\">\n" +
            "       <channels>\n" +
            "         <channel name=\"testChannel\" type=\"org.drools.compiler.integrationtests.KieBuilderTest$MockChannel\" />\n" +
            "       </channels>\n" +
            "    </ksession>" +
            "  </kbase>\n" +
            "</kmodule>";

    final KieServices ks = KieServices.Factory.get();

    final ReleaseId releaseId1 = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" );
    final Resource r1 = ResourceFactory.newByteArrayResource( drl1.getBytes() ).setResourceType( ResourceType.DRL ).setSourcePath( "kbase1/drl1.drl" );
    final KieModule km = createAndDeployJar( ks,
                                       kmodule,
                                       releaseId1,
                                       r1);

    KieContainer kieContainer = ks.newKieContainer( km.getReleaseId());
    
    KieSession kieSession = kieContainer.newKieSession();
    assertEquals(1, kieSession.getChannels().size());
    assertTrue(kieSession.getChannels().keySet().contains("testChannel"));
}
 
示例23
public void addPackageFromGuidedScoreCard(final Resource resource) throws DroolsParserException, IOException {
    this.resource = resource;
    final String pmmlString = GuidedScoreCardFactory.getPMMLStringFromInputStream(resource.getInputStream());
    if (pmmlString != null) {
        addPackageFromScoreCard(pmmlString, "guided_scorecard_generated.pmml");
    }
    this.resource = null;
}
 
示例24
public KieModule addKieModule(Resource resource, Resource... dependencies) {
    log.debug("Adding KieModule from resource: " + resource);
    KieModule kModule = getKieModule(resource);
    if (dependencies != null && dependencies.length > 0) {
        for (Resource depRes : dependencies) {
            InternalKieModule depKModule = (InternalKieModule) getKieModule(depRes);
            ((InternalKieModule) kModule).addKieDependency(depKModule);
            log.debug("Adding KieModule dependency from resource: " + resource);
        }
    }

    addKieModule(kModule);
    return kModule;
}
 
示例25
@Override
public void deploy(DeploymentEntity deployment, Map<String, Object> deploymentSettings) {
    LOGGER.debug("Processing deployment {}", deployment.getName());

    KnowledgeBuilder knowledgeBuilder = null;

    DeploymentManager deploymentManager = Context
            .getProcessEngineConfiguration()
            .getDeploymentManager();

    Map<String, ResourceEntity> resources = deployment.getResources();
    for (String resourceName : resources.keySet()) {
        LOGGER.info("Processing resource {}", resourceName);
        if (resourceName.endsWith(".drl")) { // is only parsing .drls sufficient? what about other rule dsl's? (@see ResourceType)
            if (knowledgeBuilder == null) {
                knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
            }
            ResourceEntity resourceEntity = resources.get(resourceName);
            byte[] resourceBytes = resourceEntity.getBytes();
            Resource droolsResource = ResourceFactory.newByteArrayResource(resourceBytes);
            knowledgeBuilder.add(droolsResource, ResourceType.DRL);
        }
    }

    if (knowledgeBuilder != null) {
        KieBase knowledgeBase = knowledgeBuilder.newKieBase();
        deploymentManager.getKnowledgeBaseCache().add(deployment.getId(), knowledgeBase);
    }
}
 
示例26
private ChangeSet parseChangeSet(Resource resource) throws IOException, SAXException {
    XmlChangeSetReader reader = new XmlChangeSetReader(this.configuration.getSemanticModules());
    if (resource instanceof ClassPathResource) {
        reader.setClassLoader(((ClassPathResource) resource).getClassLoader(),
                              ((ClassPathResource) resource).getClazz());
    } else {
        reader.setClassLoader(this.configuration.getClassLoader(),
                              null);
    }

    try (Reader resourceReader = resource.getReader()) {
        return reader.read(resourceReader);
    }
}
 
示例27
public KieFileSystem write(Resource resource) {
    try {
        String target = resource.getTargetPath() != null ? resource.getTargetPath() : resource.getSourcePath();
        if( target != null ) {
            String prefix = resource.getResourceType() == ResourceType.JAVA ? JAVA_ROOT : RESOURCES_ROOT;
            int prefixPos = target.indexOf( prefix );
            String path = prefixPos >= 0 ? target.substring( prefixPos ) : prefix + target;
            if (resource.getResourceType() == ResourceType.XSD) {
                write( path, (( InternalResource ) resource).getBytes() );
            } else {
                write( path, resource );
            }
            ResourceConfiguration conf = resource.getConfiguration();
            if( conf != null ) {
                Properties prop = ResourceTypeImpl.toProperties(conf);
                ByteArrayOutputStream buff = new ByteArrayOutputStream();
                prop.store( buff, "Configuration properties for resource: " + target );
                write( path + ".properties", buff.toByteArray() );
            }
            return this;
        } else {
            throw new RuntimeException( "Resource does not have neither a source nor a target path. Impossible to add it to the bundle. Please set either the source or target name of the resource before adding it." + resource.toString());
        }
    } catch (IOException e) {
        throw new UncheckedIOException("Unable to write Resource: " + resource.toString(), e);
    }
}
 
示例28
@Test
public void testProcessFactory() throws Exception {
    RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess("org.jbpm.process");
    factory
            // header
            .name("My process")
            .packageName("org.jbpm")
            // nodes
            .startNode(1)
                .name("Start")
                .done()
            .actionNode(2)
                .name("Action")
                .action("java",
                        "System.out.println(\"Action\");")
                .done()
            .endNode(3)
                .name("End")
                .done()
            // connections
            .connection(1, 2)
            .connection(2, 3);
    RuleFlowProcess process = factory.validate().getProcess();
    Resource res = ResourceFactory.newByteArrayResource(XmlBPMNProcessDumper.INSTANCE.dump(process).getBytes());
    res.setSourcePath("/tmp/processFactory.bpmn2"); // source path or target path must be set to be added into kbase
    KieBase kbase = createKnowledgeBaseFromResources(res);
    StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
    ksession.startProcess("org.jbpm.process");
    ksession.dispose();
}
 
示例29
public ProcessValidator getValidator(Process process, Resource resource) {
    if (!additionalValidators.isEmpty()) {
        for (ProcessValidator validator : additionalValidators) {
            boolean accepted = validator.accept(process, resource);
            if (accepted) {
                return validator;
            }
        }
    }
    
    return defaultValidators.get(process.getType());
}
 
示例30
private static Process parseWorkflowFile(Resource r, String parser) {
    try {
        ServerlessWorkflowParser workflowParser = new ServerlessWorkflowParser(parser);
        return workflowParser.parseWorkFlow(r.getReader());
    } catch (IOException e) {
        throw new ProcessParsingException("Could not parse file " + r.getSourcePath(), e);
    }
}