Package org.frankframework.core
Class PipeLine
java.lang.Object
org.frankframework.core.TransactionAttributes
org.frankframework.core.PipeLine
- All Implemented Interfaces:
ICacheEnabled<String,
,String> HasTransactionAttribute
,IConfigurationAware
,IScopeProvider
,HasStatistics
,org.springframework.beans.factory.Aware
,org.springframework.context.ApplicationContextAware
@Category(BASIC)
@FrankDocGroup(OTHER)
public class PipeLine
extends TransactionAttributes
implements ICacheEnabled<String,String>, HasStatistics, IConfigurationAware
Required in each
The pipes in a
A pipeline gathers statistics about the messages it processes.
In the AppConstants there may be a property named
Transaction control
THE FOLLOWING TO BE UPDATED, attribute 'transacted' replaced by 'transactionAttribute' If
Adapter
to transform incoming messages. A pipeline
is a sequence of pipes. A
pipeline also defines its allowed end states using the <Exits>
tag.
The pipes in a
PipeLine
may not be executed in sequential order, see PipeForward
.
A pipeline gathers statistics about the messages it processes.
In the AppConstants there may be a property named
log.logIntermediaryResults
(true/false)
which indicates whether the intermediary results (between calling pipes) have to be logged.
Transaction control
THE FOLLOWING TO BE UPDATED, attribute 'transacted' replaced by 'transactionAttribute' If
transacted
is set to true
, messages will be processed
under transaction control. Processing by XA-compliant pipes (i.e. Pipes that implement the
IXAEnabled-interface, set their transacted-attribute to true
and use XA-compliant
resources) will then either be committed or rolled back in one transaction.
If transacted
is set to true
, either an existing transaction
(started by a transactional receiver) is joined, or new one is created (if the message processing request
is not initiated by a receiver under transaction control.
Messages are only committed or rolled back by the Pipeline if it started the transaction itself. If
the pipeline joined an existing transaction, the commit or rollback is left to the object that started
the transaction, i.e. the receiver. In the latter case the pipeline can indicate to the receiver that the
transaction should be rolled back (by calling UserTransaction.setRollBackOnly()).
The choice whether to either commit (by Pipeline or Receiver) or rollback (by Pipeline or Receiver)
is made as follows:
If the processing of the message concluded without exceptions and the status of the transaction is
STATUS_ACTIVE (i.e. normal) the transaction will be committed. Otherwise it will be rolled back,
or marked for roll back by the calling party.- Author:
- Johan Verrips
-
Nested Class Summary
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
Fields inherited from class org.frankframework.core.TransactionAttributes
log
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addForward
(PipeForward forward) Deprecated.void
Register a Pipe at this pipeline.void
addPipeLineExit
(PipeLineExit exit) Deprecated.boolean
void
Configures the pipes of this Pipeline and does some basic checks.void
org.springframework.context.ApplicationContext
getCache()
This ClassLoader is set upon creation of the object, used to retrieve resources configured by the Ibis application.int
long
getName()
getOwner()
getPipe
(int index) int
io.micrometer.core.instrument.DistributionSummary
getPipes()
io.micrometer.core.instrument.DistributionSummary
getPipeSizeInStatistics
(IPipe pipe) io.micrometer.core.instrument.DistributionSummary
io.micrometer.core.instrument.DistributionSummary
io.micrometer.core.instrument.DistributionSummary
getPipeWaitStatistics
(IPipe pipe) io.micrometer.core.instrument.DistributionSummary
boolean
process
(String messageId, Message message, PipeLineSession pipeLineSession) Theprocess
method does the processing of a message.
It retrieves the first pipe to execute from thefirstPipe</code field, the call results in a PipRunResult, containing the next pipe to activate.
void
registerExitHandler
(IPipeLineExitHandler exitHandler) resolveForward
(IPipe pipe, PipeForward forward) Find the destination of the forward, i.e. theobject
(Pipe or PipeLineExit) where the forward points to.void
setAdapter
(Adapter adapter) Register the adapterName of this Pipelineprocessor.void
Deprecated.void
setApplicationContext
(org.springframework.context.ApplicationContext applicationContext) void
Cache of resultsvoid
setConfigurationMetrics
(MetricsInitializer configurationMetrics) void
setExpectsSessionKeys
(String expectsSessionKeys) The pipeline of this adapter expects to use the following session keys to be set on call.void
setFirstPipe
(String pipeName) Name of the first pipe to execute when a message is to be processedvoid
setGlobalForwards
(PipeForwards forwards) Optional global forwards that will be added to every pipe, when the forward name has not been explicitly set.void
setInputValidator
(IValidator inputValidator) Request validator, or combined validator for request and responsevoid
setInputWrapper
(IWrapperPipe inputWrapper) Optional pipe to extract the request message from its envelopevoid
Optional Locker, to avoid parallel execution of the PipeLine by multiple threads on multiple servers.void
setMaxThreads
(int newMaxThreads) Maximum number of threads that may execute this Pipeline simultaneously, use 0 to disable limitvoid
If messageSizeWarn>=0 and the size of the input or result pipe message exceeds the value specified a warning message is logged.void
setOutputValidator
(IValidator outputValidator) Optional pipe to validate the response.void
setOutputWrapper
(IWrapperPipe outputWrapper) Optional pipe to wrap the response message in an envelopevoid
setOwner
(INamedObject owner) void
setPipeLineExits
(PipeLineExits exits) PipeLine exits.void
setPipeLineProcessor
(PipeLineProcessor pipeLineProcessor) void
setStoreOriginalMessageWithoutNamespaces
(boolean b) If settrue
the original message without namespaces (and prefixes) is stored under the session key originalMessageWithoutNamespacesvoid
when specified andnull
is received as a message the message is changed to the specified valuevoid
start()
protected void
void
stop()
Close the pipeline.protected void
toString()
Methods inherited from class org.frankframework.core.TransactionAttributes
configureTransactionAttributes, getTransactionAttribute, getTransactionTimeout, getTxDef, isTransacted, isTransacted, setTransacted, setTransactionAttribute, setTransactionTimeout
-
Field Details
-
INPUT_VALIDATOR_NAME
- See Also:
-
OUTPUT_VALIDATOR_NAME
- See Also:
-
INPUT_WRAPPER_NAME
- See Also:
-
OUTPUT_WRAPPER_NAME
- See Also:
-
PIPELINE_DURATION_STATS
- See Also:
-
PIPELINE_WAIT_STATS
- See Also:
-
PIPELINE_SIZE_STATS
- See Also:
-
DEFAULT_SUCCESS_EXIT_NAME
- See Also:
-
-
Constructor Details
-
PipeLine
public PipeLine()
-
-
Method Details
-
getPipe
-
getPipe
-
registerExitHandler
-
configure
Configures the pipes of this Pipeline and does some basic checks. It also registers thePipeLineSession
object at the pipes.- Overrides:
configure
in classTransactionAttributes
- Throws:
ConfigurationException
- See Also:
-
configure
- Throws:
ConfigurationException
-
configurationSucceeded
public boolean configurationSucceeded() -
findExitByState
-
getPipeLineSize
public int getPipeLineSize()- Returns:
- the number of pipes in the pipeline
-
getPipeStatistics
@Nonnull public io.micrometer.core.instrument.DistributionSummary getPipeStatistics(IConfigurationAware pipe) -
getPipeWaitStatistics
-
getPipeSizeInStatistics
@Nonnull public io.micrometer.core.instrument.DistributionSummary getPipeSizeInStatistics(IPipe pipe) -
getPipeSizeOutStatistics
@Nonnull public io.micrometer.core.instrument.DistributionSummary getPipeSizeOutStatistics(IPipe pipe) -
process
public PipeLineResult process(String messageId, Message message, PipeLineSession pipeLineSession) throws PipeRunException Theprocess
method does the processing of a message.
It retrieves the first pipe to execute from thefirstPipe</code field, the call results in a PipRunResult, containing the next pipe to activate. While processing the process method keeps statistics.
- Parameters:
message
- The message as received from the ListenermessageId
- A unique id for this message, used for logging purposes.- Returns:
- the result of the processing.
- Throws:
PipeRunException
- when something went wrong in the pipes.
-
resolveForward
Find the destination of the forward, i.e. theobject
(Pipe or PipeLineExit) where the forward points to.- Throws:
PipeRunException
-
setAdapter
Register the adapterName of this Pipelineprocessor.- Parameters:
adapter
-
-
start
- Throws:
PipeStartException
-
startPipe
- Throws:
PipeStartException
-
stop
public void stop()Close the pipeline. This will call thestop()
method of all registeredPipes
- See Also:
-
stopPipe
-
getName
- Specified by:
getName
in interfaceIConfigurationAware
-
toString
-
setInputValidator
Request validator, or combined validator for request and response -
setOutputValidator
Optional pipe to validate the response. Can be specified if the response cannot be validated by the request validator -
setInputWrapper
Optional pipe to extract the request message from its envelope -
setOutputWrapper
Optional pipe to wrap the response message in an envelope -
setPipeLineExits
-
addPipeLineExit
Deprecated.PipeLine exits. -
setGlobalForwards
Optional global forwards that will be added to every pipe, when the forward name has not been explicitly set. For example the<forward name="exception" path="error_exception" />
, which will add theexception
forward to every pipe in the pipeline. -
addForward
Deprecated. -
setLocker
Optional Locker, to avoid parallel execution of the PipeLine by multiple threads on multiple servers. The Pipeline is NOT executed (and is considered to have ended successfully) when the lock cannot be obtained, e.g. in case another thread, may be in another server, holds the lock and does not release it in a timely manner. If only the number of threads executing this PipeLine needs to be limited, the attribute maxThreads can be set instead, avoiding the database overhead. -
setCache
Cache of results- Specified by:
setCache
in interfaceICacheEnabled<String,
String>
-
addPipe
Register a Pipe at this pipeline. The name is also put in the globalForwards table (with forward-name=pipename and forward-path=pipename, so that pipe can look for a specific pipe-name. If already a globalForward exists under that name, the pipe is NOT added, allowing globalForwards to prevail.- Throws:
ConfigurationException
- See Also:
-
setFirstPipe
Name of the first pipe to execute when a message is to be processed- Default value
- first pipe of the pipeline
-
setMaxThreads
public void setMaxThreads(int newMaxThreads) Maximum number of threads that may execute this Pipeline simultaneously, use 0 to disable limit- Default value
- 0
-
setStoreOriginalMessageWithoutNamespaces
public void setStoreOriginalMessageWithoutNamespaces(boolean b) If settrue
the original message without namespaces (and prefixes) is stored under the session key originalMessageWithoutNamespaces- Default value
- false
-
setMessageSizeWarn
If messageSizeWarn>=0 and the size of the input or result pipe message exceeds the value specified a warning message is logged. You can specify the value with the suffixesKB
,MB
orGB
- Default value
- application default (30MB)
-
getMessageSizeWarnNum
public long getMessageSizeWarnNum() -
setTransformNullMessage
when specified andnull
is received as a message the message is changed to the specified value -
setAdapterToRunBeforeOnEmptyInput
@Deprecated @ConfigurationWarning("Please use an XmlIf-pipe and call a sub-adapter to retrieve a new/different response") public void setAdapterToRunBeforeOnEmptyInput(String s) Deprecated.when specified and an empty message is received the specified adapter is run before passing the message (response from specified adapter) to the pipeline -
setExpectsSessionKeys
The pipeline of this adapter expects to use the following session keys to be set on call. This is for adapters that are called as sub-adapters from other adapters. This serves both for documentation, so callers can see what session keys to set on call, and for verification that those session keys are present.- Parameters:
expectsSessionKeys
- Session keys to set on call of the pipeline, comma-separated.
-
getApplicationContext
public org.springframework.context.ApplicationContext getApplicationContext()- Specified by:
getApplicationContext
in interfaceIConfigurationAware
-
setApplicationContext
public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext) - Specified by:
setApplicationContext
in interfaceorg.springframework.context.ApplicationContextAware
-
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 interfaceIScopeProvider
- Returns:
- returns the ClassLoader created by the
ClassLoaderManager
.
-
setConfigurationMetrics
-
getFirstPipe
-
getMaxThreads
public int getMaxThreads() -
isStoreOriginalMessageWithoutNamespaces
public boolean isStoreOriginalMessageWithoutNamespaces() -
getAdapterToRunBeforeOnEmptyInput
-
getInputValidator
-
getOutputValidator
-
getInputWrapper
-
getOutputWrapper
-
getPipeLineExits
-
getGlobalForwards
-
getLocker
-
getCache
- Specified by:
getCache
in interfaceICacheEnabled<String,
String>
-
getPipes
-
getAdapter
- Specified by:
getAdapter
in interfaceHasStatistics
-
setOwner
-
getOwner
-
setPipeLineProcessor
-
getRequestSizeStats
public io.micrometer.core.instrument.DistributionSummary getRequestSizeStats() -
getPipelineWaitStatistics
public io.micrometer.core.instrument.DistributionSummary getPipelineWaitStatistics() -
getExitHandlers
-
getExpectsSessionKeys
-