public StatelessKieSession newStatelessKieSession( String kSessionName, KieSessionConfiguration conf) { KieSessionModelImpl kSessionModel = (KieSessionModelImpl) kProject.getKieSessionModel(kSessionName); if (kSessionModel == null) { log.error("Unknown KieSession name: " + kSessionName); return null; } if (kSessionModel.getType() == KieSessionModel.KieSessionType.STATEFUL) { throw new RuntimeException( "Trying to create a stateless KieSession from a stateful KieSessionModel: " + kSessionName); } KieBase kBase = getKieBase(kSessionModel.getKieBaseModel().getName()); if (kBase == null) { log.error("Unknown KieBase name: " + kSessionModel.getKieBaseModel().getName()); return null; } StatelessKieSession statelessKieSession = kBase.newStatelessKieSession( conf != null ? conf : getKnowledgeSessionConfiguration(kSessionModel)); wireListnersAndWIHs(kSessionModel, statelessKieSession); registerLoggers(kSessionModel, statelessKieSession); statelessKSessions.put(kSessionName, statelessKieSession); return statelessKieSession; }
public KieSessionModel getKieSessionModel(String kSessionName) { return kProject.getKieSessionModel(kSessionName); }
private Results update(final InternalKieModule currentKM, final ReleaseId newReleaseId) { final InternalKieModule newKM = (InternalKieModule) kr.getKieModule(newReleaseId); ChangeSetBuilder csb = new ChangeSetBuilder(); final KieJarChangeSet cs = csb.build(currentKM, newKM); final List<String> modifiedClasses = getModifiedClasses(cs); final List<String> dslFiles = getUnchangedDslFiles(newKM, cs); ((KieModuleKieProject) kProject).updateToModule(newKM); final ResultsImpl results = new ResultsImpl(); List<String> kbasesToRemove = new ArrayList<String>(); for (Entry<String, KieBase> kBaseEntry : kBases.entrySet()) { String kbaseName = kBaseEntry.getKey(); final KieBaseModel kieBaseModel = kProject.getKieBaseModel(kbaseName); // if a kbase no longer exists, just remove it from the cache if (kieBaseModel == null) { // have to save for later removal to avoid iteration errors kbasesToRemove.add(kbaseName); } else { final InternalKnowledgeBase kBase = (InternalKnowledgeBase) kBaseEntry.getValue(); boolean locked = kBase.tryLock(); if (locked) { try { updateKBase( kBase, currentKM, newReleaseId, newKM, cs, modifiedClasses, dslFiles, results, kieBaseModel); } finally { kBase.unlock(); } } else { kBase.enqueueModification( new Runnable() { @Override public void run() { updateKBase( kBase, currentKM, newReleaseId, newKM, cs, modifiedClasses, dslFiles, results, kieBaseModel); } }); } } } for (String kbaseToRemove : kbasesToRemove) { kBases.remove(kbaseToRemove); } for (Iterator<Entry<String, KieSession>> it = this.kSessions.entrySet().iterator(); it.hasNext(); ) { Entry<String, KieSession> ksession = it.next(); if (kProject.getKieSessionModel(ksession.getKey()) == null) { // remove sessions that no longer exist it.remove(); } } for (Iterator<Entry<String, StatelessKieSession>> it = this.statelessKSessions.entrySet().iterator(); it.hasNext(); ) { Entry<String, StatelessKieSession> ksession = it.next(); if (kProject.getKieSessionModel(ksession.getKey()) == null) { // remove sessions that no longer exist it.remove(); } } return results; }