如何决定在哪里获得会话

时间:2014-02-14 10:39:15

标签: session drools

我们正在继续使用JPAKnowledgeService持续进行drools会话。 我们按照drools用户手册中的指南配置和实现如下:

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

我们第一次使用有状态会话时,我们需要新建它JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env)。 第二次或第三次我们在同一个线程中使用相同的会话时,我们可以从DB JPAKnowledgeService.loadStatefulKnowledgeSession(ksession.getId(), kbase, null, env)重新加载会话,或者只在工作内存中使用会话。

但即使是在同一个地方,在并发环境中,我们如何确定是否需要从DB加载会话或仅使用工作内存中的会话?是否会自动检测工作内存中是否有会话,如果没有,将从DB加载?

另外在spring配置环境中,我们无法控制是否新建会话或从DB加载会话或只是在工作内存中使用会话,它是如何执行的?

0 个答案:

没有答案