/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * *************************************************************************************** */ package com.espertech.esper.core.service; import com.espertech.esper.client.ConfigurationInformation; import com.espertech.esper.core.context.factory.StatementAgentInstanceFactory; import com.espertech.esper.core.context.mgr.ContextControllerFactoryService; import com.espertech.esper.core.context.mgr.ContextManagementService; import com.espertech.esper.core.context.stmt.StatementAIResourceRegistry; import com.espertech.esper.core.context.util.ContextDescriptor; import com.espertech.esper.epl.agg.service.AggregationServiceFactoryService; import com.espertech.esper.epl.core.EngineImportService; import com.espertech.esper.epl.core.EngineSettingsService; import com.espertech.esper.epl.declexpr.ExprDeclaredService; import com.espertech.esper.epl.expression.time.TimeAbacus; import com.espertech.esper.epl.lookup.EventTableIndexService; import com.espertech.esper.epl.metric.MetricReportingServiceSPI; import com.espertech.esper.epl.named.NamedWindowMgmtService; import com.espertech.esper.epl.script.AgentInstanceScriptContext; import com.espertech.esper.epl.spec.StatementSpecCompiled; import com.espertech.esper.epl.table.mgmt.TableExprEvaluatorContext; import com.espertech.esper.epl.table.mgmt.TableService; import com.espertech.esper.epl.variable.VariableService; import com.espertech.esper.event.EventAdapterService; import com.espertech.esper.event.vaevent.ValueAddEventService; import com.espertech.esper.filter.FilterBooleanExpressionFactory; import com.espertech.esper.filter.FilterFaultHandlerFactory; import com.espertech.esper.filter.FilterService; import com.espertech.esper.pattern.PatternContextFactory; import com.espertech.esper.pattern.PatternNodeFactory; import com.espertech.esper.pattern.PatternObjectResolutionService; import com.espertech.esper.pattern.pool.PatternSubexpressionPoolStmtSvc; import com.espertech.esper.rowregex.MatchRecognizeStatePoolStmtSvc; import com.espertech.esper.rowregex.RegexHandlerFactory; import com.espertech.esper.schedule.ScheduleAdjustmentService; import com.espertech.esper.schedule.ScheduleBucket; import com.espertech.esper.schedule.SchedulingService; import com.espertech.esper.schedule.TimeProvider; import com.espertech.esper.timer.TimeSourceService; import com.espertech.esper.view.StatementStopService; import com.espertech.esper.view.ViewResolutionService; import com.espertech.esper.view.ViewService; import com.espertech.esper.view.ViewServicePreviousFactory; import java.lang.annotation.Annotation; import java.net.URI; /** * Contains handles to the implementation of the the scheduling service for use in view evaluation. */ public final class StatementContext { private final StatementContextEngineServices stmtEngineServices; private SchedulingService schedulingService; private final ScheduleBucket scheduleBucket; private final EPStatementHandle epStatementHandle; private final ViewResolutionService viewResolutionService; private final PatternObjectResolutionService patternResolutionService; private final StatementExtensionSvcContext statementExtensionSvcContext; private final StatementStopService statementStopService; private final PatternContextFactory patternContextFactory; private FilterService filterService; private InternalEventRouteDest internalEventEngineRouteDest; private final StatementResultService statementResultService; private final ScheduleAdjustmentService scheduleAdjustmentService; private final Annotation[] annotations; private final StatementAIResourceRegistry statementAgentInstanceRegistry; private final ContextDescriptor contextDescriptor; private final PatternSubexpressionPoolStmtSvc patternSubexpressionPoolSvc; private final MatchRecognizeStatePoolStmtSvc matchRecognizeStatePoolStmtSvc; private final boolean statelessSelect; private final ContextControllerFactoryService contextControllerFactoryService; private final AggregationServiceFactoryService aggregationServiceFactoryService; private final boolean writesToTables; private final Object statementUserObject; private final StatementSemiAnonymousTypeRegistry statementSemiAnonymousTypeRegistry; private final int priority; // settable for view-sharing private StatementAgentInstanceLock defaultAgentInstanceLock; private AgentInstanceScriptContext defaultAgentInstanceScriptContext; private StatementSpecCompiled statementSpecCompiled; private StatementAgentInstanceFactory statementAgentInstanceFactory; private EPStatementSPI statement; private FilterFaultHandlerFactory filterFaultHandlerFactory; public StatementContext(StatementContextEngineServices stmtEngineServices, SchedulingService schedulingService, ScheduleBucket scheduleBucket, EPStatementHandle epStatementHandle, ViewResolutionService viewResultionService, PatternObjectResolutionService patternResolutionService, StatementExtensionSvcContext statementExtensionSvcContext, StatementStopService statementStopService, PatternContextFactory patternContextFactory, FilterService filterService, StatementResultService statementResultService, InternalEventRouteDest internalEventEngineRouteDest, Annotation[] annotations, StatementAIResourceRegistry statementAgentInstanceRegistry, StatementAgentInstanceLock defaultAgentInstanceLock, ContextDescriptor contextDescriptor, PatternSubexpressionPoolStmtSvc patternSubexpressionPoolSvc, MatchRecognizeStatePoolStmtSvc matchRecognizeStatePoolStmtSvc, boolean statelessSelect, ContextControllerFactoryService contextControllerFactoryService, AgentInstanceScriptContext defaultAgentInstanceScriptContext, AggregationServiceFactoryService aggregationServiceFactoryService, boolean writesToTables, Object statementUserObject, StatementSemiAnonymousTypeRegistry statementSemiAnonymousTypeRegistry, int priority) { this.stmtEngineServices = stmtEngineServices; this.schedulingService = schedulingService; this.scheduleBucket = scheduleBucket; this.epStatementHandle = epStatementHandle; this.viewResolutionService = viewResultionService; this.patternResolutionService = patternResolutionService; this.statementExtensionSvcContext = statementExtensionSvcContext; this.statementStopService = statementStopService; this.patternContextFactory = patternContextFactory; this.filterService = filterService; this.statementResultService = statementResultService; this.internalEventEngineRouteDest = internalEventEngineRouteDest; this.scheduleAdjustmentService = stmtEngineServices.getConfigSnapshot().getEngineDefaults().getExecution().isAllowIsolatedService() ? new ScheduleAdjustmentService() : null; this.annotations = annotations; this.statementAgentInstanceRegistry = statementAgentInstanceRegistry; this.defaultAgentInstanceLock = defaultAgentInstanceLock; this.contextDescriptor = contextDescriptor; this.patternSubexpressionPoolSvc = patternSubexpressionPoolSvc; this.matchRecognizeStatePoolStmtSvc = matchRecognizeStatePoolStmtSvc; this.statelessSelect = statelessSelect; this.contextControllerFactoryService = contextControllerFactoryService; this.defaultAgentInstanceScriptContext = defaultAgentInstanceScriptContext; this.aggregationServiceFactoryService = aggregationServiceFactoryService; this.writesToTables = writesToTables; this.statementUserObject = statementUserObject; this.statementSemiAnonymousTypeRegistry = statementSemiAnonymousTypeRegistry; this.priority = priority; } public StatementType getStatementType() { return epStatementHandle.getStatementType(); } /** * Returns the statement id. * * @return statement id */ public int getStatementId() { return epStatementHandle.getStatementId(); } /** * Returns the statement name * * @return statement name */ public String getStatementName() { return epStatementHandle.getStatementName(); } /** * Returns service to use for schedule evaluation. * * @return schedule evaluation service implemetation */ public final SchedulingService getSchedulingService() { return schedulingService; } /** * Returns service for generating events and handling event types. * * @return event adapter service */ public EventAdapterService getEventAdapterService() { return stmtEngineServices.getEventAdapterService(); } /** * Returns the schedule bucket for ordering schedule callbacks within this pattern. * * @return schedule bucket */ public ScheduleBucket getScheduleBucket() { return scheduleBucket; } /** * Returns the statement's resource locks. * * @return statement resource lock/handle */ public EPStatementHandle getEpStatementHandle() { return epStatementHandle; } /** * Returns view resolution svc. * * @return view resolution */ public ViewResolutionService getViewResolutionService() { return viewResolutionService; } /** * Returns extension context for statements. * * @return context */ public StatementExtensionSvcContext getStatementExtensionServicesContext() { return statementExtensionSvcContext; } /** * Returns statement stop subscription taker. * * @return stop service */ public StatementStopService getStatementStopService() { return statementStopService; } /** * Returns the pattern context factory for the statement. * * @return pattern context factory */ public PatternContextFactory getPatternContextFactory() { return patternContextFactory; } /** * Returns the statement expression text * * @return expression text */ public String getExpression() { return epStatementHandle.getEPL(); } /** * Returns the engine URI. * * @return engine URI */ public String getEngineURI() { return stmtEngineServices.getEngineURI(); } /** * Returns the filter service. * * @return filter service */ public FilterService getFilterService() { return filterService; } /** * Returns the statement's resolution service for pattern objects. * * @return service for resolving pattern objects */ public PatternObjectResolutionService getPatternResolutionService() { return patternResolutionService; } /** * Returns the named window management service. * * @return service for managing named windows */ public NamedWindowMgmtService getNamedWindowMgmtService() { return stmtEngineServices.getNamedWindowMgmtService(); } /** * Returns variable service. * * @return variable service */ public VariableService getVariableService() { return stmtEngineServices.getVariableService(); } /** * Returns table service. * * @return table service */ public TableService getTableService() { return stmtEngineServices.getTableService(); } /** * Returns the service that handles awareness of listeners/subscriptions for a statement customizing output produced * * @return statement result svc */ public StatementResultService getStatementResultService() { return statementResultService; } /** * Returns the URIs for resolving the event name against plug-inn event representations, if any * * @return URIs */ public URI[] getPlugInTypeResolutionURIs() { return stmtEngineServices.getPlugInTypeResolutionURIs(); } /** * Returns the update event service. * * @return revision service */ public ValueAddEventService getValueAddEventService() { return stmtEngineServices.getValueAddEventService(); } /** * Returns the configuration. * * @return configuration */ public ConfigurationInformation getConfigSnapshot() { return stmtEngineServices.getConfigSnapshot(); } /** * Sets the scheduling service * * @param schedulingService service */ public void setSchedulingService(SchedulingService schedulingService) { this.schedulingService = schedulingService; } /** * Sets the filter service * * @param filterService filter service */ public void setFilterService(FilterService filterService) { this.filterService = filterService; } /** * Returns the internal event router. * * @return router */ public InternalEventRouteDest getInternalEventEngineRouteDest() { return internalEventEngineRouteDest; } /** * Sets the internal event router. * * @param internalEventEngineRouteDest router */ public void setInternalEventEngineRouteDest(InternalEventRouteDest internalEventEngineRouteDest) { this.internalEventEngineRouteDest = internalEventEngineRouteDest; } /** * Return the service for adjusting schedules. * * @return service for adjusting schedules, or null if not applicable */ public ScheduleAdjustmentService getScheduleAdjustmentService() { return scheduleAdjustmentService; } /** * Returns metrics svc. * * @return metrics */ public MetricReportingServiceSPI getMetricReportingService() { return stmtEngineServices.getMetricReportingService(); } /** * Returns the time provider. * * @return time provider */ public TimeProvider getTimeProvider() { return schedulingService; } /** * Returns view svc. * * @return svc */ public ViewService getViewService() { return stmtEngineServices.getViewService(); } public ExceptionHandlingService getExceptionHandlingService() { return stmtEngineServices.getExceptionHandlingService(); } public TableExprEvaluatorContext getTableExprEvaluatorContext() { return stmtEngineServices.getTableExprEvaluatorContext(); } public ContextManagementService getContextManagementService() { return stmtEngineServices.getContextManagementService(); } public Annotation[] getAnnotations() { return annotations; } public ExpressionResultCacheService getExpressionResultCacheServiceSharable() { return stmtEngineServices.getExpressionResultCacheService(); } public String toString() { return " stmtId=" + epStatementHandle.getStatementId() + " stmtName=" + epStatementHandle.getStatementName(); } public int getAgentInstanceId() { throw new RuntimeException("Statement agent instance information is not available when providing a context"); } public StatementAIResourceRegistry getStatementAgentInstanceRegistry() { return statementAgentInstanceRegistry; } public StatementAgentInstanceLock getDefaultAgentInstanceLock() { return defaultAgentInstanceLock; } public ContextDescriptor getContextDescriptor() { return contextDescriptor; } public void setDefaultAgentInstanceLock(StatementAgentInstanceLock defaultAgentInstanceLock) { this.defaultAgentInstanceLock = defaultAgentInstanceLock; } public PatternSubexpressionPoolStmtSvc getPatternSubexpressionPoolSvc() { return patternSubexpressionPoolSvc; } public MatchRecognizeStatePoolStmtSvc getMatchRecognizeStatePoolStmtSvc() { return matchRecognizeStatePoolStmtSvc; } public boolean isStatelessSelect() { return statelessSelect; } public ContextControllerFactoryService getContextControllerFactoryService() { return contextControllerFactoryService; } public AgentInstanceScriptContext getDefaultAgentInstanceScriptContext() { return defaultAgentInstanceScriptContext; } public AggregationServiceFactoryService getAggregationServiceFactoryService() { return aggregationServiceFactoryService; } public StatementEventTypeRef getStatementEventTypeRef() { return stmtEngineServices.getStatementEventTypeRef(); } public String getContextName() { return contextDescriptor == null ? null : contextDescriptor.getContextName(); } public boolean isWritesToTables() { return writesToTables; } public Object getStatementUserObject() { return statementUserObject; } public EngineLevelExtensionServicesContext getEngineExtensionServicesContext() { return stmtEngineServices.getEngineLevelExtensionServicesContext(); } public RegexHandlerFactory getRegexPartitionStateRepoFactory() { return stmtEngineServices.getRegexHandlerFactory(); } public ViewServicePreviousFactory getViewServicePreviousFactory() { return stmtEngineServices.getViewServicePreviousFactory(); } public PatternNodeFactory getPatternNodeFactory() { return stmtEngineServices.getPatternNodeFactory(); } public EventTableIndexService getEventTableIndexService() { return stmtEngineServices.getEventTableIndexService(); } public StatementLockFactory getStatementLockFactory() { return stmtEngineServices.getStatementLockFactory(); } public void setStatementSpecCompiled(StatementSpecCompiled statementSpecCompiled) { this.statementSpecCompiled = statementSpecCompiled; } public StatementSpecCompiled getStatementSpecCompiled() { return statementSpecCompiled; } public void setStatementAgentInstanceFactory(StatementAgentInstanceFactory statementAgentInstanceFactory) { this.statementAgentInstanceFactory = statementAgentInstanceFactory; } public StatementAgentInstanceFactory getStatementAgentInstanceFactory() { return statementAgentInstanceFactory; } public EPStatementSPI getStatement() { return statement; } public void setStatement(EPStatementSPI statement) { this.statement = statement; } public StatementSemiAnonymousTypeRegistry getStatementSemiAnonymousTypeRegistry() { return statementSemiAnonymousTypeRegistry; } public FilterBooleanExpressionFactory getFilterBooleanExpressionFactory() { return stmtEngineServices.getFilterBooleanExpressionFactory(); } public EngineSettingsService getEngineSettingsService() { return stmtEngineServices.getEngineSettingsService(); } public ExprDeclaredService getExprDeclaredService() { return stmtEngineServices.getExprDeclaredService(); } public int getPriority() { return priority; } public FilterFaultHandlerFactory getFilterFaultHandlerFactory() { return filterFaultHandlerFactory; } public void setFilterFaultHandlerFactory(FilterFaultHandlerFactory filterFaultHandlerFactory) { this.filterFaultHandlerFactory = filterFaultHandlerFactory; } public TimeSourceService getTimeSourceService() { return stmtEngineServices.getTimeSourceService(); } public EngineImportService getEngineImportService() { return stmtEngineServices.getEngineImportService(); } public TimeAbacus getTimeAbacus() { return stmtEngineServices.getEngineImportService().getTimeAbacus(); } public AgentInstanceScriptContext getAllocateAgentInstanceScriptContext() { if (defaultAgentInstanceScriptContext == null) { defaultAgentInstanceScriptContext = AgentInstanceScriptContext.from(getEventAdapterService()); } return defaultAgentInstanceScriptContext; } }