<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>Inside scoop on Oracle SOA Suite, BPM and EDA</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/" />
   <link rel="self" type="application/atom+xml" href="http://blogs.oracle.com/soabpm/xml/rss.xml" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037</id>
   <updated>2009-11-17T06:45:56Z</updated>
   <subtitle>Tips and tricks straight from the SOA / BPM development team at Oracle HQ</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type Enterprise 4.23-en</generator>


<entry>
   <title>SCA Spring C&amp;I component - a small tutorial ..</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/11/sca_spring_ci_component_-_a_sm.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.15598</id>
   
   <published>2009-11-17T06:38:51Z</published>
   <updated>2009-11-17T06:45:56Z</updated>
   
   <summary>This is the &quot;follow up&quot; post from Preview feature: SCA Spring C&amp;I support, this time with a tutorial. You can find it at http://www.oracle.com/technology/products/soa/soasuite/demos/scalight/springcomponentbasedemo.html Enjoy. I am curious about your comments &amp; ideas for enhancements....</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11.1.1.2.0 (PS1)" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="soasuite" label="soa suite" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="spring" label="spring" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>This is the "follow up" post from <a href="http://blogs.oracle.com/soabpm/2009/11/preview_feature_sca_spring_ci.html"><strong>Preview feature: SCA Spring C&I support</strong></a>, this time with a tutorial.</p>

<p>You can find it at<br />
<a href="http://www.oracle.com/technology/products/soa/soasuite/demos/scalight/springcomponentbasedemo.html">http://www.oracle.com/technology/products/soa/soasuite/demos/scalight/springcomponentbasedemo.html</a></p>

<p>Enjoy. I am curious about your comments & ideas for enhancements.</p>]]>
      
   </content>
</entry>

<entry>
   <title>&quot;Inside the soa manifesto&quot; - podcast </title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/11/inside_the_soa_manifesto_-_pod.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.15573</id>
   
   <published>2009-11-14T08:51:07Z</published>
   <updated>2009-11-14T08:57:14Z</updated>
   
   <summary>Our Rob Rhubart from the Oracle Technology Network invited Dave Chappel and me to shed some light and insights from coming up with the manifesto. The first part of the podcast, can be found here. Read the whole story on...</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>Our Rob Rhubart from the Oracle Technology Network invited Dave Chappel and me to shed some light and insights from coming up with the manifesto. </p>

<p>The first part of the podcast, can be found <a href="http://streaming.oracle.com/ebn/podcasts/A2A/media/8290470_soa_manifesto_part_1_110409.mp3">here</a>.</p>

<p>Read the whole story on <a href="http://blogs.oracle.com/archbeat/2009/11/arch2arch_podcast_show_notes_i_2.html">Robert's archbeat</a></p>

<p>Enjoy </p>]]>
      
   </content>
</entry>

<entry>
   <title>PS1: JDeveloper SOA designer bug - hanging expression builder</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/11/ps1_jdeveloper_soa_designer_bu.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.15543</id>
   
   <published>2009-11-13T04:49:38Z</published>
   <updated>2009-11-13T04:54:16Z</updated>
   
   <summary>Unfortunately we have found a (meanwhile confirmed) bug, that manifests itself in completely blocking your jdeveloper UI due to a race condition between two threads). This happens if you use the expression builder inside a bpel process, and type a...</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>Unfortunately we have found a (meanwhile confirmed) bug, that manifests itself in completely blocking your jdeveloper UI due to a race condition between two threads).</p>

<p>This happens if you use the expression builder inside a bpel process, and type a part of an expression, and then use <strong>ctrl+space</strong> to complete it. Once you start filling in the needed info (e.g. partname), jdev will suddenly block (completely). </p>

<p>Bug 9099332 was filed for this. <br />
<strong>Workaround: </strong>in jdeveloper -> Tools / preferences / SOA -> uncheck <em>validate expression</em></p>]]>
      
   </content>
</entry>

<entry>
   <title>Preview feature: SCA Spring C&amp;I support</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/11/preview_feature_sca_spring_ci.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.15493</id>
   
   <published>2009-11-10T22:17:58Z</published>
   <updated>2009-11-10T22:46:34Z</updated>
   
   <summary>As part of the new release, we also added support for Spring components. The idea is to give the developer full Java support, and a powerful IOC container. Only thing needed, annotate your beans, and wire them on composite level....</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11.1.1.2.0 (PS1)" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="preview" label="preview" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="soasuite" label="soa suite" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="spring" label="spring" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>As part of the new release, we also added support for Spring components. </p>

<p>The idea is to give the developer full Java support, and a powerful IOC container. Only thing needed, annotate your beans, and wire them on composite level.</p>

<p>This presents a few interesting challenges, especially around xml -> java and back serialization. As most SOA Suite users know, most the things you can do, are based on xml, via WSDL (e.g. BPEL & Mediator). With the spring support we also added the notion of<em> &lt;interface.java></em> for binding.<strong>ejb </strong>and implementation.<strong>spring</strong></p>

<pre>
&lt;?xml version="1.0" encoding="windows-1252" ?>
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca">
       
  &lt;!--
    The below sca:service(s) corresponds to the services exposed by the 
    component type file: SpringPartnerSupplierMediator.componentType
  -->  
       
  &lt;sca:service name="IInternalPartnerSupplier"
        target="InternalPartnerSupplierMediator"
        type="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>

