/** Add a rule flow to this package. */ public void addProcess(Process process) { if (this.ruleFlows == Collections.EMPTY_MAP) { this.ruleFlows = new HashMap<String, Process>(); } this.ruleFlows.put(process.getId(), process); }
private void removeProcess(Process process) { ruleFlows.remove(process.getId()); }
@Override public void deploy(DeploymentUnit unit) { try { super.deploy(unit); if (!(unit instanceof KModuleDeploymentUnit)) { throw new IllegalArgumentException( "Invalid deployment unit provided - " + unit.getClass().getName()); } KModuleDeploymentUnit kmoduleUnit = (KModuleDeploymentUnit) unit; DeployedUnitImpl deployedUnit = new DeployedUnitImpl(unit); // Create the release id KieContainer kieContainer = kmoduleUnit.getKieContainer(); ReleaseId releaseId = null; if (kieContainer == null) { KieServices ks = KieServices.Factory.get(); releaseId = ks.newReleaseId( kmoduleUnit.getGroupId(), kmoduleUnit.getArtifactId(), kmoduleUnit.getVersion()); MavenRepository repository = getMavenRepository(); repository.resolveArtifact(releaseId.toExternalForm()); kieContainer = ks.newKieContainer(releaseId); kmoduleUnit.setKieContainer(kieContainer); } releaseId = kieContainer.getReleaseId(); // retrieve the kbase name String kbaseName = kmoduleUnit.getKbaseName(); if (StringUtils.isEmpty(kbaseName)) { KieBaseModel defaultKBaseModel = ((KieContainerImpl) kieContainer).getKieProject().getDefaultKieBaseModel(); if (defaultKBaseModel != null) { kbaseName = defaultKBaseModel.getName(); } else { kbaseName = DEFAULT_KBASE_NAME; } } InternalKieModule module = (InternalKieModule) ((KieContainerImpl) kieContainer).getKieModuleForKBase(kbaseName); if (module == null) { throw new IllegalStateException( "Cannot find kbase, either it does not exist or there are multiple default kbases in kmodule.xml"); } KieBase kbase = kieContainer.getKieBase(kbaseName); Map<String, ProcessDescriptor> processDescriptors = new HashMap<String, ProcessDescriptor>(); for (org.kie.api.definition.process.Process process : kbase.getProcesses()) { processDescriptors.put( process.getId(), (ProcessDescriptor) process.getMetaData().get("ProcessDescriptor")); } // TODO: add forms data? Collection<String> files = module.getFileNames(); processResources( module, files, kieContainer, kmoduleUnit, deployedUnit, releaseId, processDescriptors); // process the files in the deployment if (module.getKieDependencies() != null) { Collection<InternalKieModule> dependencies = module.getKieDependencies().values(); for (InternalKieModule depModule : dependencies) { logger.debug("Processing dependency module " + depModule.getReleaseId()); files = depModule.getFileNames(); processResources( depModule, files, kieContainer, kmoduleUnit, deployedUnit, depModule.getReleaseId(), processDescriptors); } } Collection<ReleaseId> dependencies = module.getJarDependencies(new DependencyFilter.ExcludeScopeFilter("test", "provided")); // process deployment dependencies if (dependencies != null && !dependencies.isEmpty()) { // Classes 2: classes added from project and dependencies added processClassloader(kieContainer, deployedUnit); } AuditEventBuilder auditLoggerBuilder = setupAuditLogger(identityProvider, unit.getIdentifier()); RuntimeEnvironmentBuilder builder = boostrapRuntimeEnvironmentBuilder( kmoduleUnit, deployedUnit, kieContainer, kmoduleUnit.getMergeMode()) .knowledgeBase(kbase) .classLoader(kieContainer.getClassLoader()); builder.registerableItemsFactory( getRegisterableItemsFactory(auditLoggerBuilder, kieContainer, kmoduleUnit)); commonDeploy(unit, deployedUnit, builder.get(), kieContainer); kmoduleUnit.setDeployed(true); } catch (Throwable e) { logger.warn("Unexpected error while deploying unit {}", unit.getIdentifier(), e); // catch all possible errors to be able to report them to caller as RuntimeException throw new RuntimeException(e); } }