001 package com.hammurapi.review; 002 003 import java.util.logging.Logger; 004 005 import org.apache.commons.pool.impl.StackKeyedObjectPool; 006 007 import com.hammurapi.config.bootstrap.ConfigurationException; 008 import com.hammurapi.config.runtime.FactoryConfig; 009 import com.hammurapi.flow.Flow; 010 import com.hammurapi.reasoning.ForwardReasoningSessionFactory; 011 import com.hammurapi.reasoning.ReasoningException; 012 import com.hammurapi.reasoning.impl.ForwardReasoningSessionFactoryImpl; 013 import com.hammurapi.reasoning.impl.PoolingForwardReasoningSessionFactory; 014 import com.hammurapi.review.util.InspectorSetCompiler; 015 import com.hammurapi.util.SingletonChainingContext; 016 017 public class SessionPoolingReviewDriver extends ReviewDriverBase { 018 019 private static final Logger logger = Logger.getLogger(SessionPoolingReviewDriver.class.getName()); 020 021 private int sessionPoolSize; 022 023 public SessionPoolingReviewDriver(int sessionPoolSize) { 024 this.sessionPoolSize = sessionPoolSize; 025 } 026 027 @Override 028 protected ForwardReasoningSessionFactory<Object> createInspectorSetSessionFactory(InspectorSet inspectorSet, FactoryConfig moduleFactoryConfig) throws ConfigurationException, ReasoningException { 029 logger.fine("Creating a pooling session factory of size "+sessionPoolSize+" for inspector set "+inspectorSet.getName()); 030 StackKeyedObjectPool pool = new StackKeyedObjectPool(sessionPoolSize); 031 InspectorSetCompiler inspectorSetCompiler = new InspectorSetCompiler(); 032 Flow compiledInspectorSet = inspectorSetCompiler.compile(inspectorSet, moduleFactoryConfig); 033 FactoryConfig inspectorSetConfig; 034 try { 035 inspectorSetConfig = (FactoryConfig) moduleFactoryConfig.clone(); 036 } catch (CloneNotSupportedException e) { 037 throw new ConfigurationException(e); 038 } 039 inspectorSetConfig.setContext(new SingletonChainingContext<InspectorSet>(InspectorSet.class, inspectorSet, moduleFactoryConfig.getContext())); 040 ForwardReasoningSessionFactory<Object> master = new ForwardReasoningSessionFactoryImpl<Object>(compiledInspectorSet, inspectorSetConfig); 041 return new PoolingForwardReasoningSessionFactory<Object>(master, pool); 042 } 043 }