c# wpf free pdf viewer : Extract one page from pdf online Library software class asp.net winforms azure ajax ATGCommProgGuide44-part2123

ATG  C om mer ce P ro g ramm in g   Gui d e 
42 3  
18  -  P ro ces s or  C h ai ns   an d  t h e  P ipel in e  Man ag er 
μ
pipelinelink 
Defines a processor 
within the chain and 
names it. 
name - (required) A name for this processor (for 
example, 
CheckInventory
). Must be unique. 
transaction - A transactional mode that overrides 
the default mode of the chain. The valid modes are: 
TX_REQUIRED 
TX_REQUIRES_NEW 
TX_SUPPORTS 
TX_NOT_SUPPORTED 
TX_MANDATORY 
processor 
The name of the 
PipelineProcessor
object. 
class - The processor class to be instantiated or 
referenced to. If the attribute is of the form 
packagename.classname
then a new object is to be 
created. If it is of the form 
jndi://.../...
, then the 
object is resolved through JNDI and its reference is 
used as the pipeline element. 
jndi - The processor class to be referenced to. The 
object is resolved through JNDI and its reference is 
used as the processor. 
transition 
A reference to the next 
link to be executed 
mapped by a return 
value. 
returnvalue - (required) An integer string that is 
used to define the next pipeline element. 
link - (required) The name of a 
pipelineprocessor
that will be executed if the return value of the current 
pipelineprocessor
matches the 
returnvalue
of 
this link. 
Document Type Definition for Pipeline Definition Files 
Pipeline definition files use the following XML document type definition: 
<!ENTITY %transactionmodes 
"(TX_REQUIRED|TX_REQUIRES_NEW|TX_SUPPORTS|TX_NOT_SUPPORTED|TX_MANDATORY)"> 
<!ELEMENT PipelineManager (pipelinechain*)> 
<!ELEMENT pipelinechain (pipelinelink*)> 
<!ATTLIST pipelinechain 
name ID #REQUIRED 
headlink IDREF #REQUIRED 
transaction %transactionmodes; "TX_REQUIRED" 
classname CDATA "atg.service.pipeline.PipelineChain" 
resultclassname CDATA "atg.service.pipeline.PipelineResultImpl"> 
<!ELEMENT pipelinelink (processor,transition*)> 
Extract one page from pdf online - Library software class:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others
www.rasteredge.com
Extract one page from pdf online - Library software class:VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
42 4  
18  -  P ro ces so r  C h ain s   an d  t h e  Pi pel in e  Man ag er 
<!ATTLIST pipelinelink 
name ID #REQUIRED 
transaction %transactionmodes; "TX_REQUIRED"> 
<!ELEMENT processor EMPTY> 
<!ATTLIST processor 
class CDATA #IMPLIED 
jndi CDATA #IMPLIED> 
<!ELEMENT transition EMPTY 
<!ATTLIST transition 
returnvalue CDATA #REQUIRED 
link IDREF #REQUIRED> 
Pipeline Definition File Example 
The following file, 
PipelineManager.xml
, is an example of a pipeline definition file that might be used 
for initializing a pipeline. 
<?xml version="1.0"?> 
<!DOCTYPE PipelineManager SYSTEM "PipelineManager.dtd"> 
<PipelineManager> 
<pipelinechain name="AddToCart" transaction="TX_REQUIRED" headlink="proc1"> 
<pipelinelink name="proc1"> 
<processor class="atg.commerce.addA"/> 
<transition returnvalue="1" link="proc2"/> 
<transition returnvalue="2" link="proc3"/> 
</pipelinelink> 
<pipelinelink name="proc2" transaction="TX_REQUIRES_NEW"> 
<processor class="atg.commerce.addB"/> 
<transition returnvalue="1" link="proc4"/> 
<transition returnvalue="2" link="proc5"/> 
</pipelinelink> 
<pipelinelink name="proc3"> 
<processor class="atg.commerce.addE"/> 
<transition returnvalue="1" link="proc6"/> 
<transition returnvalue="2" link="proc7"/> 
<transition returnvalue="3" link="proc2"/> 
</pipelinelink> 
<pipelinelink name="proc4"> 
<processor class="atg.commerce.addC"/> 
</pipelinelink> 
<pipelinelink name="proc5" transaction="TX_REQUIRES_NEW"> 
<processor class="atg.commerce.addD"/> 
</pipelinelink> 
<pipelinelink name="proc6" transaction="TX_NOT_SUPPORTED"> 
<processor class="atg.commerce.addF"/> 
Library software class:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
Online source codes for quick evaluation in VB.NET class. If you are looking for a solution to conveniently delete one page from your PDF document, you can use
www.rasteredge.com
Library software class:C# PDF Image Extract Library: Select, copy, paste PDF images in C#
in .NET framework application with trial SDK components and online C# class PDFPage page = (PDFPage)pdf.GetPage(0); // Extract all images on one pdf page.
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
42 5  
18  -  P ro ces s or  C h ai ns   an d  t h e  P ipel in e  Man ag er 
</pipelinelink> 
<pipelinelink name="proc7" transaction="TX_SUPPORTS"> 
<processor jndi="/dynamo/atg/commerce/addG"/> 
</pipelinelink> 
</pipelinechain> 
<pipelinechain name="RemoveFromCart" transaction="TX_REQUIRED" 
headlink="proc99" classname="atg.service.pipeline.PipelineMonoChain"> 
<pipelinelink name="proc99"> 
<processor class="atg.commerce.removeA"/> 
</pipelinelink> 
</pipelinechain> 
</PipelineManager> 
Each section of the 
PipelineManager.xml
file is described below. 
The first line says that this file compiles with the XML version 1.0 specification. 
<?xml version="1.0"?> 
The following line says that this is an XML file and that its DTD (document type definition) is in the file 
PipelineManager.dtd
<!DOCTYPE PipelineManager SYSTEM "PipelineManager.dtd"> 
This following line is the start of the 
PipelineManager
definition. A 
<PipelineManager>
tag encloses 
all of the processor chain definitions. 
<PipelineManager> 
The following line begins the definition for a chain named 
AddToCart.
The default transactional mode of 
the 
PipelineLinks
is TX_REQUIRED. The head link is 
proc1
, which specifies the name of a 
PipelineProcessor
defined later in the file. 
<pipelinechain name="AddToCart" transaction="TX_REQUIRED" 
headlink="proc1"> 
The next section is the definition of a 
PipelineLink
with name 
proc1
and 
PipelineProcessor
class 
name 
atg.commerce.addA
. The 
PipelineManager
initialization routine will construct the object 
atg.commerce.addA
and set the 
PipelineLink
’s processor reference to this object. This 
PipelineLink
has two transitions coming out of it, one with return value 1 which links to 
proc2
and one 
with return value 2 which links to 
proc3
. Both 
proc2
and 
proc3
are defined later in the file. 
<pipelinelink name="proc1"> 
<processor class="atg.commerce.addA"/> 
<transition returnvalue="1" link="proc2"/> 
<transition returnvalue="2" link="proc3"/> 
</pipelinelink> 
Library software class:VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
This guiding page will help you merge two or more PDF documents into a single one in a Visual Basic .NET imaging application.
www.rasteredge.com
Library software class:VB.NET PDF Annotate Library: Draw, edit PDF annotation, markups in
will get a simple VB.NET online PDF annotation tutorial. contains all information about source PDF document file PDFPage: As for one page of PDFDocument instance
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
42 6  
18  -  P ro ces so r  C h ain s   an d  t h e  Pi pel in e  Man ag er 
The next section defines two additional 
PipelineLinks
. It is like the previous section, except that 
proc2
has defined an overriding transactional mode, TX_REQUIRES_NEW. 
<pipelinelink name="proc2" transaction="TX_REQUIRES_NEW"> 
<processor class="atg.commerce.addB"/> 
<transition returnvalue="1" link="proc4"/> 
<transition returnvalue="2" link="proc5"/> 
</pipelinelink> 
<pipelinelink name="proc3"> 
<processor class="atg.commerce.addE"/> 
<transition returnvalue="1" link="proc6"/> 
<transition returnvalue="2" link="proc7"/> 
<transition returnvalue="3" link="proc2"/> 
</pipelinelink> 
This section defines four more 
PipelineLink
objects, some with overriding transactional modes. The 
interesting part of this section is the processor definition for 
proc7
. Instead of using a Java class name 
definition, this processor is defined with a JNDI reference as 
jndi="/dynamo/atg/commerce/addG"
This JNDI reference will be resolved at initialization time and used as the processor for this link. The final 
line is the closing 
</pipelinechain>
tag for the processor chain. 
<pipelinelink name="proc4"> 
<processor class="atg.commerce.addC"/> 
</pipelinelink> 
<pipelinelink name="proc5" transaction="TX_REQUIRES_NEW"> 
<processor class="atg.commerce.addD"/> 
</pipelinelink> 
<pipelinelink name="proc6" transaction="TX_NOT_SUPPORTED"> 
<processor class="atg.commerce.addF"/> 
</pipelinelink> 
<pipelinelink name="proc7" transaction="TX_SUPPORTS"> 
<processor jndi="/dynamo/atg/commerce/addG"/> 
</pipelinelink> 
</pipelinechain> 
The last section defines another 
PipelineChain
called 
RemoveFromCart
with default transaction mode 
TX_REQUIRED, 
headlink
proc99. It specifies that the 
classname
to be used for the construction of the 
PipelineChain
is called 
PipelineMonoChain
. The last line is the closing tag that closes off the 
PipelineManager
definition. 
<pipelinechain name="RemoveFromCart" transaction="TX_REQUIRED" headlink="proc99" 
classname="atg.service.pipeline.PipelineMonoChain"> 
<pipelinelink name="proc99"> 
<processor class="atg.commerce.removeA"/> 
</pipelinelink> 
Library software class:C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
C# developers can easily merge and append one PDF document to document imaging toolkit, also offers other advanced PDF document page processing and
www.rasteredge.com
Library software class:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
Free online C# class source code for deleting Using RasterEdge Visual C# .NET PDF page deletion component, developers can easily select one or more
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
42 7  
18  -  P ro ces s or  C h ai ns   an d  t h e  P ipel in e  Man ag er 
</pipelinechain> 
</PipelineManager> 
After the XML file is defined, start the Pipeline Manager component to construct the 
PipelineManager
and its chains automatically. 
Creating and Editing Processor Chains Programmatically 
The following section describes various ways to construct or edit a processor chain using the API. 
Locking and Synchronization for Editing Processor Chains 
When you edit a processor chain, you must first obtain a lock on the chain, using the 
lockChain()
method of the 
PipelineManager
. When you lock a chain, the 
PipelineManager
gets a reference to the 
calling thread and stores it within the requested chain. If the lock reference of the chain is null, then the 
lock is granted. If the lock reference is the same as the requesting thread, then the chain is already locked 
by the caller and execution falls through. For all other cases, an exception is thrown, which means that the 
chain is already locked by another thread. 
Portions of the 
lockChain()
and 
unlockChain()
methods need to be synchronized, particularly those 
with sections that check the lock reference and set it. 
The lock cannot be granted if there are threads executing in the requested chain. The chain keeps a 
reference count for all the threads executing within it. If this count is greater than 0, then the call to 
lockChain()
blocks until the reference count is 0. When the reference count reaches 0, then the blocked 
call is notified and the 
lockChain()
method continues. To prevent starvation of the 
lockChain()
call, 
once that method is called, other threads attempting to call 
runProcess()
will sleep until 
unlockChain()
is called. Once this happens, all the threads sleeping on the 
runProcess()
call will be 
notified. 
Creating a New Processor Chain from Scratch 
To create a new processor chain using the API: 
1.
Call the 
PipelineManager
’s method 
createChain()
. The 
createChain()
method 
constructs the appropriate 
PipelineChain
object and sets the proper return type 
into it. It implicitly locks and disables the chain and then adds it to the Pipeline 
Manager. 
2.
Edit the chain by making calls to the 
createLink()
setHeadLink()
, and 
addTransition()
methods of the 
PipelineManager
createLink()
is called to create all the 
PipelineLink
objects that will be 
used in this chain and to link them together. 
setHeadLink()
is called to set the first link object into the chain. 
addTransition()
is called to create any additional transitions between links. 
3.
Call 
enableChain()
to allow execution and 
unlockChain()
to allow other threads 
to edit the chain. These last two calls must be made in this order. Otherwise, an 
Library software class:C# PDF: C# Code to Process PDF Document Page Using C#.NET PDF
Able to separate one PDF file into two PDF documents using C#.NET programming code; Free to extract page(s) from source PDF file and combine extracted
www.rasteredge.com
Library software class:VB.NET PDF copy, paste image library: copy, paste, cut PDF images
how to copy an image from one page of PDF how to cut image from PDF file page by using doc As PDFDocument = New PDFDocument(inputFilePath) ' Extract all images
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
42 8  
18  -  P ro ces so r  C h ain s   an d  t h e  Pi pel in e  Man ag er 
exception will be thrown because 
enableChain()
requires the caller to have a lock 
on the chain. 
Editing an Existing Processor Chain 
Follow these steps to edit an existing processor chain. 
1.
Call 
lockChain()
. This call will block until there are no threads executing the chain 
and a lock can be obtained. 
2.
Call 
setHeadLink()
createLink()
addTransition()
, and 
removeTransition()
to edit the chain, as described in the preceding Creating a New Processor Chain from 
Scratch section. 
3.
Call 
unlockChain()
to release the lock and allow execution of the chain to resume. 
Replacing an Existing Processor Chain 
Follow these steps to remove a chain and replace it with a new version of the same chain. 
1.
Create a copy of the chain you want to replace by calling 
duplicateChain()
and 
passing the 
chainId
, which will be replaced as the argument. This call will return a 
duplicate disabled copy of that chain. 
2.
Edit the new chain, using the 
setHeadLink()
createLink()
addTransition()
and 
removeTransition()
methods, as described in the Editing an Existing Processor 
Chain section. 
3.
Call 
lockChain()
on the chain that is to be replaced. 
4.
Call 
replaceChain()
with the new chain as the argument. This will replace the chain 
that has the same name as the new chain. 
5.
Call 
enableChain()
and 
unlockChain()
on the new chain, in that order. 
Creating a New Processor Chain from an Existing Chain 
Follow these steps to create a chain based on an existing chain in the 
PipelineManager
1.
Call 
copyChain(oldChainName, newChainName)
. This returns a copy of the chain 
with a new name. The new chain is locked and disabled. 
2.
Edit the new chain if required, as described in the Editing an Existing Processor Chain 
section. 
3.
Call 
enableChain()
to allow execution on it and 
unlockChain()
to allow other 
threads to edit the chain. These last two calls must be made in this order or an 
exception will be thrown, because 
enableChain()
requires the caller to have a lock. 
Adding and Removing Transitions to and from a Processor Chain 
Adding and removing transitions to and from a processor chain requires the use of the 
addTransition()
and 
removeTransition()
methods. 
The following before and after diagram demonstrates adding and removing transitions. Pipeline Link 1 is 
the head of the chain. Pipeline Link 1a is inserted after Pipeline Link 1 and before Pipeline Link 2 and 
Pipeline Link 3. The transition from Pipeline Link 3 to Pipeline Link 4 is removed. 
ATG  C om mer ce P ro g ramm in g   Gui d e 
42 9  
18  -  P ro ces s or  C h ai ns   an d  t h e  P ipel in e  Man ag er 
Pipeline
Link 1
Pipeline
Link 3
Pipeline
Link 2
Pipeline
Link 4
Pipeline
Link 3
Pipeline
Link 2
Pipeline
Link 4
Pipeline
Link 1
Pipeline
Link 1a
1
2
1
1
1
1
1
2
1.
Call 
lockChain()
in the 
PipelineManager
with the 
chainId
. This insures that no 
thread executes in the chain and no other thread edits this chain. 
2.
Remove the two transitions from Pipeline Link 1 by doing the following: 
Get references to Pipeline Link 2 and Pipeline Link 3. 
Call 
removeTransition()
twice to remove the two transitions that come from 
Pipeline Link 1. 
3.
Call 
createLink()
in the 
PipelineChain
to create Pipeline Link 1a. The arguments 
to 
createLink()
will be as follows: Pipeline Link 1a, a 
PipelineProcessor
object, a 
reference to the link whose ID is Pipeline Link 1, and 1. This creates the transition from 
Pipeline Link 1 to Pipeline Link 1a. 
4.
Call 
addTransition()
twice to add the two transitions to Pipeline Link 2 and Pipeline 
Link 3. 
5.
Call 
removeTransition()
with arguments Pipeline Link 3 and 1. This removes the 
transition from Pipeline Link 3 to Pipeline Link 4. 
6.
Call 
unlockChain()
on the chain. 
Extending the PipelineChain and PipelineResult Classes 
The examples in the preceding section, Creating and Editing Processor Chains Programmatically, showed 
how to create processor chains using the default version of the 
createChain()
method. This version of 
createChain()
takes one argument and constructs and returns an object of type 
atg.service.pipeline.PipelineChain
(the default). 
atg.service.pipeline.PipelineResult
will be the object used for that chain’s 
PipelineResult
object. 
If you subclass 
PipelineChain
and 
PipelineResult
, you can create a processor chain with your 
subclass in the same way you create a chain using the default 
PipelineChain
and 
PipelineResult
objects. The only difference is that you need to use another version of the 
createChain()
method. This 
ATG  C om merce  P ro gra mm in g  G ui d e 
43 0  
18  -  P ro ces so r  C h ain s   an d  t h e  Pi pel in e  Man ag er 
createChain()
method does the same thing, except that it accepts two String arguments. These String 
arguments identify the classes to be used for the 
PipelineChain
and 
PipelineResult
objects. 
Example 
This example uses a specialized version of 
PipelineChain
called 
PipelineMonoChain
. This 
PipelineChain
subclass represents a singly linked list, so each 
PipelineLink
object transitions only to 
a single 
PipelineLink
To create the 
PipelineMonoChain
class, the first step is to subclass 
PipelineChain
. The 
PipelineMonoChain
class overrides the following methods in 
PipelineChain
createLink()
addTransition()
, and the two 
removeTransition()
methods. 
The subclass’s 
createLink()
method returns 
PipelineMonoLink
, which is a special type of 
PipelineLink
object that only allows a single transition out of it. It extends 
atg.service.pipeline.PipelineLink
. The declaration of 
createLink()
looks like this: 
public PipelineMonoLink createLink(String aLinkId, PipelineProcessor aProc, 
PipelineLink aFromLink, int aRetCode) 
throws CreateLinkException, TransitionException 
This creates a 
PipelineMonoLink
object instead of a 
PipelineLink
object and returns it to the caller. 
The main difference is that if 
aFromLink
already has a transition coming out of it, then a 
TransitionException
would be thrown. 
In 
PipelineLink
, the 
TransitionException
is thrown if the 
aRetCode
was already mapped in 
aFromLink
. The 
aRetCode
value has a slightly different meaning in 
PipelineMonoLink
. If its value is 
returned from the 
PipelineProcessor
for that link, then the transition is followed. Otherwise execution 
on the chain ends and the 
PipelineResult
is returned to the caller. 
For 
PipelineMonoChain
to instantiate a 
PipelineMonoLink
, the 
instantiatePipelineLink
method 
must be overridden to return a new instance of a 
PipelineLink
subclass. The code would look like this: 
protected PipelineLink instantiatePipelineLink(String pLinkId) { 
return new PipelineMonoLink(pLinkId); 
The 
addTransition()
method checks to see if there is a transition coming out of 
aFromLink
. If there is, 
then a 
TransitionException
is thrown. Otherwise, the link is mapped. Your subclass should include a 
new version of 
addTransition()
with the following signature: 
void addTransition(PipelineMonoLink aFromLink, int aRetCode, PipelineMonoLink 
aToLink) 
throws TransitionException 
ATG  C om mer ce P ro g ramm in g   Gui d e 
43 1  
18  -  P ro ces s or  C h ai ns   an d  t h e  P ipel in e  Man ag er 
This differs from the 
addTransition()
in 
PipelineLink
by the first and third arguments. The type in 
the method above is 
PipelineMonoLink
, rather than 
PipelineLink
, as in 
PipelineChain
. The 
addTransition()
method in 
PipelineLink
however still exists and has not been overridden. This 
should be explicitly overridden and the code should throw a 
TransitionException
. This method would 
only be called if a 
PipelineLink
(or subclass) that is not a 
PipelineMonoLink
was passed as one of the 
arguments. 
The 
removeTransition()
method checks to see if a transition is coming out of 
aFromLink
. If none 
exists, then a 
TransitionException
is thrown. If one does exist, then the transition would be removed. 
Again, new versions of 
removeTransition()
should be added with the following signatures: 
void removeTransition(PipelineMonoLink aFromLink, int aRetCode) 
throws TransitionException 
void removeTransition(PipelineMonoLink aFromLink, PipelineMonoLink aToLink) 
throws TransitionException 
These differ again by the arguments, which provide for 
PipelineMonoLink
objects to be passed as 
parameters rather than 
PipelineLink
objects. The 
removeTransition()
methods that take 
PipelineLink
objects should again be overridden explicitly and exceptions thrown. 
The 
PipelineMonoLink
object needs to extend 
PipelineLink
. New methods that are specific to this 
implementation need to be defined and the following methods need to be overridden: 
getNextLink()
getNextLinks()
, and 
getRetCodes()
. The 
PipelineMonoLink
would contain the following methods: 
public PipelineMonoLink getNextLink() 
public PipelineLink getNextLink(int aRetCode) 
public PipelineMonoLink getNextLinks() 
public PipelineLink[] getNextLinks(int[] aRetCodes) 
public int getRetCode() 
public int[] getRetCodes() 
Although it takes a return code parameter, 
getNextLink
(
int aRetCode
) should just return the 
PipelineMonoLink
object that is mapped to the link that called the method. For cleanliness, a 
getNextLink()
method should be defined that takes no arguments and returns a 
PipelineMonoLink
The inherited 
getNextLink(int aRetCode)
method should just call the one with no arguments and 
return the 
PipelineMonoLink
object that is cast to a 
PipelineLink
. The 
getNextLinks(int[]
aRetCodes)
method should also just call 
getNextLinks()
and ignore the 
aRetCodes
and put the 
PipelineMonoLink
into a 
PipelineLink
array. The 
int[] getRetCodes()
method should again just 
call 
getRetCode()
and take the return value, insert it into an array and return it. 
The example in this section implements a singly linked chain. It overrides 
PipelineChain
and 
PipelineLink
to force the objects to allow each link to have only one transition. The 
PipelineMonoLink
enforces this. The reason 
PipelineChain
is overridden is to create 
PipelineMonoLink
objects rather than 
PipelineLink
objects. 
ATG  C om merce  P ro gra mm in g  G ui d e 
43 2  
18  -  P ro ces so r  C h ain s   an d  t h e  Pi pel in e  Man ag er 
Pipelines and Transactions 
The Pipeline Manager is transactionally aware. This means that as it executes the processors in its 
processor chains, each processor has the ability to mark the chain execution to be rolled back. If none of 
the processors mark the transaction, then it is committed when the chain has finished executing. 
The Pipeline Manager relies on the Java Transaction API (JTA) for its transactional needs. For more 
information about JTA transactions in the ATG platform, see the Transaction Management chapter in the 
ATG Programming Guide. A processor may handle transactions in one of five modes: 
TX_REQUIRED
TX_REQUIRES_NEW
TX_NOT_SUPPORTED
TX_SUPPORTS
TX_MANDATORY
Processor Transaction Management 
Transaction management refers to the action of executing 
PipelineProcessors
in the context of their 
defined transaction modes. This table describes each transaction mode and what the Pipeline Manager 
does for each of those modes. 
TX_REQUIRED 
The pipeline processor requires that a transaction be present for execution. 
If there is no transaction available when the pipeline manager is called, then 
the manager will create one and use it for execution of the pipeline. If the 
PipelineManager
created the transaction then it will be committed after 
the processor completes, otherwise it will not be. 
TX_REQUIRES_NEW 
The pipeline processor requires its own transaction for execution. If a 
transaction is present, then it is suspended. A new transaction is created 
before the execution. The processor then executes its code. At completion, 
the transaction is either committed or rolled back. The original transaction is 
then resumed. 
TX_NOT_SUPPORTED 
The processor is not to be executed in a transaction. The current transaction 
is suspended, the processor executes, and then the transaction is resumed. 
TX_SUPPORTS 
The processor can be executed in a transaction. It will execute in the context 
of a transaction is one is available. If one is not available it will still execute, 
but without a transaction. 
TX_MANDATORY 
This means that a transaction must already be in place, otherwise an error 
occurs. The transaction is not automatically committed after the request. 
Documents you may be interested
Documents you may be interested