Package org.frankframework.core
Class Adapter
java.lang.Object
org.springframework.core.io.DefaultResourceLoader
org.springframework.context.support.AbstractApplicationContext
org.springframework.context.support.GenericApplicationContext
org.frankframework.core.Adapter
- All Implemented Interfaces:
Closeable
,AutoCloseable
,FrankElement
,HasApplicationContext
,HasName
,IConfigurable
,IScopeProvider
,ManagableLifecycle
,NameAware
,ConfigurableLifecycle
,org.springframework.beans.factory.Aware
,org.springframework.beans.factory.BeanFactory
,org.springframework.beans.factory.HierarchicalBeanFactory
,org.springframework.beans.factory.InitializingBean
,org.springframework.beans.factory.ListableBeanFactory
,org.springframework.beans.factory.NamedBean
,org.springframework.beans.factory.support.BeanDefinitionRegistry
,org.springframework.context.ApplicationContext
,org.springframework.context.ApplicationContextAware
,org.springframework.context.ApplicationEventPublisher
,org.springframework.context.ConfigurableApplicationContext
,org.springframework.context.Lifecycle
,org.springframework.context.MessageSource
,org.springframework.context.Phased
,org.springframework.context.SmartLifecycle
,org.springframework.core.AliasRegistry
,org.springframework.core.env.EnvironmentCapable
,org.springframework.core.io.ResourceLoader
,org.springframework.core.io.support.ResourcePatternResolver
@Category(BASIC)
@FrankDocGroup(OTHER)
public class Adapter
extends org.springframework.context.support.GenericApplicationContext
implements ManagableLifecycle, FrankElement, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.NamedBean, NameAware
The Adapter is the central manager in the framework. It has knowledge of both
An Adapter receives a specific type of messages and processes them. It has
If an adapter can receive its messages through multiple channels (e.g. RESTful HTTP requests, incoming files, etc), each channel appears as a separate
Adapters gather statistics about the messages they process.
Adapters can process messages in parallel. They are thread-safe.
Receiver
s as well as the PipeLine
and statistics.
The Adapter is the class that is responsible for configuring, initializing and
accessing/activating Receivers, Pipelines, statistics etc.
An Adapter receives a specific type of messages and processes them. It has
Receivers
that receive the messages and a PipeLine
that transforms the incoming messages. Each adapter is part of a Configuration
.
If an adapter can receive its messages through multiple channels (e.g. RESTful HTTP requests, incoming files, etc), each channel appears as a separate
Receiver
nested in the adapter. Each Receiver
is also responsible
for dealing with
the result of its received messages; the result is the output of the PipeLine
. The result
consists of the transformed message and a state. The Frank!Framework distinguishes between exit states
SUCCESS and ERROR. There is also a state REJECTED for messages that are not accepted by the Frank!Framework
and that are not processed by the PipeLine
. If the exit state is ERROR, the result message may
not be usable by the calling system. This can be fixed by adding an
errorMessageFormatter that formats the result message if the state is ERROR.
Adapters gather statistics about the messages they process.
Adapters can process messages in parallel. They are thread-safe.
- Author:
- Niels Meijer
-
Nested Class Summary
Nested classes/interfaces inherited from class org.springframework.core.io.DefaultResourceLoader
org.springframework.core.io.DefaultResourceLoader.ClassPathContextResource
-
Field Summary
Modifier and TypeFieldDescriptionprotected org.apache.logging.log4j.Logger
static final String
static final String
Fields inherited from class org.springframework.context.support.AbstractApplicationContext
APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME
Fields inherited from interface org.springframework.beans.factory.BeanFactory
FACTORY_BEAN_PREFIX
Fields inherited from interface org.springframework.context.ConfigurableApplicationContext
APPLICATION_STARTUP_BEAN_NAME, BOOTSTRAP_EXECUTOR_BEAN_NAME, CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SHUTDOWN_HOOK_THREAD_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME
Fields inherited from interface org.springframework.core.io.ResourceLoader
CLASSPATH_URL_PREFIX
Fields inherited from interface org.springframework.core.io.support.ResourcePatternResolver
CLASSPATH_ALL_URL_PREFIX
Fields inherited from interface org.springframework.context.SmartLifecycle
DEFAULT_PHASE
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
send an error to the log and to the messagekeeper of the adaptervoid
addReceiver
(Receiver<?> receiver) Receives incoming messages.void
void
Instruct the adapter to configure itself.void
configureReceiver
(Receiver<?> receiver) formatErrorMessage
(String errorMessage, Throwable t, Message originalMessage, String messageID, HasName objectInError, long receivedTime) org.springframework.context.ApplicationContext
This ClassLoader is set upon creation of the object, used to retrieve resources configured by the Ibis application.long
getLastExitIsTimeoutDate
(String pipeName) retrieve the date and time of the last message.the MessageKeeper is for keeping the lastmessageKeeperSize
messages available, for instance for displaying it in the webcontrolint
getName()
double
The number of messages for which processing ended unsuccessfully.int
double
Total of messages processedlong[]
int
getPhase()
Receiver<?>
getReceiverByName
(String receiverName) Returns the RunState of the object.return the date and time since active Creation date: (19-02-2003 12:16:53)org.springframework.core.task.TaskExecutor
protected void
boolean
By default these beans are not started.boolean
Check whether this component has successfully been configured.boolean
boolean
boolean
Verifies if this object needs to be started or stopped.void
logToMessageLogWithMessageContentsOrSize
(org.apache.logging.log4j.Level level, String logMessage, String dataPrefix, Message data) processMessageDirect
(String messageId, Message message, PipeLineSession pipeLineSession) Direct call to the Adapter PipeLine, foregoing any listeners and receivers.processMessageWithExceptions
(String messageId, Message message, PipeLineSession pipeLineSession) This method does the real processing of messages by the adapter.protected void
registerBeanPostProcessors
(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory) Enables theAutowired
annotation andConfigurationAware
objects.void
setApplicationContext
(org.springframework.context.ApplicationContext applicationContext) void
setAutoStart
(boolean autoStart) AutoStart indicates that the adapter should be started when the configuration is started.void
setConfiguration
(Configuration configuration) void
setConfigurationMetrics
(MetricsInitializer configurationMetrics) void
setDescription
(String description) some functional description of theAdapter
void
setErrorMessageFormatter
(IErrorMessageFormatter errorMessageFormatter) Formatter for errors that can occur in this adapter.void
setLastExitState
(String pipeName, long lastExitStateDate, String lastExitState) void
setMessageKeeperSize
(int size) number of message displayed in ibisconsolevoid
setMsgLogHidden
(boolean b) If set totrue
, the length of the message is shown in the msg log instead of the content of the messagevoid
Defines behaviour for logging messages.void
name of the adaptervoid
setPipeLine
(PipeLine pipeline) ThePipeLine
.void
setReplaceNullMessage
(boolean b) Iftrue
a null message is replaced by an empty messagevoid
setRequestReplyLogging
(boolean requestReplyLogging) Deprecated.void
setTargetDesignDocument
(String targetDesignDocument) void
setTaskExecutor
(org.springframework.core.task.TaskExecutor taskExecutor) void
start()
Start the adapter.void
stop()
This method should ideally not be called directly.void
Stop theAdapter
and close all elements like receivers, Pipeline, pipes etc.toString()
void
protected void
send a warning to the log and to the messagekeeper of the adapterMethods inherited from class org.springframework.context.support.GenericApplicationContext
cancelRefresh, closeBeanFactory, getAutowireCapableBeanFactory, getBeanDefinition, getBeanFactory, getClassLoader, getDefaultListableBeanFactory, getResource, getResources, isAlias, isBeanDefinitionOverridable, isBeanNameInUse, refreshBeanFactory, refreshForAotProcessing, registerAlias, registerBean, registerBean, registerBean, registerBean, registerBean, registerBean, registerBeanDefinition, removeAlias, removeBeanDefinition, setAllowBeanDefinitionOverriding, setAllowCircularReferences, setApplicationStartup, setClassLoader, setParent, setResourceLoader
Methods inherited from class org.springframework.context.support.AbstractApplicationContext
addApplicationListener, addBeanFactoryPostProcessor, assertBeanFactoryActive, clearResourceCaches, close, containsBean, containsBeanDefinition, containsLocalBean, createEnvironment, destroyBeans, doClose, findAllAnnotationsOnBean, findAnnotationOnBean, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationListeners, getApplicationName, getApplicationStartup, getBean, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getEnvironment, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResourcePatternResolver, getStartupDate, getType, getType, initApplicationEventMulticaster, initMessageSource, initPropertySources, invokeBeanFactoryPostProcessors, isActive, isClosed, isPrototype, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, postProcessBeanFactory, prepareBeanFactory, prepareRefresh, publishEvent, publishEvent, publishEvent, refresh, registerListeners, registerShutdownHook, removeApplicationListener, resetCommonCaches, setDisplayName, setEnvironment, setId
Methods inherited from class org.springframework.core.io.DefaultResourceLoader
addProtocolResolver, getProtocolResolvers, getResourceByPath, getResourceCache
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.springframework.core.AliasRegistry
getAliases
Methods inherited from interface org.springframework.beans.factory.support.BeanDefinitionRegistry
containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames
Methods inherited from interface org.springframework.context.ConfigurableApplicationContext
addProtocolResolver
-
Field Details
-
msgLog
protected org.apache.logging.log4j.Logger msgLog -
PROCESS_STATE_OK
- See Also:
-
PROCESS_STATE_ERROR
- See Also:
-
-
Constructor Details
-
Adapter
public Adapter()
-
-
Method Details
-
initLifecycleProcessor
protected void initLifecycleProcessor()- Overrides:
initLifecycleProcessor
in classorg.springframework.context.support.AbstractApplicationContext
-
setApplicationContext
public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) - Specified by:
setApplicationContext
in interfaceorg.springframework.context.ApplicationContextAware
-
getApplicationContext
public org.springframework.context.ApplicationContext getApplicationContext()- Specified by:
getApplicationContext
in interfaceHasApplicationContext
-
afterPropertiesSet
- Specified by:
afterPropertiesSet
in interfaceorg.springframework.beans.factory.InitializingBean
- Throws:
Exception
-
registerBeanPostProcessors
protected void registerBeanPostProcessors(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory) Enables theAutowired
annotation andConfigurationAware
objects.- Overrides:
registerBeanPostProcessors
in classorg.springframework.context.support.AbstractApplicationContext
-
configure
Instruct the adapter to configure itself. The adapter will call the pipeline to configure itself, the pipeline will call the individual pipes to configure themselves.- Specified by:
configure
in interfaceIConfigurable
- Throws:
ConfigurationException
- in case it was not able to configure the component.- See Also:
-
configureReceiver
- Throws:
ConfigurationException
-
warn
send a warning to the log and to the messagekeeper of the adapter -
addErrorMessageToMessageKeeper
send an error to the log and to the messagekeeper of the adapter -
setLastExitState
-
getLastExitIsTimeoutDate
-
formatErrorMessage
-
getLastMessageDateDate
retrieve the date and time of the last message. -
getMessageKeeper
the MessageKeeper is for keeping the lastmessageKeeperSize
messages available, for instance for displaying it in the webcontrol- See Also:
-
getNumOfMessagesInError
public double getNumOfMessagesInError()The number of messages for which processing ended unsuccessfully. -
getNumOfMessagesInProcess
public int getNumOfMessagesInProcess() -
getNumOfMessagesStartProcessingByHour
public long[] getNumOfMessagesStartProcessingByHour() -
getNumOfMessagesProcessed
public double getNumOfMessagesProcessed()Total of messages processed- Returns:
- long total messages processed
-
getReceiverByName
-
getReceivers
-
getRunState
Description copied from interface:ManagableLifecycle
Returns the RunState of the object.- Specified by:
getRunState
in interfaceManagableLifecycle
-
getStatsUpSinceDate
return the date and time since active Creation date: (19-02-2003 12:16:53)- Returns:
- String Date
-
logToMessageLogWithMessageContentsOrSize
-
processMessageDirect
public PipeLineResult processMessageDirect(String messageId, Message message, PipeLineSession pipeLineSession) Direct call to the Adapter PipeLine, foregoing any listeners and receivers. This method does an amount of setup which is otherwise done by theReceiver
.
This method does not throw any exceptions, and will always return aPipeLineResult
. If an error occurred, the error information is in thePipeLineResult
.- Parameters:
messageId
- ID of the messagemessage
-Message
to be processedpipeLineSession
-PipeLineSession
session in which message is to be processed- Returns:
- The
PipeLineResult
from processing the message, or indicating what error occurred.
-
processMessageWithExceptions
public PipeLineResult processMessageWithExceptions(String messageId, Message message, PipeLineSession pipeLineSession) throws ListenerException This method does the real processing of messages by the adapter. This method is to be called either from theReceiver
, or fromprocessMessageDirect(String, Message, PipeLineSession)
.
NB: This method expects most setup to already have been done by the caller! LoggingContext and masking of sensitive information is among things that should be set up by the caller.
This method will return aPipeLineResult
with results of the processing. This might indicate an error if the message could not be processed successfully. If there was an exception from thePipeLine
, aListenerException
might be thrown.- Parameters:
messageId
- ID of the messagemessage
-Message
to be processedpipeLineSession
-PipeLineSession
in which the message is to be processed- Returns:
PipeLineResult
with result from processing the message in thePipeLine
.- Throws:
ListenerException
- If there was an exception, throws aListenerException
.
-
addReceiver
Receives incoming messages. If an adapter can receive messages through multiple channels, then add a receiver for each channel. -
setErrorMessageFormatter
Formatter for errors that can occur in this adapter. -
setPipeLine
ThePipeLine
. -
getPipeLine
-
setConfiguration
-
start
public void start()Start the adapter. The thread-name will be set to the adapter's name. The run method, called by t.start(), will call the startRunning method of the IReceiver. The Adapter will be a new thread, as this interface extends theRunnable
interface. The actual starting is done in therun
method.- Specified by:
start
in interfaceorg.springframework.context.Lifecycle
- Overrides:
start
in classorg.springframework.context.support.AbstractApplicationContext
- See Also:
-
Receiver#startRunning()
-
getPhase
public int getPhase()- Specified by:
getPhase
in interfaceConfigurableLifecycle
- Specified by:
getPhase
in interfaceorg.springframework.context.Phased
- Specified by:
getPhase
in interfaceorg.springframework.context.SmartLifecycle
-
isRunning
public boolean isRunning()Description copied from interface:ManagableLifecycle
Verifies if this object needs to be started or stopped.- Specified by:
isRunning
in interfaceorg.springframework.context.Lifecycle
- Specified by:
isRunning
in interfaceManagableLifecycle
- Overrides:
isRunning
in classorg.springframework.context.support.AbstractApplicationContext
-
stop
Stop theAdapter
and close all elements like receivers, Pipeline, pipes etc. The adapter will call theIReceiver
tostopListening
Also the
PipeLine.stop()
method will be called, closing all registered pipes.- Specified by:
stop
in interfaceorg.springframework.context.SmartLifecycle
- See Also:
-
Receiver#stopRunning
PipeLine.stop()
-
stop
public void stop()This method should ideally not be called directly. Since this is aSmartLifecycle
thestop(Runnable)
must be called instead. Delegates tostop(Runnable)
which calls `super.stop()`.- Specified by:
stop
in interfaceorg.springframework.context.Lifecycle
- Overrides:
stop
in classorg.springframework.context.support.AbstractApplicationContext
-
toString
- Overrides:
toString
in classorg.springframework.context.support.AbstractApplicationContext
-
waitForNoMessagesInProcess
- Throws:
InterruptedException
-
getBeanName
- Specified by:
getBeanName
in interfaceorg.springframework.beans.factory.NamedBean
-
setName
name of the adapter -
getName
-
setDescription
some functional description of theAdapter
-
setAutoStart
public void setAutoStart(boolean autoStart) AutoStart indicates that the adapter should be started when the configuration is started.- Default value
true
-
isAutoStartup
public boolean isAutoStartup()Description copied from interface:ConfigurableLifecycle
By default these beans are not started. TheConfiguration
may do so in theConfiguration.configure()
method.- Specified by:
isAutoStartup
in interfaceConfigurableLifecycle
- Specified by:
isAutoStartup
in interfaceorg.springframework.context.SmartLifecycle
-
setReplaceNullMessage
public void setReplaceNullMessage(boolean b) Iftrue
a null message is replaced by an empty message- Default value
false
-
setMessageKeeperSize
public void setMessageKeeperSize(int size) number of message displayed in ibisconsole- Default value
- 10
-
setMsgLogLevel
Defines behaviour for logging messages. Configuration is done in the MSG appender in log4j4ibis.properties.- Default value
INFO
, unless overridden by propertymsg.log.level.default
-
setRequestReplyLogging
Deprecated. -
setMsgLogHidden
public void setMsgLogHidden(boolean b) If set totrue
, the length of the message is shown in the msg log instead of the content of the message- Default value
false
-
getConfigurationClassLoader
Description copied from interface:IScopeProvider
This ClassLoader is set upon creation of the object, used to retrieve resources configured by the Ibis application.- Specified by:
getConfigurationClassLoader
in interfaceHasApplicationContext
- Specified by:
getConfigurationClassLoader
in interfaceIScopeProvider
- Returns:
- returns the ClassLoader created by the
ClassLoaderManager
.
-
getDescription
-
isReplaceNullMessage
public boolean isReplaceNullMessage() -
getMessageKeeperSize
public int getMessageKeeperSize() -
isMsgLogHidden
public boolean isMsgLogHidden() -
setTargetDesignDocument
-
getTargetDesignDocument
-
getConfiguration
-
getLastMessageProcessingState
-
setConfigurationMetrics
-
isConfigured
public boolean isConfigured()Description copied from interface:ManagableLifecycle
Check whether this component has successfully been configured. Similar toManagableLifecycle.isRunning()
, verifies if this object may be started.- Specified by:
isConfigured
in interfaceManagableLifecycle
-
getTaskExecutor
public org.springframework.core.task.TaskExecutor getTaskExecutor() -
setTaskExecutor
public void setTaskExecutor(org.springframework.core.task.TaskExecutor taskExecutor) -
getComposedHideRegex
-
getComposedHideRegexPattern
-