<p>  &lt;!-- the partner supplier mediator bean with the ejb -->               <br />
  &lt;bean id="InternalPartnerSupplierMediator" <br />
        class="com.otn.sample.fod.soa.internalsupplier.InternalSupplierMediator" <br />
        scope="prototype"><br />
        &lt;!-- inject the external partner supplier bean --><br />
        &lt;property name="externalPartnerSupplier" <br />
            ref="IExternalPartnerSupplierService"/><br />
        &lt;!-- inject the quoteWriter -->   <br />
        &lt;property name="quoteWriter" ref="WriteQuoteRequest"/><br />
  &lt;/bean>      </p>

<p>  &lt;!-- declare local reference, that are wired outside --><br />
  &lt;sca:reference name="IExternalPartnerSupplierService"<br />
        type="com.otn.sample.fod.soa.externalps.IExternalPartnerSupplierService"/></p>

<p>  &lt;sca:reference type="com.oracle.xmlns.Write_ptt"<br />
                 name="WriteQuoteRequest"/></p>

<p>&lt;/beans><br />
</pre></p>

<p>Here is how it looks like in the <strong>composite editor </strong></p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="11g_spring_component.jpg" src="http://blogs.oracle.com/soabpm/spring/11g_spring_component.jpg" width="629" height="385" class="mt-image-none" style="" /></span></p>

<p><strong>Note: </strong><br />
In order to get the spring designer, and component - go to $JDeveloper_HOME/integration/seed/soa/configuration and open soa-config.xml. Search for <em>${SPRING_COMPONENT_NAME_L}</em> and remove the xml comments (<strong>&lt;!-- --></strong>) around it. Restart JDeveloper :-).</p>

<p>Happy bean hunting .. I'll post a quick how-to shortly, trying to find space for my viewlet ..</p>]]>
      
   </content>
</entry>

<entry>
   <title>Oracle SOA Suite 11g R1 Patchset 1 (aka 11.1.1.2.0) has been released</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/11/oracle_soa_suite_11g_r1_patchs.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.15490</id>
   
   <published>2009-11-10T21:49:02Z</published>
   <updated>2009-11-10T22:17:46Z</updated>
   
   <summary>You can get it at http://www.oracle.com/technology/software/products/middleware/index.html Amongst many bug-, and performance-related fixes - we also added quite a few significant preview features (e.g resequencing, spring support, and others). Please note that the role of preview features is to elicit user...</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11.1.1.2.0 (PS1)" scheme="http://www.sixapart.com/ns/types#category" />
   
      <category term="soa suite" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="soasuite" label="soa suite" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>You can get it at <a href="http://www.oracle.com/technology/software/products/middleware/index.html">http://www.oracle.com/technology/software/products/middleware/index.html</a></p>

<p>Amongst many bug-, and performance-related fixes - we also added quite a few significant <strong>preview </strong>features (e.g resequencing, spring support, and others).</p>

<p>Please note that the role of preview features is to elicit user feedback on product directions. Preview features cannot be used in production and Oracle will not provide any support for them. In addition there is no commitment that a preview feature will ever get productized and supported in a later release.</p>

<p>However we will do our best to help via OTN SOA forums when people run into issues with those.</p>]]>
      
   </content>
</entry>

<entry>
   <title>Thoughts on the SOA Manifesto</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/10/thoughts_on_the_soa_manifesto.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.15201</id>
   
   <published>2009-10-26T00:20:50Z</published>
   <updated>2009-10-26T07:37:19Z</updated>
   
   <summary>During the 2nd international SOA Symposium in Rotterdam, I was invited to participate in a working group to define what would become known as the SOA Manifesto. Certainly a big honor to be part of this group, but with the...</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
   <category term="soa" label="SOA" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="manifesto" label="manifesto" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="thoughts" label="thoughts" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>During the 2nd international SOA Symposium in Rotterdam, I was invited to participate in a working group to define what would become known as the <strong>SOA Manifesto</strong>. Certainly a big honor to be part of this group, but with the little time we had - a lot work would lay ahead.</p>

<p>Reflecting on the last days - it was an experience, a lot of heated up discussions, extremely strong & powerful arguments, the 'fresh air breaks [Kudos Steve]', and what was most impressive, an immediate common understanding of what service orientation and SOA is about - the business, everything else is second.</p>

<p><em>On a side note</em>: All the people involved in this have spent massive amounts of time with customers, and helped implementing strategic, sustainable SOAs all over the world. Hence the last thing one can expect is to read terms like<em>ESB / one can buy SOA / and what not </em>in there. If you waited for that you will be disappointed. </p>

<p>The whole manifesto can be found at <a href="http://www.soa-manifesto.org/">http://www.soa-manifesto.org/</a>.</p>

<p>Here is the value system we came up with, which stands at the center of our beliefs when it comes to SOA.</p>

<p><strong>Business value </strong>over technical strategy<br />
<strong>Strategic goals</strong> over project-specific benefits<br />
<strong>Intrinsic interoperability</strong> over custom integration<br />
<strong>Shared services</strong> over specific-purpose implementations<br />
<strong>Flexibility </strong>over optimization<br />
<strong>Evolutionary refinement </strong>over pursuit of initial perfection</p>

<p>That is, while we <em>value the items on the right, </em>we <strong>value the items on the left more</strong>.</p>

<p>I plan to add commentary over time, but here is the first set. </p>

