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 }