cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Gerzabek" <michael.gerza...@at.efp.cc>
Subject AW: Howto: call an internal pipeline from a component
Date Fri, 15 Feb 2002 11:11:03 GMT
Vadim:

> Sorry, don't get what's your issue here. May be some example would help.

Ok. I'll do it the long way.

We are building a plugon for Cocoon to use SAP. We decided that the
wonderful
world of avalon and cocoon together is the best basis to do so :)! Thnx to
Cocoon and Avalon!!!

Our aim is to offer an efficient and easy way to communicate with an
SAP R/3 Systems.

Currently we are thinking about how we can give it to the community. You'll
hear later this month about that.

The first step for us was to build an RfcTransformer. It takes the request
and forms a SAP-Request get the answer and converts it into SAX-Events.
Simple like Cocoon's SqlTransformer does.

We use a pipeline like this:

<map:pipeline>
	<map:match pattern="XRFC/*/*">
		<map:act type="xrfc-config">
			<map:parameter name="name" value="{1}"/>
			<map:parameter name="collection" value="{2}"/>
			<map:generate type="object" src="{source}"/>
			<map:transform type="web3-rfc">
				<map:parameter name="system" value="{backend}"/>
				<map:parameter name="producer" value="{producer}"/>
			</map:transform>
			<map:serialize type="xml"/>
		</map:act>
	</map:match>
</map:pipeline>

Now with big ERP-Systems it often happens that you can't count that they
are present when you need them! Internet world has open 24 hours a day
seven days a week - some ERP-Systems only monday 'til friday from 6:00 to
18:00.

For special requests we only need to be sure that the requests reaches
our ERP. The time this is done is not relevant. So we decided to split the
pipeline into two parts.

One for doing the request (resolving parameters from session and so on):
<map:pipeline>
	<map:match pattern="i-prae-XRFC/*/*">
		<map:act type="xrfc-config">
			<map:parameter name="name" value="{1}"/>
			<map:parameter name="collection" value="{2}"/>
			<map:generate type="object" src="{source}"/>
			<map:transform src="{rfc-generation}"/>
			<map:serialize type="xml"/>
		</map:act>
	</map:match>
</map:pipeline>

and write the result from this pipeline into a database. A scheduler
reads from the database the pending requests and when the R3 is present
again pushes the Document through a second pipeline:
<map:pipeline>
	<map:match pattern="i-post-XRFC/*/*/*">
		<map:act type="xrfc-config">
			<map:parameter name="name" value="{1}"/>
			<map:parameter name="collection" value="{2}"/>
  			<map:generate type="i-xrfc-sql" src="{../3}"/>
  			<map:transform type="web3-rfc">
  				<map:parameter name="system" value="{backend}"/>
	  			<map:parameter name="producer" value="{producer}"/>
    			</map:transform>
	    		<map:transform src="{transformer}"/>
    			<map:serialize type="xml"/>
		</map:act>
	</map:match>
</map:pipeline>

Finally the result from this pipeline goes back to the database, some
additional jobs can be done (e-Mailing, etc.).

My current solution is to use a new http-request to instantiate the second
pipeline (http://localhost:port/i-post-XRFC/*/*/*). This is a FAIK yes. And
since i like to make the pipelines internal only i'm thinking about setting
up a background environment for this task to get some source-resolver to do
the work (cocoon://i-pos-XFRC/*/*/*).

At this point i'm sticking. i've read the C2 sources but do yet not
understand
all causally connections:(

- Michael


---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org


Mime
View raw message