<p>a) <strong>Generating sustainable business value</strong>: The notion of service is derived from capability, which should be directly linkable to a business requirement. Implementing fancy technology is cool, and solid technical strategy important. But if one stands against the other, pick what generates business <strong>value</strong></p>

<p>b) <strong>Strategic goals</strong>: While for many initiatives a quick win is key to get them started, commonly referred to as guerrilla SOA - we should never loose the focus on the strategy and the long term goals set to make it happen. A tactical quick win results way to often in throw away code. </p>

<p>c) <strong>Intrinsic interoperability</strong>: I remember Anne and me having interesting arguments over this one, likely English not being my mother tongue helped this. The key is to create services that allow for integration by their very nature. This can be accomplished through exposed protocols that everyone can understand, yet driven much further by a common data format. At that point reassembling does not require changes to the underlying communication architecture, and only new services are added.</p>

<p>d) <strong>Shared services</strong>: While we value (custom) specific purpose implementation, the creation of shared (that is [re]usable) services takes precedence. We know that this is a journey, and it introduces a need for governance, service ownership and a thought through concept of versioning. </p>

<p>e) <strong>Flexibility</strong>: While we value the need and push for optimization, flexibility comes first, but is a carefully weighted trade-off. With loose-coupling on the implementation / communication protocols - speed in fact might go down, while the ability to recompose / switch implementation will go up.</p>

<p>f) <strong>Evolutionary refinement </strong>: Two many people strive for initial perfection, very much waterfall centric rather than allowing for continuous refinement. This value compared with adapting / refining based on real world usage is targeted towards start small (yet wisely) rather than with a big bang.</p>

<p>Now what do these values mean for you? They, including the guiding principles, should help you to make the hard decisions and serve as reminder, guiding path throughout the implementation.</p>

<p>Stefan has added a much longer list of thoughts and commentary, which you can read <a href="http://www.innoq.com/blog/st/2009/10/comments_on_the_soa_manifesto.html">here</a>.</p>

<p>We look forward to comments and thoughts. If you want to become a signatory, you can do this <a href="http://www.soa-manifesto.org/index.php/soamanifesto/sign">here</a>.</p>]]>
      
   </content>
</entry>

<entry>
   <title>Getting started with Oracle SOA Suite 11g - a review..</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/10/getting_started_with_oracle_so.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.15073</id>
   
   <published>2009-10-16T16:43:41Z</published>
   <updated>2009-10-16T16:47:48Z</updated>
   
   <summary>Lately a few folks from our team have published an edited version of the internal SOA Suite 11g foundation training which was rolled out all over the world, in more than 30 locations, and covers the major pieces and technologies...</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>Lately a few folks from our team have published an edited version of the internal SOA Suite 11g foundation training which was rolled out all over the world, in more than 30 locations, and covers the major pieces and technologies we are shipping as a unified platform.</p>

<p><a href="http://www.packtpub.com/getting-started-with-oracle-soa-suite-11g-r1/book">http://www.packtpub.com/getting-started-with-oracle-soa-suite-11g-r1/book</a></p>

<p>Heidi and her team have done a tremendous job to structure the labs and hands-on exercises in a didactic, explanatory way - with solutions all the way through. This way the book serves not just as a tutorial, but also as a reference bible when it comes to implementation of specific features and concepts. </p>

<p>Certainly worth reading.</p>]]>
      
   </content>
</entry>

<entry>
   <title>OOW 2009 - review ..</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/10/oow_2009_-_review.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.15055</id>
   
   <published>2009-10-15T17:36:04Z</published>
   <updated>2009-10-15T17:44:35Z</updated>
   
   <summary>After four days (and nights) of Open World, talking, demoing and talking more - it&apos;s the first day back at the office, and time for a resume. Of all the sessions I did this year with various colleagues the one...</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11gR1 (11.1.1.0)" scheme="http://www.sixapart.com/ns/types#category" />
   
      <category term="soa suite" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>After four days (and nights) of Open World, talking, demoing and talking more - it's the first day back at the office, and time for a resume.</p>

<p>Of all the sessions I did this year with various colleagues the one I enjoyed most was the talk about SOA Suite 11g's architecture together with Greg, who heads our SOA engineering teams. </p>

<p>In case you missed it, two ACE directors (Hajo and Torsten) blogged about it<br />
<a href="http://torstenwinterberg.blogspot.com/2009/10/oow-2009-oracle-soa-suite-11g.html">here</a> and <a href="http://hajonormann.wordpress.com/2009/10/13/oow-soa-gems-sca-is-the-j2ee-of-soa/">here</a>.</p>

<p>In case you missed us at the demo grounds, or questions are still not answered, just post them here, I promise fast help.</p>]]>
      
   </content>
</entry>

<entry>
   <title>Oracle Open World 2009 - Meet the SOA team ..</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/10/oracle_open_world_2009_-_meet.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.14893</id>
   
   <published>2009-10-11T01:33:31Z</published>
   <updated>2009-10-11T01:53:39Z</updated>
   
   <summary>More products, more demos, more wows, more everything - welcome to Open World 2009. The SOA team will be all around, for example at the demo pods (2628) - where you can meet Product Management and Engineering. doing hands on...</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11gR1 (11.1.1.0)" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="openworld2009" label="Open World 2009" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>More products, more demos, more wows, more everything - welcome to Open World 2009.</p>

