Session 如何决定在哪里举行会议
我们正在使用JPAKKnowledgeService进行持久化drools会话。 我们根据drools用户手册中的指南进行配置和实现,如下所示:Session 如何决定在哪里举行会议,session,drools,Session,Drools,我们正在使用JPAKKnowledgeService进行持久化drools会话。 我们根据drools用户手册中的指南进行配置和实现,如下所示: KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); loadDRL(kbase); // method to load the DRL rules to kbase Environment env = KnowledgeBaseF
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
loadDRL(kbase); // method to load the DRL rules to kbase
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, Persistence.createEntityManagerFactory( "org.drools.persistence.jpa"));
env.set( EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager());
StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
ksession.insert(new Event());
ksession.fireAllRules();
ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(ksession.getId(), kbase, null, env);
ksession.insert(new Event());
ksession.fireAllRules();
ksession.dispose();
第一次使用有状态会话时,我们需要新建它jpakknowledgeservice.newStatefulKnowledgeSession(kbase,null,env)
。
第二次或第三次在同一线程中使用同一会话时,我们可以从DBjpakknowledgeservice.loadStatefulKnowledgeSession(ksession.getId(),kbase,null,env)重新加载会话,或者只在工作内存中使用会话
但即使在同一个地方,在并发环境中,我们如何确定是需要从DB加载会话,还是只在工作内存中使用会话?它是否会自动检测工作内存中是否有会话,如果没有,将从DB加载
另外,在spring配置环境中,我们无法控制是新建会话还是从DB加载会话,还是只在工作内存中使用会话,它的执行情况如何?使用spring,我建议创建一个充当会话工厂的@服务。这样,您就得到了该服务的一个实例,它可以保存会话ID到会话的映射。如果会话不在映射中,则从DB加载它。然后。。。如果每个用户会话有一个知识会话,那么您也可以使用会话范围bean,它在启动时从DB加载。@Steve您可以共享会话范围bean的链接/代码吗?我发布了另一个问题。在我的测试期间,我不能让它在启动时从DB重新加载。我遗漏了什么吗?你用@Scope(“session”)
注释了@Service
@Autowire
将其插入一个@Controller
中,每个用户都将有自己的个人服务实例与其HTTP会话相关联。