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);
}
}