<p>The <strong>SOA team </strong>will be all around, for example<br />
<ul><br />
	<li>at the demo pods (2628) - where you can meet Product Management and Engineering.</li><br />
	<li>doing hands on labs (S311683, HOL: Build, Test, and Manage your own Oracle SOA Suite 11g composite application) - where you can discover the power of the platform yourself</li><br />
	<li>and in many focused sessions</li><br />
</ul></p>

<p>Personally I'll do four sessions together with fellow colleagues (from engineering, pm and the famous A-Team), and will be around at the demo pod</p>

<ul>
	<li><strong>S308034, An Architect's View of the New Features of Oracle SOA Suite 11g Release 1</strong>, 12-OCT-09, 10:15-11:15 Hilton Hotel Imperial Ballroom B;<br>Greg Pavlik and me will talk about underlying concepts of the 11g SOA platform, power user features highlight advanced techniques, and an outlook of where we want to go with the platform</li>
        <li><strong>S309684, Monitoring, Administering, and Troubleshooting Oracle SOA Suite 11g</strong>, 12-OCT-09, 14:30 - 15:30 Hilton Hotel Yosemite A, <br> Most popular over the last years have the troubleshooting sessions bean, and this year it's back with 11g - Samrat, performance / HA guru (formerly BEA), Deepak from the A-Team and me will walk you through the nitty gritty details, explain threading models, and showcase the most important tuning knobs for SOA Suite</li>
	<li><strong>S309408, Best Practices for the BAM-BPEL Sensor Framework in Oracle SOA Suite</strong>, 12-OCT-09, 16:00-17:00 Hilton Hotel Yosemite A;<br>Payal Srivastava from our team and me will talk about best practices and new features when it comes to SOA / BAM integration, and Ned from Ross, will tell the story of what Ross Stores did with BAM</li>
	<li><strong>S308618, The Service-Result-Cache Pattern: Using a Data Grid in the SOA Tier</strong>, 13-OCT-09, 14:30-15:30 Hilton Hotel  Yosemite A; <br>Our famous David Chappell, and me will talk about Service result caching, what it is, and what you can do with it - and lastly, where you find it in the platform. Not to forget, a very compelling use-case of SRC told by one of our customers</li>
</ul>

<p>If you want to search for all the soa sessions - go to <a href="http://www.eventreg.com/cc221_new/newCatalog.jsp">http://www.eventreg.com/cc221_new/newCatalog.jsp</a> and put SOA as tag.</p>

<p>If you are around, come by and say hello.. </p>]]>
      
   </content>
</entry>

<entry>
   <title><![CDATA[SOA Suite 11g - Transaction(s) & boundaries; Part Two]]></title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/08/soa_suite_11g_-_transactions_b_1.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.13976</id>
   
   <published>2009-08-24T16:10:55Z</published>
   <updated>2009-08-24T16:32:19Z</updated>
   
   <summary><![CDATA[Here is the second post - this time on one-way invocations: Usually a one way invocation (with a possible callback) is exposed in a wsdl as below &lt;wsdl:operation name="process"> &lt;wsdl:input message="client:OrderProcessorRequestMessage"/> &lt;/wsdl:operation> This will cause the bpel engine to split...]]></summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11gR1 (11.1.1.0)" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="11g" label="11g" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="soasuite" label="soa suite" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="transactions" label="transactions" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>Here is the second post - this time on one-way invocations:</p>

<p>Usually a one way invocation (with a possible callback) is exposed in a wsdl as below<br />
<pre><br />
    &lt;wsdl:operation name="process"><br />
        &lt;wsdl:input message="client:OrderProcessorRequestMessage"/><br />
    &lt;/wsdl:operation><br />
</pre></p>

<p>This will cause the bpel engine to split the execution into <strong>two</strong> parts. First, and always inside the caller transaction, the insert into the dlv_message table (in 10.1.3.x that is into the inv_message), and secondly the transaction & new thread that executes the workitems, and creates a new instance.</p>

<p>This has several advantages in terms of scalability - because the engine's threadpool (invoker threads) will execute when a thread is available. However, the disadvantage is that there is no guarantee that it will execute immediately. </p>

<p>If one needs to have a sync-type call based on a one way operation - then they can use <strong>onewayDeliveryPolicy</strong>, which is a forward port of <em>deliveryPersistPolicy</em> in 10.1.3. </p>

<p>This property can be set by specifying <strong>bpel.config.oneWayDeliveryPolicy</strong> in a bpel component of composite.xml. Possible values are "async.persist", "async.cache" and "sync". If this value is not set in composite.xml, engine uses the oneWayDeliveryPolicy setting in bpel-config.xml</p>

<p><strong>async.persist</strong> => persist in the db<br />
<strong>async.cache</strong> => store in an in-memory hashmap<br />
<strong>sync</strong> => direct invocation on the same thread</p>

<p>Below is the matrix based on the usecase described in my last post (<a href="http://blogs.oracle.com/soabpm/2009/08/soa_suite_11g_-_transactions_b.html">here</a>).</p>

<p><em>onewayDeliveryPolicy!=sync</em> (default, callee runs in separate thread/treansation)</p>

<p>throw any fault<br />
	caller doesn't get response because message is saved in delivery service. The callee's transaction will rollback if the fault is not handled. 	</p>

<p>throw bpelx:rollback<br />
	caller doesn't get response because message is saved in delivery service. It will rollback on unhandled fault. </p>

