<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7332201040458294751</id><updated>2024-10-24T18:09:03.538+02:00</updated><category term="bpel"/><category term="oracle"/><category term="soa"/><category term="tdd"/><category term="testing"/><category term="10.1.3.4"/><category term="apache ode"/><category term="book"/><category term="bpm"/><category term="xpath"/><category term="bam"/><category term="bpel 2.0"/><category term="esb"/><category term="fault management"/><category term="jboss"/><category term="oracle 10g"/><category term="packt"/><category term="was"/><title type='text'>Raph&#39;s BPEL SOA Blog</title><subtitle type='html'>All subjects related to SOA (BPEL, ESB, WS)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-1153513019270538144</id><published>2011-03-06T23:28:00.002+01:00</published><updated>2011-03-06T23:39:12.091+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bam"/><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="bpel 2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="packt"/><category scheme="http://www.blogger.com/atom/ns#" term="soa"/><title type='text'>Some thoughts about the BPEL 2.0 Oracle SOA Suite 11g from PACKT publishing edition</title><content type='html'>&lt;div&gt;Hi everyone,&lt;/div&gt;&lt;div&gt;To sum up, the book is pretty well designed.&lt;/div&gt;&lt;div&gt;The ideas of synchronous and asynchronous processes are used, and I really like this approach (this is the one I always use in BPEL and WS trainings).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The entire first part is dedicated to the BPEL language basic concepts.&lt;/div&gt;&lt;div&gt;The next part is more focused on the JDeveloper aspect, and more generally, how to develop with the Oracle tool some BPEL processes (Composite applications).&lt;/div&gt;&lt;div&gt;Then we are going back to some advanced BPEL extention concepts.&lt;/div&gt;&lt;div&gt;After that, there are lots of parts about Oracle SOA suite tools (which I almost never use, apart Oracle BAM).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;1. First part &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;There is a good explaination and lots of details about the BPEL language (2.0 oriented).&lt;/div&gt;&lt;div&gt;Correlations, which is one of the hardest part of BPEL to understand is well explained also.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, there is not even a word about Custom XPath Function which I really like.&lt;/div&gt;&lt;div&gt;Then I&#39;m a bit disappointed regarding this last point since Custom XPath are really really a good thing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;2. Second part&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;About JDeveloper, so a bit boaring... but necessary when developping.&lt;/div&gt;&lt;div&gt;Anyway, this is a mandatory part.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good thing : He talks about Testing SOA composite applications (how to test BPEL process) ! Very good.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;3. Third part&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Toh ! This guy is talking about Java Embedded ! I cannot believe it.&lt;/div&gt;&lt;div&gt;This is the most awful thing I&#39;ve ever seen on BPEL ! (and this is only an Oracle BPEL extension).&lt;/div&gt;&lt;div&gt;He should have talked about Custom Xpath (which is equivalent in term of JTA transaction propagation).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;He gives an good overview about the Fault Policy Management framework(also called Error Hospital by Oracle employees).&lt;/div&gt;&lt;div&gt;But I think a Java Action example should have been written...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not even a word about the replay fault, which can be used outside of the Fault Policy Management...&lt;/div&gt;&lt;div&gt;See one of my previous blog post about this. So, a bit disappointed also.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;4. Last parts about Oracle SOA tools&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;I&#39;m not confortable enought with all those products to say anything about those parts.&lt;/div&gt;&lt;div&gt;And to be honest, I did not read those parts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;To conclude, I would say this book is alright if you don&#39;t know BPEL already, and if you want to dive inside the BPEL world (starting from BPEL 2.0).&lt;/div&gt;&lt;div&gt;Unfortunatly, there are some key points which are missing (from my point of view).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other solution is to come to send me an email, and buy a Zenika BPEL training (available on Oracle BPEL and Apache ODE) :)&lt;/div&gt;&lt;div&gt;I travel all around the world for BPEL and ESB trainings, so don&#39;t be shimed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Take care.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/1153513019270538144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/1153513019270538144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/1153513019270538144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/1153513019270538144'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2011/03/some-thoughts-about-bpel-20-oracle-soa.html' title='Some thoughts about the BPEL 2.0 Oracle SOA Suite 11g from PACKT publishing edition'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-3581937028903726514</id><published>2011-02-01T10:54:00.003+01:00</published><updated>2011-02-01T10:58:38.322+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="soa"/><title type='text'>Oracle SOA Suite 11g book review</title><content type='html'>I&#39;m currently doing a review for Packt Publishing.&lt;br /&gt;&lt;span class=&quot;u7&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://link.packtpub.com/rxKzJE&quot;&gt;WS-BPEL 2.0 for SOA Composite Applications with Oracle SOA Suite 11g&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I&#39;ll let you know guys about this book soon.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/3581937028903726514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/3581937028903726514' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3581937028903726514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3581937028903726514'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2011/02/oracle-soa-suite-11g-book-review.html' title='Oracle SOA Suite 11g book review'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-838612895936131634</id><published>2011-01-20T19:42:00.001+01:00</published><updated>2011-01-20T19:43:50.062+01:00</updated><title type='text'>WHAT&#39;S NEXT - ZENIKA</title><content type='html'>==&gt; &lt;a href=&quot;http://www.whatsnextparis.com&quot;&gt;http://www.whatsnextparis.com&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/838612895936131634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/838612895936131634' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/838612895936131634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/838612895936131634'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2011/01/whats-next-zenika.html' title='WHAT&#39;S NEXT - ZENIKA'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-5224151183148760915</id><published>2010-11-02T23:10:00.003+01:00</published><updated>2010-11-02T23:27:30.044+01:00</updated><title type='text'>ActiveMQ - Les wilcards</title><content type='html'>I&#39;ve discovered today an interesting new functionality on ActiveMQ.&lt;br /&gt;This is the &quot;Wildcards&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Consumer&lt;/span&gt;&lt;br /&gt;From a consumer point of view, it&#39;s possible thanks to some special characters to consume messages from several destinations (&lt;span style=&quot;font-style: italic;&quot;&gt;queues &lt;/span&gt;and &lt;span style=&quot;font-style: italic;&quot;&gt;topics&lt;/span&gt;) with only one consumer.&lt;br /&gt;&lt;br /&gt;ActiveMQ cuts the destination&#39;s name in elements. Those elements are delimited by a dot (.).&lt;br /&gt;For example, the below destinations have 3 elements :&lt;br /&gt;&lt;br /&gt; - queue.france.rennes&lt;br /&gt; - queue.france.paris&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are the special characters:&lt;br /&gt; - . used to separate elements&lt;br /&gt; - * used to match one element&lt;br /&gt; - &gt; used to match one or all trailing elements&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For example, to consume all message for France, we can use the below consumer&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;String brokerURI = ActiveMQConnectionFactory.DEFAULT_BROKER_URL;&lt;br /&gt;ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURI);&lt;br /&gt;Connection connection = connectionFactory.createConnection();&lt;br /&gt;connection.start();&lt;br /&gt;Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);&lt;br /&gt;Queue france = session.createQueue(&quot;*.france.*&quot;);&lt;br /&gt;MessageConsumer consumer = session.createConsumer(france);&lt;br /&gt;Message message = consumer.receive();&lt;/blockquote&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Queue france = session.createQueue(&quot;*.france.&gt;&quot;);&lt;/blockquote&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Producer&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;result_box&quot; class=&quot;short_text&quot; lang=&quot;en&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; title=&quot;&quot;&gt;Conversely&lt;/span&gt;&lt;/span&gt;, the messages producer can send one message to several destinations (then we talk about broadcast). This is &lt;span style=&quot;font-style: italic;&quot;&gt;n&lt;/span&gt; messages, stricly identicaly sent to&lt;span style=&quot;font-style: italic;&quot;&gt; n&lt;/span&gt; destinations.&lt;br /&gt;This avoids to create multiple producers for doing the same sending.&lt;br /&gt;&lt;br /&gt;We talk about composite destinations.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);&lt;br /&gt;Queue compositeDestination = session.createQueue(&quot;queue.france.rennes, queue.france.paris&quot;);&lt;br /&gt;MessageProducer producer = session.createProducer(compositeDestination);&lt;br /&gt;Message message = session.createStreamMessage() ;&lt;br /&gt;producer.send(message);&lt;/blockquote&gt;&lt;br /&gt;Notice : we have several independant messages with excalty the same content (header and body).&lt;br /&gt;Careful, a composite destination named &quot;queue.france.*&quot; will not send the messages to all the queues, but to a queue named &quot;queue.france.*&quot;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Conclusion&lt;/span&gt;&lt;br /&gt;ActiveMQ wilcards are very powerful with a very simple syntax and use.&lt;br /&gt;Careful, this is not JMS compliant at all, but 100% ActiveMQ specific.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Talk you later.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/5224151183148760915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/5224151183148760915' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/5224151183148760915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/5224151183148760915'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2010/11/activemq-les-wilcards.html' title='ActiveMQ - Les wilcards'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-3410331616257949540</id><published>2010-03-14T19:23:00.013+01:00</published><updated>2010-03-17T10:38:40.043+01:00</updated><title type='text'>Camel framework introduction  - Part 1</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;The  issue of systems integration&lt;/span&gt;&lt;br /&gt;In IT domain, we often have lots of heterogeneous systems which don&#39;t understand each other (different technologies, different communcation protocols, etc.).&lt;br /&gt;But this is required and this is a need to be able to link those systems together, because systems which are not connected to each other have limited interest.&lt;br /&gt;&lt;br /&gt;This raises many issues as data format, routes, monitoring, etc.&lt;br /&gt;For instance, how do we do to connect two applications, where the first one speak old school CSV file although the second one does only understand XML over JMS ?&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Entreprise Integration Patterns&lt;/span&gt;&lt;br /&gt;Apache Camel is an integration framework, which implements EIP (Entreprise Integration Pattern) defined by Gregor Hohpe &amp;amp; Bobby Woolf.&lt;br /&gt;EIP are integration patterns which enable us to resolv issues with proven solutions.&lt;br /&gt;Camel framework supports about 50 EIP&lt;span style=&quot;font-weight: bold;&quot;&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Endpoints&lt;/span&gt;&lt;br /&gt;Endpoints represent systems, physical ressources, virtual ressources, etc.&lt;br /&gt;For example, we have endpoints HTTP, JMS, FTP to interface with different protocols, but also endpoints Direct, Seda to be able to communicate into a same Camel context (we&#39;ll be back to this point).&lt;br /&gt;2 types of Endpoints :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;provider&lt;/li&gt;&lt;li&gt;consumer&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Examples&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Invoices directory: file://invoices/032010&lt;/li&gt;&lt;li&gt;Invoices JMS queue: jms://zenika/invoices&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Routes&lt;/span&gt;&lt;br /&gt;A route (path between 2 endpoints) can be very simple, or very complex as well (data transformation, multicast, messages filters, etc).&lt;br /&gt;Routes enable us to route messages from origin to destination.&lt;br /&gt;&lt;br /&gt;Camel can configure routes with 2 methods :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;XML XBean configuration&lt;/li&gt;&lt;li&gt;DSL using (Domain Specific Language)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;For example, this is a read of a file from a directory, then the write of this file into an other directory (very simple route) :&lt;br /&gt;XML Method&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;&lt;br /&gt; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;br /&gt; xsi:schemaLocation=&quot;http://www.springframework.org/schema/bean&lt;br /&gt;       http://www.springframework.org/schema/beans/spring-beans.xsd&lt;br /&gt;       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd&quot;&gt;&lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;lt;camelContext xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;&lt;br /&gt;  &amp;nbsp;&amp;nbsp;&amp;lt;route&gt;&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;from uri=&quot;file://C://invoices//in&quot; /&gt;&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;to uri=&quot;file://C://invoices//out&quot; /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;lt;/route&gt;&lt;br /&gt; &amp;nbsp;&amp;lt;/camelContext&gt;&lt;br /&gt;&amp;lt;/beans&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;DSL Method&lt;br /&gt;1. Java packages to scan listing (camel-context.xml file)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; schemalocation=&quot;http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd&quot;&gt;&lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;lt;camelcontext xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;lt;packagescan&gt;&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;package&gt;com.zenika.camel.routes&amp;lt;/package&gt;&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;lt;/packagescan&gt;&lt;br /&gt; &amp;nbsp;&amp;lt;/camelcontext&gt;&lt;br /&gt;&amp;lt;/beans&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;2. Routes coding&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;package com.zenika.camel.routes;&lt;br /&gt;&lt;br /&gt;import org.apache.camel.builder.RouteBuilder;&lt;br /&gt;&lt;br /&gt;public class InvoicesRoute extends RouteBuilder {&lt;br /&gt;&lt;br /&gt; &amp;nbsp;@Override&lt;br /&gt; &amp;nbsp;public void configure() throws Exception {&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;nbsp;from(&quot;file://C://invoices//in&quot;).to(&quot;file://C://invoices//out&quot;);&lt;br /&gt; &amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;DSL way is less verbose and simpler to maintain.&lt;br /&gt;You only have to define Java packages to be scanned, and have to code routes in Java with the DSL.&lt;br /&gt;&lt;br /&gt;This way is also type safe, and then much more secured than the XML way.&lt;br /&gt;Indeed, it&#39;s impossible to code an operation which is not supported (compilation error).&lt;br /&gt;&lt;br /&gt;Furthermore, all Camel syntax is fully supported in the XML way.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Camel context, heart of the framework&lt;/span&gt;&lt;br /&gt;In order to use our route, we need a Camel context.&lt;br /&gt;This context loads, configures and executes routes. This is the engine of the framework.&lt;br /&gt;The framework is not dedicated to be used in standalone mode (except for testing purpose).&lt;br /&gt;Camel must be used inside a container (ServiceMix, ActiveMQ, CXF or Tomcat).&lt;br /&gt;&lt;br /&gt;Here is a simple example to create the Camel context :&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;package com.zenika.camel.test;&lt;br /&gt;&lt;br /&gt;import org.apache.camel.CamelContext;&lt;br /&gt;import org.springframework.beans.factory.BeanFactory;&lt;br /&gt;import org.springframework.context.support.ClassPathXmlApplicationContext;&lt;br /&gt;&lt;br /&gt;public class Tester {&lt;br /&gt;&amp;nbsp;public static void main(String... args) throws Exception {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;BeanFactory beanFactory = new ClassPathXmlApplicationContext(&quot;classpath:/camel-context.xml&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;CamelContext camelContext = (CamelContext) beanFactory.getBean(&quot;camelContext&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;camelContext.start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;Thread.sleep(2000); // to have time to run the route&lt;br /&gt;&amp;nbsp;&amp;nbsp;camelContext.stop();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;With those few code lines, we have set up a route which copies all files from the invoices/in to the invoices/out directory.&lt;br /&gt;&lt;br /&gt;We&#39;ll see next time other endpoints (as the Direct), and routes more complex as well, with data transformation and routing logic.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/3410331616257949540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/3410331616257949540' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3410331616257949540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3410331616257949540'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2010/03/camel-framework-introduction-part-1.html' title='Camel framework introduction  - Part 1'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-3011852954069194041</id><published>2009-01-06T23:01:00.001+01:00</published><updated>2009-01-06T23:10:42.828+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="tdd"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Testing with Oracle BPEL - part 3</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;Introduction&lt;/span&gt;&lt;br /&gt;When you create a new BPEL process from JDeveloper, you always have an empty Test Suites folder in the Integration Content folder. This is where will be all the tests.&lt;br /&gt;&lt;br /&gt;Basic concepts :&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;test suite&lt;/span&gt; contains several tests (I recommend to have different test suite for each kind of tests you could have)&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;baseline &lt;/span&gt;is a common base for different tests. Each test can import a baseline to get a global behaviour (the create instance inbound message for example)&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;A simple process&lt;/span&gt;&lt;br /&gt;Let&#39;s create a very simple sync BPEL process (it just copies &#39;OK&#39; into the output variable). This process is called SimpleTest (source code available &lt;a href=&quot;http://sites.google.com/site/bpelsoablog/Home/SimpleTest.zip?attredirects=0&quot;&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_PPnKQxmfzmU/SWPHr7UM93I/AAAAAAAAAHU/9z6PvGIN5PA/s1600-h/simpleTest.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 285px; height: 400px;&quot; src=&quot;http://1.bp.blogspot.com/_PPnKQxmfzmU/SWPHr7UM93I/AAAAAAAAAHU/9z6PvGIN5PA/s400/simpleTest.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5288289944933824370&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;A simple test for a simple process&lt;/span&gt;&lt;br /&gt;Now we have our BPEL process, we want to test if our process replies &#39;OK&#39; or not.&lt;br /&gt;So just create a new test suite and then a new test.&lt;br /&gt;You should have a new designer/source window opened. This is the test editor.&lt;br /&gt;From there, you can emulate messages (inbound and outbound), add some asserts, etc.&lt;br /&gt;&lt;br /&gt;We only want to check if our simple process replies &#39;OK&#39;.&lt;br /&gt;&lt;br /&gt;1. Emulate the inbound message&lt;br /&gt;In each test, you must emulate the first inbound message (ie on the create instance invoke). This is a very common use for a baseline. Double click on the invoke activity &gt; Emulate tab&gt; Emulate message and then enter the content of the message.&lt;br /&gt;&lt;br /&gt;2. Add assert activities&lt;br /&gt;Then we are able to add assert activities on each BPEL activity which manipulates / transfers some variables (assign, invoke, receive, scope). Double click on our assign &gt; Asserts tab &gt; Create &gt; Value Assert :&lt;ul&gt;&lt;li&gt;browse the output variable and select the result element&lt;/li&gt;&lt;li&gt;Comparaison method : String (this is the type of your element)&lt;/li&gt;&lt;li&gt;Expected value : OK&lt;/li&gt;&lt;li&gt;Error message : process is corrupted&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fatal : uncheck the box ! (This is really important. If not and if the test failed, you cannot get the results. The box is checked by default)&lt;/li&gt;&lt;/ul&gt;You should have something like that (the emulation on the receive, and the assert on the assign) :&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_PPnKQxmfzmU/SWPNXJMccqI/AAAAAAAAAHc/cf4k9UFXzeU/s1600-h/simpleTestTest1.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 305px; height: 400px;&quot; src=&quot;http://2.bp.blogspot.com/_PPnKQxmfzmU/SWPNXJMccqI/AAAAAAAAAHc/cf4k9UFXzeU/s400/simpleTestTest1.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5288296184951894690&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Deploy the test&lt;br /&gt;The BPEL process must be already deployed in order to realize this step.&lt;br /&gt;In the deploy menu in JDev, you have the BPEL Process Deployer but also the BPEL Test Deployer. Select this test deployer, and check the test suite, your test and your BPEL server domain. And just deploy it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_PPnKQxmfzmU/SWPOfCTk8AI/AAAAAAAAAHk/7_7ynOB7H1k/s1600-h/testDeployer.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 400px; height: 205px;&quot; src=&quot;http://2.bp.blogspot.com/_PPnKQxmfzmU/SWPOfCTk8AI/AAAAAAAAAHk/7_7ynOB7H1k/s400/testDeployer.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5288297420053344258&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. Running the test&lt;br /&gt;The simplest way to run the test is throught the BPEL console.&lt;br /&gt;In all of the tabs that you have (manage, initiate, descriptor, WSDL, etc.) when you click on a BPEL process (not a BPEL instance), you also have the testsuites tab which is usefull to run tests &amp;amp; test suites. Just go in this tab and check your test suite with your test.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_PPnKQxmfzmU/SWPQM8UwFUI/AAAAAAAAAHs/Q-AO2N1VFMk/s1600-h/testsuitesConsoleRunner.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 400px; height: 161px;&quot; src=&quot;http://1.bp.blogspot.com/_PPnKQxmfzmU/SWPQM8UwFUI/AAAAAAAAAHs/Q-AO2N1VFMk/s400/testsuitesConsoleRunner.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5288299308233266498&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And execute tests !&lt;br /&gt;&lt;br /&gt;5. Reporting&lt;br /&gt;You now have a complete report of the state (passed or failed) of all your tests inside your different test suites.&lt;br /&gt;I particulary like the % of process coverage by the unit tests (like a cobertura report). To get a 100%, you must cover all the different paths in your BPEL process by tests (including catchs, onAlarms, etc.).&lt;br /&gt;You can even see the flow of the run BPEL testing instance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can modify your BPEL process and have a &#39;KO&#39; instead of the &#39;OK&#39;. You&#39;ll need to reploy your tests as well. You should get something like that :&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://1.bp.blogspot.com/_PPnKQxmfzmU/SWPS-1ncuZI/AAAAAAAAAH0/-kLUWB4itGs/s1600-h/resuts.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 400px; height: 189px;&quot; src=&quot;http://1.bp.blogspot.com/_PPnKQxmfzmU/SWPS-1ncuZI/AAAAAAAAAH0/-kLUWB4itGs/s400/resuts.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5288302364449356178&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Source code of tests &lt;a href=&quot;http://sites.google.com/site/bpelsoablog/Home/SimpleTest_with_tests.zip?attredirects=0&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Happy new year !&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/3011852954069194041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/3011852954069194041' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3011852954069194041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3011852954069194041'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/12/testing-with-oracle-bpel-part-3.html' title='Testing with Oracle BPEL - part 3'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_PPnKQxmfzmU/SWPHr7UM93I/AAAAAAAAAHU/9z6PvGIN5PA/s72-c/simpleTest.JPG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-28963207784231444</id><published>2008-12-03T23:52:00.002+01:00</published><updated>2008-12-03T23:58:41.669+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="10.1.3.4"/><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="jboss"/><category scheme="http://www.blogger.com/atom/ns#" term="was"/><title type='text'>10.1.3.4 on Jboss and Websphere</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;News&lt;/span&gt;&lt;br /&gt;The Oracle SOA Suite 10.1.3.4 on Jboss AS 4.0.5 and WebSphere Application Server 6.1.0.15 have just released since the 25 of November.&lt;br /&gt;Be carefull : the WAS version is now on 6.1.0.15 fixpack althought the JBoss version is still on 4.0.5.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;From Metalink&lt;/span&gt;&lt;br /&gt;I prefer give you the patch numbers since they are not easy to find ...&lt;br /&gt;WebSphere patchset&lt;br /&gt;SCRIPTS FOR SOA SUITE 10.1.3.4 PATCH FOR WEBSPHERE 6.1  #7566941&lt;br /&gt;&lt;br /&gt;JBoss patchset&lt;br /&gt;SOA SUITE 10.1.3.4 SCRIPTS FOR JBOSS 4.0.5 #7580739&lt;br /&gt;&lt;br /&gt;The install guides are inside the patchset.&lt;br /&gt;&lt;br /&gt;Enjoy.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/28963207784231444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/28963207784231444' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/28963207784231444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/28963207784231444'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/12/10134-on-jboss-and-websphere.html' title='10.1.3.4 on Jboss and Websphere'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-8777321542303470494</id><published>2008-12-03T01:49:00.022+01:00</published><updated>2009-01-07T22:37:23.447+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="tdd"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Testing with Oracle BPEL - part 2</title><content type='html'>The writing of BPEL tests is done in JDeveloper, in a window which is similar to the BPEL process design. The tests are not coded with BPEL language and are not a standard as BPEL.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;The testing language&lt;/span&gt;&lt;br /&gt;The test design can be done by the designer or directly by writing XML tags, which is not really convenient, but there are some testing functionnalities not supported by the designer. That&#39;s why I will explain the main tags and attributes and their functions right now.&lt;br /&gt;&lt;br /&gt;&lt;table style=&quot;text-align: left; width: 600px;&quot; border=&quot;1&quot; cellpadding=&quot;5&quot; cellspacing=&quot;1&quot;&gt;  &lt;tbody&gt;    &lt;tr&gt;      &lt;td style=&quot;background-color: rgb(192, 192, 192); font-weight: bold; text-align: center;&quot;&gt;XMLtags &amp;amp; attributs&lt;/td&gt;      &lt;td style=&quot;background-color: rgb(192, 192, 192); font-weight: bold; text-align: center;&quot;&gt;Function/ Description&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;BPELTest&amp;gt; &lt;/td&gt;      &lt;td&gt;Document root&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;initiate @operation&amp;gt;&lt;/td&gt;      &lt;td&gt;Specify the behaviour of the test process instanciationreferencing a WSDL operation&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;include&amp;gt;&lt;/td&gt;      &lt;td&gt;Include some other test (like a baseline)&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;inboundMessage&amp;gt;&lt;/td&gt;      &lt;td&gt;Specify the incoming message&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;emulate&amp;gt;&lt;/td&gt;      &lt;td&gt;Specify the activity is emulatedNotice : The &amp;lt;initiate&amp;gt; is always emulated&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;activityDriver @activity&amp;gt;&lt;/td&gt;      &lt;td&gt;Do an action on an BPEL activity&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;assertXML @variable,@part,@method&amp;gt;&lt;/td&gt;      &lt;td&gt;Assert the content of a XML variableaccording the method used (identical, similar)&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;assertActivityExecuted @activity&amp;gt;&lt;/td&gt;      &lt;td&gt;Assert the number an activity is executed&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;assertValue @var,@part,@method&amp;gt;&lt;/td&gt;      &lt;td&gt;Assert the content of a value variable (regexp, exactmatching)&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;triggerOnMessage @onMessageName&amp;gt;&lt;/td&gt;      &lt;td&gt;Allow to emulate an incoming message on onMessageactivity (pick or onMessage)&lt;/td&gt;    &lt;/tr&gt;    &lt;tr&gt;      &lt;td&gt;&amp;lt;triggerOnAlarm @onAlarmName&amp;gt;&lt;/td&gt;      &lt;td&gt;Allow to emulate and trigger onAlarm activity&lt;/td&gt;    &lt;/tr&gt;  &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The above list is not complete, but it contains the main tags you will deal with.&lt;br /&gt;&lt;br /&gt;Here is the hierachy in these tags :&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_PPnKQxmfzmU/STcHmXzxQhI/AAAAAAAAAHM/3tPymEEmw7Y/s1600-h/schemaBPELTest.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 314px; height: 400px;&quot; src=&quot;http://4.bp.blogspot.com/_PPnKQxmfzmU/STcHmXzxQhI/AAAAAAAAAHM/3tPymEEmw7Y/s400/schemaBPELTest.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5275693844295402002&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you want to have a overview of all the tags, you can consult the XML schema of the BPEL test language ($BPEL_HOME/bpel/system/xmllib/InstanceDriver.xsd)&lt;br /&gt;&lt;br /&gt;With all this stuff, we&#39;ll able to do :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;assert tests&lt;/li&gt;&lt;ul&gt;&lt;li&gt;XML variables asserts&lt;/li&gt;&lt;li&gt;values variables asserts&lt;/li&gt;&lt;li&gt;execution number asserts&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;emulation tests&lt;/li&gt;&lt;ul&gt;&lt;li&gt;incoming messages&lt;/li&gt;&lt;li&gt;invoke/receive/reply emulations (synchronous and asynchronous)&lt;/li&gt;&lt;li&gt;fault messages&lt;/li&gt;&lt;li&gt;on alarm triggers&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Okay, next time, we&#39;ll do our first BPEL test.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/8777321542303470494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/8777321542303470494' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/8777321542303470494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/8777321542303470494'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/12/testing-with-oracle-bpel-part-2.html' title='Testing with Oracle BPEL - part 2'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_PPnKQxmfzmU/STcHmXzxQhI/AAAAAAAAAHM/3tPymEEmw7Y/s72-c/schemaBPELTest.JPG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-801073221267784288</id><published>2008-11-22T00:48:00.011+01:00</published><updated>2009-01-07T22:37:31.786+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="tdd"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Testing with Oracle BPEL - part 1</title><content type='html'>One of the biggest challenge with the BPEL language is the unit testing.&lt;br /&gt;How can I be sure that my tiny change in my BPEL process won&#39;t affect the global behaviour of my entire process ?&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Test Driven Development&lt;/span&gt;&lt;br /&gt;In test-driven development technique aka TDD, everything is based on tests. We create first the test, check if the new test fails when we run it, then write some code, and then check if the test succeed. In Java/J2EE, this technique is very powerfull and is used in extrem programming methodology.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Testing with Oracle BPEL&lt;/span&gt;&lt;br /&gt;I recently find out Oracle BPEL provides a test framework (actually I knew it, but I never tried it because I wasn&#39;t very confident...).&lt;br /&gt;This framework will enable us to use an approach very similar to TDD.  In JDeveloper, we&#39;ll have our process design as usual and others windows with our tests design.&lt;br /&gt;&lt;br /&gt;These next features are available :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;emulate inbound and outbound messages (synch and asynch processes)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;assert some values and XML data&lt;/li&gt;&lt;li&gt;assert the number of execution of an activity&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;With these functionnalities, we are now able to do :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;lots of unit tests on our BPEL processes&lt;/li&gt;&lt;li&gt;integration tests&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As in JUnit concept, all the tests can be unified in a test suite to run all tests together.&lt;br /&gt;All the tests will be packaged with the BPEL suitcase.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/801073221267784288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/801073221267784288' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/801073221267784288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/801073221267784288'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/11/testing-with-oracle-bpel-part-1.html' title='Testing with Oracle BPEL - part 1'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-3803083776343999333</id><published>2008-08-31T22:35:00.011+02:00</published><updated>2008-08-31T23:25:13.373+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="fault management"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><title type='text'>How to replay a scope in Oracle BPEL</title><content type='html'>An other useful tip is to know how to replay a scope from its begining.&lt;br /&gt;&lt;br /&gt;There is an unknown bpel fault in Oracle which is the {http://schemas.oracle.com/bpel/extension}replay.&lt;br /&gt;Generally, the &lt;span style=&quot;font-style: italic;&quot;&gt;http://schemas.oracle.com/bpel/extension&lt;/span&gt; namespace is called by the &lt;span style=&quot;font-style:italic;&quot;&gt;bpel&lt;/span&gt;x prefix. Then you can simply use the fault with :&lt;blockquote&gt;&amp;lt;throw name=&quot;myReplayThrow&quot; faultName=&quot;bpelx:replay&quot;/&gt;&lt;/blockquote&gt;You&#39;ll find the jdeveloper bpel process which shows how to use the replay fault here : &lt;a href=&quot;http://sites.google.com/site/bpelsoablog/Home/ReplayFault.zip?attredirects=0&quot;&gt;ReplayFault.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The fault makes your current scope returns to its begining as you can see on this shot :&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_PPnKQxmfzmU/SLsF_THcSUI/AAAAAAAAAGQ/ZnzZpBwfCyU/s1600-h/replayFlow.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;http://3.bp.blogspot.com/_PPnKQxmfzmU/SLsF_THcSUI/AAAAAAAAAGQ/ZnzZpBwfCyU/s320/replayFlow.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5240789176397089090&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It can really helps the bpel design avoiding to have to much complexity in a process.&lt;br /&gt;Be careful since the replay fault is a bpel fault as shown in its name ! Therefore, it will be catched by a catchall on the current scope&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Note : You can also use this fault with the faults policy manager in the 10.1.3.3, but you don&#39;t have to implement the retry logic since this is implicit.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I know you are several to follow this blog, and I&#39;d like to thank you for your support.&lt;br /&gt;Talk you soon guys !</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/3803083776343999333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/3803083776343999333' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3803083776343999333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3803083776343999333'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/08/how-to-replay-scope-in-oracle-bpel.html' title='How to replay a scope in Oracle BPEL'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_PPnKQxmfzmU/SLsF_THcSUI/AAAAAAAAAGQ/ZnzZpBwfCyU/s72-c/replayFlow.JPG" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-345217742936463167</id><published>2008-08-21T17:28:00.004+02:00</published><updated>2008-08-21T17:55:18.146+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="xpath"/><title type='text'>Reference on the current bpel instance from a XPath function</title><content type='html'>How to get a reference on the current bpel process into a xpath function ?&lt;br /&gt;That&#39;s a big question ...&lt;br /&gt;&lt;br /&gt;This is very simple, but you have to know which properties you have to get from the xpathContext.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;package com.bpelsoa.xpath;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.Map;&lt;br /&gt;&lt;br /&gt;import com.collaxa.cube.engine.CubeContextHelper;&lt;br /&gt;import com.collaxa.cube.engine.ICubeContext;&lt;br /&gt;import com.collaxa.cube.engine.core.ICubeInstanceImpl;&lt;br /&gt;import com.oracle.bpel.xml.xpath.IXPathContext;&lt;br /&gt;import com.oracle.bpel.xml.xpath.IXPathFunction;&lt;br /&gt;import com.oracle.bpel.xml.xpath.XPathFunctionException;&lt;br /&gt;&lt;br /&gt;public class CubeInstanceXPath implements IXPathFunction {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Object call(IXPathContext context, List list)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throws XPathFunctionException {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Map xpathProperties = (Map) context.getVariableValue(null, null,&quot;xpath-function-data&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ICubeContext cubeContext = (ICubeContext) xpathProperties.get(&quot;ICubeContext&quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// get the cube instance from the cube context&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ICubeInstanceImpl cubeInstance = CubeContextHelper.getCubeInstance(cubeContext);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// do something with cubeInstance ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;You can do any operations on the cubeInstance object (such as modify a partner link, set a correlation id, change any properties, ...) to modify your bpel instance.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/345217742936463167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/345217742936463167' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/345217742936463167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/345217742936463167'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/08/reference-on-current-bpel-instance-from.html' title='Reference on the current bpel instance from a XPath function'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-8813320851037303735</id><published>2008-08-05T00:39:00.024+02:00</published><updated>2009-01-07T22:35:44.278+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="10.1.3.4"/><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><title type='text'>Oracle BPEL 10.1.3.4 is out !</title><content type='html'>The new BPEL Process Manager from Oracle is finally out since the 30th of July !&lt;br /&gt;&lt;br /&gt;This 10.1.3.4 version is a patchset which can be installed on a 10.1.3.1 (or more). That means you have to install the 10.1.3.1 version before, and then install the 10.1.3.4 patchset.&lt;br /&gt;I regret this patchset wouldn&#39;t be a standalone installation... As usual, this is available only for OC4J applications servers (I know it should be available from September for IBM WebSphere).&lt;br /&gt;&lt;br /&gt;Anyway, this new version is here, and I think Oracle BPEL is on a good way (good improvements, faster, usefull things).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;The BPEL Console&lt;/span&gt;&lt;br /&gt;This new version mainly focuses on the BPEL console by adding some gadgets as :&lt;br /&gt;- improved statistics collection&lt;br /&gt;- more visibility of the engine threading modele&lt;br /&gt;- a XML validator to validation any requests before posting.&lt;br /&gt;&lt;!-- &lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://bp0.blogger.com/_PPnKQxmfzmU/SJeHh_jgNaI/AAAAAAAAAFI/8ucT06QmzpA/s1600-h/stats_bpel_console.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 320px;&quot; src=&quot;http://bp0.blogger.com/_PPnKQxmfzmU/SJeHh_jgNaI/AAAAAAAAAFI/8ucT06QmzpA/s1600-h/stats_bpel_console.JPG&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://bp0.blogger.com/_PPnKQxmfzmU/SJeIIErDdxI/AAAAAAAAAFQ/15LVTn2Trgs/s1600-h/threads_bpel_console.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 320px;&quot; src=&quot;http://bp0.blogger.com/_PPnKQxmfzmU/SJeIIErDdxI/AAAAAAAAAFQ/15LVTn2Trgs/s1600-h/threads_bpel_console.JPG&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;--&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;The BPEL Engine&lt;/span&gt;&lt;br /&gt;- I find out and I think which is really good is the creation of a new asynchronous thread to feed the audit trail. In this case, if you start a new bpel process and if it crashes before the first dehydration point, you should be able to see the audit trail (how many times I tried some process which are impossible to debug since we do not have the audit trail .... !). I hope this point works.&lt;br /&gt;- Embedded automatic recovery agent which can recover any messages or activities which would be in state failed (state unresolved or not handled by the dispatcher). This sounds very good because I get used to develop my own recovery scripts in order to recover this kind of unresolved messages ...&lt;br /&gt;- JVM data collection as JVM thread dumps, JVM heap statistics&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Misc&lt;/span&gt;&lt;br /&gt;- Export of a process suitcase&lt;br /&gt;- Deployement plan which is created in order to make easier the deployement on several environnements (developement, testing, production) which all have different  hostnames and ports. It simply modify the URI of the import clause in the bpel descriptor file, XSD, WSDL ...&lt;br /&gt;&lt;br /&gt;By the way, Jdeveloper 10.1.3.4 is also out ! (but it seems even more buggy than the 10.1.3.3, so take care to your bpel source code).&lt;br /&gt;&lt;br /&gt;Talk you soon.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/8813320851037303735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/8813320851037303735' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/8813320851037303735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/8813320851037303735'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/08/oracle-bpel-10134-is-out.html' title='Oracle BPEL 10.1.3.4 is out !'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp0.blogger.com/_PPnKQxmfzmU/SJeHh_jgNaI/AAAAAAAAAFI/8ucT06QmzpA/s72-c-h/stats_bpel_console.JPG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-433801323529749556</id><published>2008-07-16T21:45:00.015+02:00</published><updated>2008-08-19T14:18:35.768+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="bpm"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="xpath"/><title type='text'>Custom XPath function in Oracle BPEL PM</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;I&#39;ll present you today the way to do custom xpath function in Oracle BPEL Process Manager 10.1.3.x. This stuff is very usefull for basic things (as an isNumber() method, ID generator, ...) or more complex things (as XML operations, business stuff).&lt;br /&gt;&lt;br /&gt;I did many projects with Oracle BPM 10, and I&#39;ve got used to use lots of those functions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Step 1 - Make a class which implements the IXPathFunction interface&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The next class is a little tool which tests if a string is a number.&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;br /&gt;Class IsNumberFunction&lt;/span&gt; :&lt;br /&gt;&lt;blockquote&gt;package com.bpelsoa.xpath;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.w3c.dom.Node;&lt;br /&gt;&lt;br /&gt;import com.collaxa.cube.xml.dom.DOMUtil;&lt;br /&gt;import com.oracle.bpel.xml.xpath.IXPathContext;&lt;br /&gt;import com.oracle.bpel.xml.xpath.IXPathFunction;&lt;br /&gt;import com.oracle.bpel.xml.xpath.XPathFunctionException;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * This implements a small tool which tests if a String is a Number.&lt;br /&gt; * &lt;br /&gt; * @author Raphaël&lt;br /&gt; * &lt;br /&gt; */&lt;br /&gt;public class IsNumberFunction implements IXPathFunction {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/** Number of args for this XPathFunction. */&lt;br /&gt;&amp;nbsp;&amp;nbsp;private static final int NB_ARGS = 1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/** Index in the List of our argument. */&lt;br /&gt;&amp;nbsp;&amp;nbsp;private static final int INDEX_ARG = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; * Is called by the BPEL engine.&lt;br /&gt;&amp;nbsp;&amp;nbsp; * &lt;br /&gt;&amp;nbsp;&amp;nbsp; * @see com.oracle.bpel.xml.xpath.IXPathFunction#call(com.oracle.bpel.xml.xpath&lt;br /&gt;&amp;nbsp;&amp;nbsp; *      .IXPathContext, java.util.List)&lt;br /&gt;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;@SuppressWarnings(&quot;unchecked&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Object call(IXPathContext context, List args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throws XPathFunctionException {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// test if we have the right argument number&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (args.size() != NB_ARGS) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new XPathFunctionException(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;This function requires one argument.&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// extract the String of the argument from the BPEL process&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object o = args.get(INDEX_ARG);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String str = getValue(o);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// call the business method&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return isNumber(str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; * Extract the value of our String.&lt;br /&gt;&amp;nbsp;&amp;nbsp; * &lt;br /&gt;&amp;nbsp;&amp;nbsp; * @param o object&lt;br /&gt;&amp;nbsp;&amp;nbsp; * @return a string which contains our value&lt;br /&gt;&amp;nbsp;&amp;nbsp; * @throws XPathFunctionException if error occurs&lt;br /&gt;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;private String getValue(Object o) throws XPathFunctionException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (o instanceof String) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return ((String) o);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (o instanceof Node) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return DOMUtil.getTextValue((Node) o);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new XPathFunctionException(&quot;Unknown argument type.&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; * Test if a String is a Number.&lt;br /&gt;&amp;nbsp;&amp;nbsp; * &lt;br /&gt;&amp;nbsp;&amp;nbsp; * @param str&lt;br /&gt;&amp;nbsp;&amp;nbsp; *            the String to be tested&lt;br /&gt;&amp;nbsp;&amp;nbsp; * @return a boolean&lt;br /&gt;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp;private boolean isNumber(String str) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; str.length(); i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!Character.isDigit(str.charAt(i))) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return Boolean.FALSE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return Boolean.TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Step 2 - Register the xpath function to your BPEL domain&lt;/span&gt;&lt;br /&gt;Edit the &lt;span style=&quot;font-style: italic;&quot;&gt;xpath-functions.xml&lt;/span&gt; file in the &lt;span style=&quot;font-style: italic;&quot;&gt;$BPEL_HOME/domains/bpelsoa/config&lt;/span&gt; directory.&lt;br /&gt;Add these following lines into the &lt;span style=&quot;font-style: italic;&quot;&gt;bpel-xpath-functions&lt;/span&gt; tags.&lt;br /&gt; &lt;blockquote&gt;&amp;lt;function id=&quot;isNumber&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;classname&amp;gt;com.bpelsoa.xpath.IsNumberFunction&amp;lt;/classname&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;comment&amp;gt;&amp;lt;![CDATA[This implements a small tool which tests if a String is a Number. The signature of this function is &lt;i&gt;bpelsoa:isNumber(String || Node)&lt;/i&gt;.]]&amp;gt;&amp;lt;/comment&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property id=&quot;namespace-uri&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;http://bpelsoa.blogspot.com&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;comment&amp;gt;Namespace URI for this function&amp;lt;/comment&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property id=&quot;namespace-prefix&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;bpelsoa&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;comment&amp;gt;Namespace prefix for this function&amp;lt;/comment&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/function&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Step 3 - Add your classfiles to the bpel classpath&lt;/span&gt;&lt;br /&gt;Create a new directory in your domain home (&lt;span style=&quot;font-style: italic;&quot;&gt;$BPEL_HOME/domains/bpelsoa&lt;/span&gt;) called &lt;span style=&quot;font-style: italic;&quot;&gt;classes&lt;/span&gt; and add your classfiles into it or add your classfiles to your application directory (&lt;span style=&quot;font-style: italic;&quot;&gt;/product/your_app/classes&lt;/span&gt;). Don&#39;t forget to add the packages hierarchy.&lt;br /&gt;&lt;br /&gt;Edit the shared library of your application server&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OC4J : $ORACLE_HOME/j2ee/oc4j_soa/config/server.xml&lt;/li&gt;&lt;/ul&gt;-&gt; locate the shared library called &lt;span style=&quot;font-style: italic;&quot;&gt;oracle.bpel.common&lt;/span&gt;&lt;br /&gt;-&gt; add a tag &lt;span style=&quot;font-style: italic;&quot;&gt;code-source&lt;/span&gt; with your classpath as the others &lt;span style=&quot;font-style: italic;&quot;&gt;code-source&lt;/span&gt; tags.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;WebSphere 6.1 : In the administration console, go to shared library, select the oracleBPELServer scope, and edit the &lt;span style=&quot;font-style: italic;&quot;&gt;orabpel_sl&lt;/span&gt; lib&lt;/li&gt;&lt;/ul&gt;-&gt; when editing the shared library, simply add your classpath with the others.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Step 4 - Using your new custom xpath function in a BPEL process&lt;/span&gt;&lt;br /&gt;A custom xpath function can be used as any xpath functions. It has to be in an expression field from an assign activity (copy, append, insert after/before, etc.).&lt;br /&gt;&lt;blockquote&gt;&amp;lt;assign name=&quot;xpathCall&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;copy&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;from expression=&quot;bpelsoa:isNumber(&#39;123&#39;)&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;to variable=&quot;myBoolean&quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/copy&amp;gt;&lt;br /&gt;&amp;lt;/assign&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Enjoy your new xpath.&lt;br /&gt;&lt;br /&gt;That&#39;s all.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/433801323529749556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/433801323529749556' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/433801323529749556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/433801323529749556'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/07/custom-xpath-function-in-oracle-bpel-pm.html' title='Custom XPath function in Oracle BPEL PM'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-3201222281825049013</id><published>2008-07-10T01:15:00.016+02:00</published><updated>2009-01-07T22:36:47.339+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache ode"/><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle 10g"/><category scheme="http://www.blogger.com/atom/ns#" term="soa"/><title type='text'>Apache ODE 1.2 with Oracle Database 10g</title><content type='html'>Hi there,&lt;br /&gt;&lt;br /&gt;It can be very usefull to change the database for many reasons (your customer wants to have this brand, your customer has some commercial discounts, support, etc...).&lt;br /&gt;&lt;br /&gt;I&#39;ll will show you how to use the RDMS Oracle Database 10g with Apache ODE 1.2 &lt;span&gt;.war&lt;/span&gt; version.&lt;br /&gt;&lt;br /&gt;You&#39;ll need the sysdba privileges in order to follow the next steps.&lt;br /&gt;You can get the oracle.sql script in the directory &lt;span style=&quot;font-style: italic;&quot;&gt;apache-ode-war-1.2/sql&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-size:100%;&quot; &gt;Create an ODE tablespace&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:georgia;&quot;&gt;Connect &lt;/span&gt;to the sid :&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-style: italic;font-family:times new roman;&quot; &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style=&quot;font-family:times new roman;&quot;&gt;sqlplus sys/manager@xe as sysdba&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style=&quot;font-family:georgia;&quot;&gt;Then &lt;/span&gt;execute the SQL statement :&lt;br /&gt;&lt;blockquote&gt;  &lt;span style=&quot;font-family:times new roman;&quot;&gt;  CREATE TABLESPACE ODE DATAFILE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:times new roman;&quot;&gt;    &#39;/ENTREPRISE/PRODUCT/ORACLEXE/ORADATA/XE/ODE.DBF&#39; SIZE 1000M AUTOEXTEND OFF&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:times new roman;&quot;&gt;    LOGGING&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:times new roman;&quot;&gt;    ONLINE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:times new roman;&quot;&gt;    PERMANENT&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:times new roman;&quot;&gt;    EXTENT MANAGEMENT LOCAL AUTOALLOCATE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:times new roman;&quot;&gt;    BLOCKSIZE 8K&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:times new roman;&quot;&gt;    SEGMENT SPACE MANAGEMENT MANUAL&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:times new roman;&quot;&gt;    FLASHBACK ON;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Feel free to adapt this to your environement (the dbf path, the autoextend property and the initial size of the tbs).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-size:100%;&quot; &gt;Create an ODE schema&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family:georgia;&quot;&gt;&lt;/span&gt;&lt;/span&gt;Execute the SQL statement :&lt;br /&gt;&lt;blockquote&gt;    CREATE USER ode&lt;br /&gt;IDENTIFIED BY ode&lt;br /&gt;DEFAULT TABLESPACE ode&lt;br /&gt;TEMPORARY TABLESPACE temp&lt;br /&gt;PROFILE DEFAULT&lt;br /&gt;ACCOUNT UNLOCK;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;-- Roles&lt;/span&gt;&lt;br /&gt;GRANT RESOURCE TO ode;&lt;br /&gt;GRANT CONNECT TO ode;&lt;br /&gt;ALTER USER ode DEFAULT ROLE ALL;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;-- System Privileges&lt;/span&gt;&lt;br /&gt;GRANT UNLIMITED TABLESPACE TO ode;&lt;br /&gt;GRANT CREATE VIEW TO ode;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;-- tablespace Quota&lt;/span&gt;&lt;br /&gt;ALTER USER ode QUOTA UNLIMITED ON ode;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Populate the ODE schema&lt;/span&gt;&lt;br /&gt;Load the Apache ODE 1.2 schema :&lt;br /&gt;&lt;blockquote&gt;sqlplus ode/ode@xe @oracle.sql&lt;/blockquote&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Create the JDBC datasource&lt;/span&gt;&lt;br /&gt;Add this in the Host tag to the &lt;span style=&quot;font-style: italic;&quot;&gt;$CATALINA_HOME/conf/server.xml&lt;/span&gt; file :&lt;br /&gt;&lt;blockquote&gt;&amp;lt;Context path=&quot;/ode&quot; docBase=&quot;ode&quot; debug=&quot;5&quot; reloadable=&quot;true&quot; crossContext=&quot;true&quot;&amp;gt;&lt;br /&gt;  &amp;lt;Resource name=&quot;jdbc/oracle/ode&quot;&lt;br /&gt;      auth=&quot;Container&quot;&lt;br /&gt;      type=&quot;javax.sql.DataSource&quot;&lt;br /&gt;      maxActive=&quot;100&quot;&lt;br /&gt;      maxIdle=&quot;30&quot;&lt;br /&gt;      maxWait=&quot;10000&quot;&lt;br /&gt;      username=&quot;ODE&quot;&lt;br /&gt;      password=&quot;ODE&quot;&lt;br /&gt;      driverClassName=&quot;oracle.jdbc.driver.OracleDriver&quot;&lt;br /&gt;      url=&quot;jdbc:oracle:thin:@localhost:1521:XE&quot;/&amp;gt;&lt;br /&gt;&amp;lt;/Context&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Bind the ODE engine to the oracle datasource&lt;/span&gt;&lt;br /&gt;Add the file &lt;span style=&quot;font-style: italic;&quot;&gt;$CATALINA_HOME/webapps/ode/WEB-INF/conf/ode-axis2.properties&lt;/span&gt; with this content :&lt;br /&gt;&lt;blockquote&gt;    ode-axis2.db.mode=EXTERNAL&lt;br /&gt; ode-axis2.db.ext.dataSource=java:comp/env/jdbc/oracle/ode&lt;/blockquote&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Add the Oracle JDBC Driver to the tomcat lib directory&lt;/span&gt;&lt;br /&gt;Add the file ojdbc14.jar (which you can find in the lib directory of your $ORACLE_HOME) to the &lt;span style=&quot;font-style: italic;&quot;&gt;$CATALINA_HOME/lib&lt;/span&gt; directory.&lt;br /&gt;&lt;br /&gt;Ok we&#39;re done, that&#39;s all !&lt;br /&gt;Just restart the tomcat and it should work.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/3201222281825049013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/3201222281825049013' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3201222281825049013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3201222281825049013'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/07/oracle-database-10g-with-apache-ode-12.html' title='Apache ODE 1.2 with Oracle Database 10g'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-3567018930613170255</id><published>2008-07-09T23:07:00.002+02:00</published><updated>2009-01-07T22:36:19.498+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache ode"/><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><title type='text'>Apache ODE 1.2 is released</title><content type='html'>Hi folks,&lt;br /&gt;&lt;br /&gt;This is my first technical post, and what is better than to announce the &lt;a href=&quot;http://ode.apache.org/release-notes-12.html&quot;&gt;Apache ODE 1.2 release&lt;/a&gt; ?&lt;br /&gt;&lt;br /&gt;This new release sounds very good for several points :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Improvements for stability and performance&lt;/li&gt;&lt;li&gt;External variables: variables used in a process are not opaque to the outside world anymore. You can map them to a simple database table and manipulate them directly. This means assigning to a variable has the effect of inserting or updating a row in the database, while reading a variable, has the effect of selecting a row from the database &lt;span style=&quot;font-style: italic;font-family:georgia;&quot; &gt;(I&#39;ll do a post on this feature to test it)&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Advanced endpoint configuration support : WS-Security &amp;amp; WS-RM&lt;/li&gt;&lt;li&gt;New SQL scripts packaged in the ditribution (Derby, MySQL, Oracle)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Lots of bugs fixed !&lt;/li&gt;&lt;/ul&gt;Talk you soon.&lt;br /&gt;Raphaël.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/3567018930613170255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/3567018930613170255' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3567018930613170255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/3567018930613170255'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/07/apache-ode-12-is-released.html' title='Apache ODE 1.2 is released'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7332201040458294751.post-8100010687488196732</id><published>2008-06-27T22:27:00.002+02:00</published><updated>2009-01-07T22:34:41.846+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bpel"/><category scheme="http://www.blogger.com/atom/ns#" term="bpm"/><category scheme="http://www.blogger.com/atom/ns#" term="esb"/><category scheme="http://www.blogger.com/atom/ns#" term="soa"/><title type='text'>Introduction</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;This is a new blog which will be about all the SOA, BPM/BPEL, ESB concepts.&lt;br /&gt;&lt;br /&gt;I&#39;ll try to explain different points as the best as I can in order to help you to fix all the potential issue which would occur.&lt;br /&gt;&lt;br /&gt;Thanks a lot for reading this article.&lt;br /&gt;&lt;br /&gt;Talk you soon.&lt;br /&gt;&lt;br /&gt;Raphaël.</content><link rel='replies' type='application/atom+xml' href='http://bpelsoa.blogspot.com/feeds/8100010687488196732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7332201040458294751/8100010687488196732' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/8100010687488196732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7332201040458294751/posts/default/8100010687488196732'/><link rel='alternate' type='text/html' href='http://bpelsoa.blogspot.com/2008/06/introduction.html' title='Introduction'/><author><name>Raph</name><uri>http://www.blogger.com/profile/06644102311047632619</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8LtEZfDF-3R9jhTk84PTYwxEH5fPYPHcrW6Ds89UaZ200tCymrxu1KsotGH7hjLf-R3GFHCqsxtzzxTyDB3T9XiTtwXRIs3v1DCB4MKWvdQTMMASHWy9AGzjAw9w-Bg/s220/P1040224_recadree.jpg'/></author><thr:total>6</thr:total></entry></feed>