public PolicyWorkerFactory(Codec codec, DataStore dataStore, PolicyWorkerConfiguration config) {
this.codec = codec;
this.dataStore = dataStore;
this.resultQueue = config.getResultQueue();
this.workerIdentifier = config.getWorkerIdentifier();
this.workerThreads = config.getWorkerThreads();
this.configuration = config;
applicationContext = new CorePolicyApplicationContext();
createBeanDefinition(WorkerResponseHolder.class, "WorkerResponseHolder", "thread");
createBeanDefinition(WorkerRequestHolder.class, "WorkerRequestHolder", "thread");
applicationContext.refresh();
taskDataConverter = new TaskDataConverter();
apiProvider = new ApiProvider(applicationContext);
EngineProperties engineProperties = applicationContext.getBean(EngineProperties.class);
Period period = new Period(engineProperties.getEnvironmentCacheVerifyPeriod());
workflowCache = CacheBuilder.newBuilder().expireAfterWrite(period.toStandardDuration().getMillis(), TimeUnit.MILLISECONDS)
.build(new CacheLoader<Long, SequenceWorkflow>()
{
@Override
public SequenceWorkflow load(Long key) throws Exception
{
logger.warn("Loading workflow from database, id: {}", key);
return getWorkflow(key, apiProvider.getWorkflowApi());
}
});
if (config.getRegisterHandlers()) {
new PolicyHandlerSetup(applicationContext).checkBasePolicies();
}
}