<p>-------<br />
<em>onewayDeliveryPolicy=sync, txn=requriesNew </em>(callee runs in the same thread, but different transaction)</p>

<p>throw any fault<br />
	caller gets FabricInvocationException. Callee transaction rolls back if the fault is not handled. 	</p>

<p>throw bpelx:rollback<br />
	caller gets  FabricInvocationException. Callee transaction rolls back.</p>

<p>-------<br />
<em>onewayDeliveryPolicy=sync, txn=required </em>(callee runs in the same thread and the same transaction)</p>

<p>throw any fault<br />
	Callee faulted. Caller gets FabricInvocationException. Caller has a chance to handle the fault. </p>

<p>throw bpelx:rollback<br />
	whole transaction rollback. </p>]]>
      
   </content>
</entry>

<entry>
   <title><![CDATA[SOA Suite 11g - Transaction(s) & boundaries; Part One]]></title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/08/soa_suite_11g_-_transactions_b.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.13713</id>
   
   <published>2009-08-10T19:08:26Z</published>
   <updated>2009-08-12T23:51:07Z</updated>
   
   <summary>As we added new/updated components I figured it&apos;d be wise to post a little bit about transaction semantics in 11g - and how they can be used to leverage the underlying JTA infrastructure that is backing the execution of components....</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11gR1 (11.1.1.0)" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>As we added new/updated components I figured it'd be wise to post a little bit about <strong>transaction semantics</strong> in 11g - and how they can be used to leverage the underlying JTA infrastructure that is backing the execution of components.</p>

<p>a) <strong>Mediator</strong>: <br />
On the inbound side, when mediator is invoked via binding.ws it will create an manage a new transaction, otherwise (e.g. if invoked through an adapter it will inherit the existing transaction)</p>

<p>In more generic terms: <br />
If a transaction is <em>present</em>, Mediator participates in that <em>existing </em>transaction.  If transaction is <em>not </em>present, Mediator <em>starts </em>the transaction</p>

<p>In case of sync (aka <em>sequential</em>)  routing rules, they will be all executed in the same transaction, and if an error occurs, a rollback will be issued. <br />
<strong>Note:</strong> in this case even a fault policy that is configured against a mediator fault will <strong>NOT</strong> trigger.</p>

<p>In case of async routing rules, each rule will be executed in a new transaction, and if errors occur, a rollback will happen, and a fault policy can be configured to react to it.</p>

<p>b) <strong>BPEL</strong>:<br />
By default (as in previous releases) BPEL will create a new transaction on request basis - that is if one already exists, it will be suspended, and a new one created. Upon completion of the child, the master one resumes.  <br />
However, if the request is <strong>async (that is one-way)</strong> we either inherit the transaction for the insert into the dehydration store (that is dlv_message in this case) or if one exists enlist transparently into it. So we guarantee you zero message loss. Either the invocation message is in the dehydration store, to be processed, or otherwise the consumer is notified via a fault.</p>

<p>In 10.1.3 we had a couple of flags that one could set on the consuming process (that is the partnerlink) as well as on the providing one, to chain an execution into a single global transaction. Namely, on the consumer side, one had to set <strong>transaction=participate</strong> on the partnerlink binding in bpel.xml, and on the providing side <strong>transaction=participate</strong> in the &lt;configurations> section of bpel.xml.<br />
In 11g BPEL - we adopted a more j(2)ee alike concept - and one only needs to set the (new) transaction flag on the cal<strong>ee</strong> bpel component. This can be done in the composite editor's source by adding <strong>bpel.config.transaction</strong> into a bpel component - as shown below<br />
<pre><br />
  &lt;component name="InternalWarehouseService"><br />
    &lt;implementation.bpel src="InternalWarehouseService.bpel"/><br />
    &lt;property name="bpel.config.transaction" <br />
         many="false" type="xs:string"><strong>required</strong> | <strong>requiresNew</strong>&lt;/property><br />
  &lt;/component><br />
</pre><br />
The two possible values are required, which makes BPEL inherit the tx that is already there, or if not creating a new one (<em>required</em>), or suspending one if exists, and ALWAYS create a new one (<em>requiresNew</em>).</p>

<p>What are the implications of setting the above (the default is <em>requiresNew</em>)?</p>

<p><strong>Case one</strong> - BPELCaller calls BPELCallee (the latter has <em>requiresNew</em> set)<br />
a) BPELCallee replies (that is uses &lt;reply>) with a fault: BPELCallee transaction is saved, BPELCaller get's the fault and can catch it<br />
b) BPELCallee throws (that is uses &lt;throw>) a fault, that is NOT handled: BPELCallee tx get's rolled back, BPELCaller get's the fault and can catch it<br />
c) BPELCallee replies back with a fault (FaultOne), and then throws a fault (FaultTwo): BPELCallee tx get's rolled back, and BPELCaller get's FaultOne<br />
d) BPELCallee throws (that is uses &lt;throw>) a <strong>bpelx:rollback</strong> fault:  BPELCallee tx get's rolled back, BPELCaller get's a remote fault</p>

<p><strong>Case two</strong> - BPELCaller calls BPELCallee (the latter has <em>required</em> set)<br />
a) BPELCallee replies (that is uses &lt;reply>) with a fault: BPELCaller get's the fault and can catch it, BPELCaller owns the transaction - hence if he catches it - tx is committed, if BPELCaller does not handle it - global rollback.<br />
b) BPELCallee throws (that is uses &lt;throw>) a fault BPELCaller get's the fault and can catch it<br />
c) BPELCallee replies back with a fault (FaultOne), and then throws a fault (FaultTwo): BPELCaller get's FaultOne<br />
d) BPELCallee throws (that is uses &lt;throw>) a <strong>bpelx:rollback</strong> fault:  BPELCaller tx get's rolled back, no way to catch it.</p>

<p>So with the above in place - one thing that I usually have people try when they are in my 11g courses is to create two processes (BPELMaster and BPELChild), both sync, each using the same db adapter reference that inserts the same record (and hence causes a PK violation). (And of course has set xADatasourceName)</p>

<p>So what happens in the default (that is without <em>bpel.config.transaction</em> property set). Once the fault occurs, and is not handled - the BPELChild will rollback. If the BPELMaster has a catch block his transaction will commit, so you end up with the record from the Master in the db.</p>

<p>If you don't catch the fault in the master as well - you get a second rollback - two different transactions though :-) </p>

<p>The second exercise is to set the <em>bpel.config.transaction</em> to <em>required</em>, and run the testcase again. If no fault handlers are in place - the whole tx will rollback, based on the BPELMaster's unhandled fault. </p>

<p>Now add a fault handler in the BPELMaster to catch the Fault from the BPELClient - and throw up a rollback fault. Globally the tx will rollback as well. </p>

<p>With this in place - you can really control transaction boundaries and model end2end transactional flows (if your source / targets are transactional as well of course)</p>]]>
      
   </content>
</entry>

<entry>
   <title>SOA Suite 11g - api part 3 - finding instances through composite sensor values</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/08/soa_suite_11g_-_api_part_3_-_f.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.13702</id>
   
   <published>2009-08-08T21:56:08Z</published>
   <updated>2009-08-08T22:06:15Z</updated>
   
   <summary>In the first two parts of the &quot;API&quot;-mini-story, I have shown how to use the API to find composites, display component states, invoke services and lastly find them back via CompositeInstanceFilter. Another way of finding instances (just by UUID, that...</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11gR1 (11.1.1.0)" scheme="http://www.sixapart.com/ns/types#category" />
   
      <category term="soa suite" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="11g" label="11g" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="api" label="api" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="compositesensors" label="composite sensors" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>In the first two parts of the "API"-mini-story, I have shown how to use the API to find composites, display component states, invoke services and lastly find them back via CompositeInstanceFilter. </p>

<p>Another way of finding instances (just by UUID, that is conversation ID) is by querying composite sensor values - the guys that I talked about in <a href="http://blogs.oracle.com/soabpm/2009/07/two_new_features_in_soa_suite.html">this entry</a>. </p>

<p>One of the sensors we declared was on the inbound service operation for BamOrderBookingComposite, and after firing yielded the following information:<br />
 -> Sensor: <strong>OrderProcessingStart</strong> data: <strong>Order 900</strong>. </p>

<p>So how to query by this info with the API? Create a sensor filter, set it on the composite instance filter, and use the good old Locator api.<br />
<pre><br />
        List <SensorFilter> sFilterList = new ArrayList <SensorFilter>();<br />
        SensorFilter sFilter = <br />
            new <strong>SensorFilter</strong>("OrderProcessingStart" /* <strong>sensorname </strong>*/,<br />
                             Sensor.SensorDataType.STRING /* <strong>type </strong>*/,<br />
                             Operator.EQUALS /* <strong>operator for comparison</strong> */,<br />
                             "<strong>Order 900</strong>");<br />
            sFilterList.add(sFilter);<br />
            <br />
        filter = new CompositeInstanceFilter();<br />
            <strong>filter.setSensorFilter(sFilterList);</strong><br />
            filter.setCompositeDN(getOrderBookingCompositeUri(null));<br />
            <br />
        obInstances = findCompositeLoc.getCompositeInstances(filter);<br />
        // we should find one instance<br />
        boolean foundInstance = false;<br />
        for (CompositeInstance instance : obInstances) <br />
        {<br />
            if (instance.getConversationId().equals(uuid))<br />
            {<br />
                foundInstance = true;<br />
                break;   <br />
            }    <br />
        }<br />
        if (!foundInstance)<br />
            throw new Exception ("Could not find composite instance with id: " + <br />
                                    uuid + " and sensorfilter: " + sFilter);            <br />
</pre></p>

<p><br />
</p>]]>
      
   </content>
</entry>

<entry>
   <title>SOA Suite 11g - api tricks part 2 - finding instances</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/07/soa_suite_11g_api_tricks_part.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.13575</id>
   
   <published>2009-07-30T19:34:32Z</published>
   <updated>2009-07-30T20:48:16Z</updated>
   
   <summary>In the last post we learned how to use the Locator to find a Composite (locator.lookupComposite(compositeDN);), and invoke it through a DeliveryService. The next step is to use the API to find its instances and get some meaningful information, e.g....</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11gR1 (11.1.1.0)" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="11g" label="11g" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="api" label="api" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="soasuite" label="soa suite" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>In the last post we learned how to use the <em>Locator </em>to find a <em>Composite (locator.lookupComposite(compositeDN);)</em>, and invoke it through a <em>DeliveryService</em>.</p>

<p>The next step is to use the API to find its instances and get some meaningful information, e.g. its instance id - what components executed and what not.<br />
<pre><br />
        Composite composite = <br />
                locator.lookupComposite("default/OrderBookingComposite!1.0");<br />
        /*<br />
         * retrieve instances, we are already on a composite, no need to set the<br />
         * DN<br />
         */<br />
        CompositeInstanceFilter filter = new CompositeInstanceFilter();<br />
            filter.setMinCreationDate(<br />
                new java.util.Date((System.currentTimeMillis() - 20000)));</p>

<p>        // get composite instances by filter ..<br />
        List <CompositeInstance> obInstances = composite.getInstances(filter);<br />
        <br />
        // for each of the returned composite instances..<br />
        for (CompositeInstance instance : obInstances) <br />
        {<br />
            System.out.println(" DN: " + instance.getCompositeDN() +<br />
                               "Instance: " + instance.getId() + <br />
                               " creation-date: " + instance.getCreationDate() +<br />
                               " state (" + instance.getState() + "): " +<br />
                               getStateAsString(instance.getState()));<br />
            <br />
            // setup a component filter    <br />
            ComponentInstanceFilter cInstanceFilter =<br />
                new ComponentInstanceFilter ();<br />
            <br />
            // get child component instances ..<br />
            List <ComponentInstance> childComponentInstances = <br />
                instance.getChildComponentInstances(cInstanceFilter);</p>

<p>            // for each child component instance (e.g. a bpel process)<br />
            for (ComponentInstance cInstance : childComponentInstances) <br />
            {<br />
                System.out.println("  -> componentinstance: " + <br />
                                   cInstance.getComponentName() + " type: " + <br />
                                   cInstance.getServiceEngine().getEngineType()+<br />
                                   " state: " + <br />
                                   getStateAsString(cInstance.getState()));<br />
            }</p>

<p>            // retrieve composite sensors<br />
            List <SensorData> sensorData = instance.getSensorData();<br />
            for (SensorData data : sensorData) <br />
            {<br />
                System.out.println(" -> Sensor: " +  data.getSensor().getName() + <br />
                                   " data: " + data.getData());<br />
            }<br />
        }<br />
</pre><br />
To make the compo(site/nent)  states readable - here is the conversion method:<br />
<pre><br />
    private String getStateAsString (int state) <br />
    {<br />
        // note that this is dependent on wheter the composite state is <br />
        // captured or not<br />
        if (state == CompositeInstance.STATE_COMPLETED_SUCCESSFULLY)<br />
            return ("success");<br />
        else if (state == CompositeInstance.STATE_FAULTED)<br />
            return ("faulted");<br />
        else if (state == CompositeInstance.STATE_RECOVERY_REQUIRED)<br />
            return ("recovery required");<br />
        else if (state == CompositeInstance.STATE_RUNNING)<br />
            return ("running");<br />
        else if (state == CompositeInstance.STATE_STALE)<br />
            return ("stale");<br />
        else <br />
            return ("unknown");<br />
    }<br />
</pre><br />
The above code executed against the FusionOrderDemo BamOrderBookingComposite prints the following:<br />
<pre><br />
 DN: default/BamOrderBookingComposite!1.0Instance: 40103 creation-date: Thu Jul 30 12:31:24 PDT 2009 state (-1): unknown<br />
  -> componentinstance: EvaluatePreferredSupplierRule type: decision state: success<br />
  -> componentinstance: FulfillOrder type: mediator state: success<br />
  -> componentinstance: InternalWarehouseService type: bpel state: unknown<br />
  -> componentinstance: OrderProcessor type: bpel state: unknown<br />
  -> componentinstance: RequiresApprovalRule type: decision state: success<br />
  -> componentinstance: PartnerSupplierMediator type: mediator state: success<br />
 -> Sensor: CreditCardAuthResultSensor data: APPROVED<br />
 -> Sensor: OrderBookingCompositeProcessorResult data: 900<br />
 -> Sensor: OrderProcessingStart data: Order 900<br />
</pre><br />
On a side note - in case you don't want to start searching for the APIs, and packages .. All of those classes used are in <br />
<pre><br />
    oracle.fabric.common.*, oracle.soa.management.facade.* and <br />
    oracle.soa.management.util.*<br />
</pre></p>]]>
      
   </content>
</entry>

<entry>
   <title>Using the new 11g SOA Suite API - changes to 10.1.3x</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/07/using_the_new_11g_soa_suite_ap.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.13573</id>
   
   <published>2009-07-30T18:20:57Z</published>
   <updated>2009-08-19T01:54:29Z</updated>
   
   <summary>With 11g and the new SCA composite support our API has been revamped a little as well. The Locator is still available and is created against WL jndi properties Hashtable jndiProps = new Hashtable(); jndiProps.put(Context.PROVIDER_URL, &quot;t3://&quot; + props.get(STR_MGDSERVER_HOST_KEY) + &quot;:&quot;...</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11gR1 (11.1.1.0)" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="11g" label="11g" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="api" label="api" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="soasuite" label="soa suite" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>With 11g and the new SCA composite support our API has been revamped a little as well.</p>

<p>The <strong>Locator </strong> is still available and is created against WL jndi properties<br />
<pre><br />
        Hashtable jndiProps = new Hashtable();<br />
        jndiProps.put(Context.PROVIDER_URL,<br />
                      "t3://" + props.get(STR_MGDSERVER_HOST_KEY) + ":" + <br />
                      props.get(STR_MGDSERVER_PORT_KEY) + "/soa-infra");<br />
        <br />
        jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, STR_WL_CTX);<br />
        jndiProps.put(Context.SECURITY_PRINCIPAL, <br />
                      props.get(STR_USER_KEY));<br />
        jndiProps.put(Context.SECURITY_CREDENTIALS, <br />
                      props.get(STR_PASSWORD_KEY));<br />
        jndiProps.put("dedicated.connection", "true");<br />
        <br />
        System.out.println("Creating locator with properties: " + jndiProps);<br />
        <br />
        return <em>LocatorFactory.createLocator(jndiProps);</em><br />
</pre><br />
Finding your composite..<br />
<pre><br />
        Composite composite = <em>locator.lookupComposite</em>(compositeDN);<br />
</pre><br />
The composite DN is based on <br />
<pre><br />
        &lt;domain name>/&lt;composite name>!&lt;version><br />
        e.g.: <em>default/OrderBookingComposite!1.0</em><br />
</pre><br />
And here is the difference to 10.1.3 - on a composite you can have multiple services defined - e.g.<br />
<pre><br />
  &lt;service name=<strong>"orderprocessor_client_ep</strong>"<br />
           ui:wsdlLocation="oramds:/apps/FusionOrderDemoShared/services/orderbooking/OrderBookingProcessor.wsdl"><br />
    &lt;interface.wsdl interface="http://www.globalcompany.example.com/ns/OrderBookingService#wsdl.interface(OrderProcessor)"/><br />
  &lt;/service><br />
  &lt;service name="<strong>UpdateOrderStatus_ep</strong>" ui:wsdlLocation="UpdateOrderStatus.wsdl"><br />
    &lt;interface.wsdl interface="http://xmlns.oracle.com/WebLogicFusionOrderDemo/OrderBookingComposite/UpdateOrderStatus#wsdl.interface(execute_ptt)"/><br />
  &lt;/service><br />
</pre><br />
So you need to find the appropriate service, to get a handle on the delivery service.<br />
<pre><br />
     Service deliveryService = <br />
             composite.getService("<strong>UpdateOrderStatus_ep</strong>");<br />
</pre><br />
If you don't read on, you will get a nullpointer now, because while we allowed you to create a delivery service in 10.1.3 on an exposed client partnerlink / service, in 11g - you need to add a specific binding, so the you can bind to the service via api. </p>

<p>The exception stack will reveal:</p>

<p>Caused by: java.lang.NullPointerException<br />
        at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)<br />
        at oracle.integration.platform.blocks.sdox.JavaEntryBindingComponent.invoke(JavaEntryBindingComponent.java:127)<br />
        at oracle.soa.management.internal.ejb.impl.FacadeFinderBeanImpl.executeServiceMethod(FacadeFinderBeanImpl.java:853)<br />
        ... 31 more</p>

<p>To avoid this you'll need to add a binding.adf entry into your composite's service, such as the below one.<br />
<pre><br />
  &lt;service name="<strong>UpdateOrderStatus_ep</strong>" ui:wsdlLocation="UpdateOrderStatus.wsdl"><br />
    &lt;interface.wsdl interface="http://xmlns.oracle.com/WebLogicFusionOrderDemo/OrderBookingComposite/UpdateOrderStatus#wsdl.interface(execute_ptt)"/><br />
      &lt;binding.<strong>adf </strong>serviceName="OrderProcessorService" registryName=""/><br />
  &lt;/service>     <br />
</pre><br />
From here on it's back to normal, create a normalized message, set the payload parts and use service.post / request.<br />
<pre><br />
        NormalizedMessage nm = new NormalizedMessageImpl();</p>

<p>        // create and set a conversation id - e.g. through the UUID class<br />
        String uuid = "uuid:" + UUID.randomUUID();<br />
        nm.addProperty(NormalizedMessage.PROPERTY_CONVERSATION_ID, uuid);<br />
        // get the payload off the normalized message and add an xml part<br />
        nm.getPayload().put(&lt;partName>, &lt;some xml>);<br />
</pre></p>]]>
      
   </content>
</entry>

<entry>
   <title>Mediator 11g new feature - echo to requestor</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/soabpm/2009/07/mediator_11g_new_feature_echo.html" />
   <id>tag:blogs.oracle.com,2009:/soabpm//2037.13572</id>
   
   <published>2009-07-30T18:11:33Z</published>
   <updated>2009-07-30T18:18:18Z</updated>
   
   <summary>As part of the new 11g SOA Suite and the mediator component we added a new feature around routing rules. In short the direct forward from the request operation back to the requester via response operation with transformation....</summary>
   <author>
      <name>clemens.utschig</name>
      
   </author>
   
      <category term="11gR1 (11.1.1.0)" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="11g" label="11g" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="soasuite" label="soa suite" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://blogs.oracle.com/soabpm/">
      <![CDATA[<p>As part of the new 11g SOA Suite and the mediator component we added a new feature around routing rules. In short the direct forward from the request operation back to the requester via response operation with transformation.</p>

<p><img alt="11g_mediator_echo.jpg" src="http://blogs.oracle.com/soabpm/11g_mediator_echo.jpg" width="667" height="440" /><br />
 </p>]]>
      
   </content>
</entry>

</feed>
