<?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: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-1459511178626634251</id><updated>2012-02-15T08:31:14.393-08:00</updated><category term='remove wsse'/><category term='AIA'/><category term='XSLT troubleshooting FOTY0001 AIA'/><category term='owsm'/><category term='Oracle'/><category term='jdbc driver version check'/><category term='opmn ping timeout forward reverse ping'/><category term='CAVS'/><category term='BAM 11g'/><category term='jdbc driver upgrade'/><category term='Configuration'/><title type='text'>Chintan Shah's Blog</title><subtitle type='html'>SOA knowledge sharing</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>72</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-1681243806205820579</id><published>2012-02-13T17:24:00.000-08:00</published><updated>2012-02-13T20:44:03.447-08:00</updated><title type='text'>A cool hack</title><content type='html'>Quite a long ago, I did post about decrypting &lt;a href="http://chintanblog.blogspot.com/2010/03/jazn-security-hacked.html"&gt;jazn passwords&lt;/a&gt;, which came pretty handy for most of time including when I, myself forgot the passwords.&lt;br /&gt;&lt;br /&gt;Here is some advance version, do email me if you figure it out:&lt;br /&gt;&lt;br /&gt;Let's say, for sake of simplicity if you have 10g or 11g SOA installed on Unix box with unix oracle user. &lt;br /&gt;&lt;br /&gt;a) If you happen to have only weblogic (or oc4jadmin) password to login to Web console. Is it possible to gain unix shell access (with oracle user) and also all database schema (and jms) passwords configured in app server?&lt;br /&gt;&lt;br /&gt;b) If you happen to have unix shell access (with oracle user), can you gain access to weblogic or oc4j console and all db/jms password? &lt;br /&gt;&lt;br /&gt;Answer to all questions is yes, the real question is how..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-1681243806205820579?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/1681243806205820579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=1681243806205820579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1681243806205820579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1681243806205820579'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2012/02/cool-tip.html' title='A cool hack'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7006691743491209768</id><published>2012-02-13T17:03:00.000-08:00</published><updated>2012-02-13T17:03:50.937-08:00</updated><title type='text'>OSB Custom Transport Deployment Tips</title><content type='html'>I was developing custom transport for OSB, development of custom transport was relatively easy but deployment and troubleshooting was a bit of nightmare. Just sharing some tips as it might be useful for someone facing same issues:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Deploy to both nodes (Adminserver and osb_server1)&lt;br /&gt;It seems like UI stuff is used from AdminServer, and it run time it uses code from osb_server1. (of course, if you have developer version of OSB install, that would be separate story).&lt;br /&gt;&lt;br /&gt;&lt;li&gt; Redeploy of the transport always result in this error:&lt;br /&gt;&lt;br /&gt;&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt; ####&amp;lt;Feb 13, 2012 6:48:52 PM CST&amp;gt; &amp;lt;Error&amp;gt; &amp;lt;OSB Kernel&amp;gt; &amp;lt;springsoa&amp;gt; &amp;lt;osb_server1&amp;gt; &amp;lt;[STANDBY] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'&amp;gt; &amp;lt;&amp;lt;anonymous&amp;gt;&amp;gt; &amp;lt;&amp;gt; &amp;lt;dba6ff6b23159a46:64053457:135794b8417:-8000-0000000000000025&amp;gt; &amp;lt;1329180532849&amp;gt; &amp;lt;BEA-380003&amp;gt; &amp;lt;Exception on TransportManagerImpl.registerProvider, com.bea.wli.sb.transports.TransportException: Transport provider for ID **** already registered  &lt;br /&gt; com.bea.wli.sb.transports.TransportException: Transport provider for ID **** already registered  &lt;br /&gt;      at com.bea.wli.sb.transports.TransportManagerImpl.registerProvider(TransportManagerImpl.java:157)  &lt;br /&gt;      at com.bea.alsb.transports.sock.ApplicationListener$1.run(ApplicationListener.java:43)  &lt;br /&gt;      at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)  &lt;br /&gt;      at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)  &lt;br /&gt;      at weblogic.security.Security.runAs(Security.java:61)  &lt;br /&gt;      at com.bea.alsb.transports.sock.ApplicationListener.preStart(ApplicationListener.java:38)  &lt;br /&gt;      at weblogic.application.internal.flow.BaseLifecycleFlow$PreStartAction.run(BaseLifecycleFlow.java:282)  &lt;br /&gt;      at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)  &lt;br /&gt;      at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)  &lt;br /&gt;      at weblogic.application.internal.flow.BaseLifecycleFlow$LifecycleListenerAction.invoke(BaseLifecycleFlow.java:199)  &lt;br /&gt;      at weblogic.application.internal.flow.BaseLifecycleFlow.preStart(BaseLifecycleFlow.java:62)  &lt;br /&gt;      at weblogic.application.internal.flow.HeadLifecycleFlow.prepare(HeadLifecycleFlow.java:283)  &lt;br /&gt;      at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:613)  &lt;br /&gt;      at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)  &lt;br /&gt;      at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:184)  &lt;br /&gt;      at weblogic.application.internal.EarDeployment.prepare(EarDeployment.java:58)  &lt;br /&gt;      at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:154)  &lt;br /&gt;      at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:60)  &lt;br /&gt;      at weblogic.deploy.internal.targetserver.operations.RedeployOperation.createAndPrepareContainer(RedeployOperation.java:104)  &lt;br /&gt;      at weblogic.deploy.internal.targetserver.operations.RedeployOperation.doPrepare(RedeployOperation.java:128)  &lt;br /&gt;      at weblogic.deploy.internal.targetserver.operations.AbstractOperation.prepare(AbstractOperation.java:217)  &lt;br /&gt;      at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentPrepare(DeploymentManager.java:747)  &lt;br /&gt;      at weblogic.deploy.internal.targetserver.DeploymentManager.prepareDeploymentList(DeploymentManager.java:1216)  &lt;br /&gt;      at weblogic.deploy.internal.targetserver.DeploymentManager.handlePrepare(DeploymentManager.java:250)  &lt;br /&gt;      at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.prepare(DeploymentServiceDispatcher.java:159)  &lt;br /&gt;      at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doPrepareCallback(DeploymentReceiverCallbackDeliverer.java:171)  &lt;br /&gt;      at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$000(DeploymentReceiverCallbackDeliverer.java:13)  &lt;br /&gt;      at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$1.run(DeploymentReceiverCallbackDeliverer.java:46)  &lt;br /&gt;      at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)  &lt;br /&gt;      at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)  &lt;br /&gt;      at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)  &lt;br /&gt; &amp;gt;   &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Correct Re-deployment sequence&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;  &lt;li&gt; Undeploy from EM &lt;/li&gt;  &lt;li&gt; Restart Admin and osb_server1 &lt;br /&gt;     Note: This is to completely get rid of transport registration. It will get rid of : Transport provider for ID *** already registered&lt;br /&gt;  &lt;/li&gt;  &lt;li&gt; Redeploy to both Adminserver and osb_server1&lt;br /&gt;  Note: execution of business service at this time will result in "null" error. &lt;/li&gt;  &lt;li&gt; Restart AdminServer and osb_server1 &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; May be there is way to configure System.out seperately for custom transport but OOTB System.out didn't work well, so better to use weblogic logger. (e.g. I used : weblogic.logging.NonCatalogLogger )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7006691743491209768?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7006691743491209768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7006691743491209768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7006691743491209768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7006691743491209768'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2012/02/osb-custom-transport-deployment-tips.html' title='OSB Custom Transport Deployment Tips'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-372367750536563737</id><published>2012-02-06T13:51:00.000-08:00</published><updated>2012-02-06T13:51:11.893-08:00</updated><title type='text'>Error: SCAC-50012 (Jdeveloper 11g Composite Compilation)</title><content type='html'>While compiling SOA composite in JDeveloper, I saw this error many times: &lt;br /&gt;&lt;b&gt; Error: SCAC-50012 &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It happens mainly because of the Java code in the composite BPEL. Even after increasing the logging level of scac compilation, it didn't really show enough information to fix the problem. Here are some initial steps you can do to troubleshoot the issue (may be I will modify the scac task so we can show more information like 10g jdev used to show).&lt;br /&gt;&lt;br /&gt;-&gt; Check all imported libraries for composite project used by Java embed. If libraries are not found, jdev just shows SCAC-50012.&lt;br /&gt;&lt;br /&gt;-&gt; Make sure the java embed compiles fine by creating a sample Java project. If method signature changes or so, Jdev doesn't show any error, it just shows SCAC-50012.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-372367750536563737?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/372367750536563737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=372367750536563737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/372367750536563737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/372367750536563737'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2012/02/error-scac-50012-jdeveloper-11g.html' title='Error: SCAC-50012 (Jdeveloper 11g Composite Compilation)'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7288737889108503751</id><published>2011-08-08T21:58:00.000-07:00</published><updated>2011-08-09T10:21:05.213-07:00</updated><title type='text'>OEG - how history repeats</title><content type='html'>As we know, Oracle recently released product called OEG (Oracle Enterprise Gateway) which is meant to replace OWSM gatweay from 10g stack. I was just comparing how it with my 10g eyes. &lt;br /&gt;&lt;br /&gt;1. So entire 11g stack is deployed on weblogic and installation time you choose user, which is pretty much weblogic and your preferred password. OEG is separate installation, it doesn't ask for username and password during install. (It is actually admin/changeme, which you can find buried in some documents). &lt;br /&gt;&lt;br /&gt;Ah, remind me about the same in 10g, whole stack will use oc4jadmin, but OWSM would have separate user "admin" and oracle chosen password "oracle". &lt;br /&gt;&lt;br /&gt;2. OEG password is changeme, but when I login to OEG using http://localhost:8090/runtime/management/ManagementAgent, can not find a way change it. It was not very hard and later figured out it is in the Policy studio, as below:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.springsoa.com/images/oeg1/oeg_reset.png" imageanchor="1" style=""&gt;&lt;img border="0" height="552" width="677" src="http://www.springsoa.com/images/oeg1/oeg_reset.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I don't have to tell, how hard is to change "admin/oracle" password in 10g, or almost impossible to add new user in OWSM. &lt;br /&gt;&lt;br /&gt;3. BPEL compatibility :&lt;br /&gt;I remember (~2005ish during first OWSM release), when you register BPEL service to OWSM it won't work. You have to copy schema manually. Well, I could deal with it for a while and later patches fixed those problems. &lt;br /&gt;With latest release of OEG (11.1.1.5.0), Java webservice registration went fine, but when I try to register BPEL composite (deployed on SOA 11.1.1.5.0), it didn't register at all. Of course no logs in any of the log file. Later realized that it only like WS which are compatible with WS-I standard (http://www.ws-i.org/). Upon downloading their tools, I figured out that 11g composites (at least exposed BPEL WS) are not WS-I standard composite. &lt;br /&gt;I probably have to make it work using policy studio somehow, but it would be nice if gateway can accept my BPEL wsdl URL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7288737889108503751?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7288737889108503751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7288737889108503751' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7288737889108503751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7288737889108503751'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/08/oeg-how-history-repeats.html' title='OEG - how history repeats'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-9216708495170012948</id><published>2011-05-23T16:41:00.000-07:00</published><updated>2011-05-23T16:41:22.715-07:00</updated><title type='text'>Oracle CAMM with 10.1.3.5 SOA</title><content type='html'>We recently upgraded to 10.1.3.5 and saw that CAMM was not able to discover any of the BPEL targets. We had to get one off patch to fix this issue:&lt;br /&gt;&lt;br /&gt;Upgrading CAMM for 10.1.3.5 SOA:&lt;br /&gt;- apply patch 9534485 (this is the latest 10.2.0.5.1 release of CAMM)&lt;br /&gt;- apply patch 11939423 (change in one of the jar to read bpel descriptor)&lt;br /&gt;&lt;br /&gt;Once it is done, just use 10.1.3.4 resource configuration to configure your 10.1.3.5 server. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-g51D6Bo9CUo/TdrwU35_89I/AAAAAAAAAGE/sX0FfL9Wp2M/s1600/Camm_1.png" imageanchor="1" style=""&gt;&lt;img border="0" height="147" width="400" src="http://3.bp.blogspot.com/-g51D6Bo9CUo/TdrwU35_89I/AAAAAAAAAGE/sX0FfL9Wp2M/s400/Camm_1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;- Restart SOA&lt;br /&gt;- Restart CAMM&lt;br /&gt;&lt;br /&gt;You can see BPEL process discoveries as below:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Y2CpOPrfu7Y/TdrwiKdKK6I/AAAAAAAAAGM/nBJFfatOD50/s1600/Camm_2.png" imageanchor="1" style=""&gt;&lt;img border="0" height="147" width="400" src="http://3.bp.blogspot.com/-Y2CpOPrfu7Y/TdrwiKdKK6I/AAAAAAAAAGM/nBJFfatOD50/s400/Camm_2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-9216708495170012948?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/9216708495170012948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=9216708495170012948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/9216708495170012948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/9216708495170012948'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/05/oracle-camm-with-10135-soa.html' title='Oracle CAMM with 10.1.3.5 SOA'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-g51D6Bo9CUo/TdrwU35_89I/AAAAAAAAAGE/sX0FfL9Wp2M/s72-c/Camm_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-170991004549985720</id><published>2011-05-23T16:30:00.001-07:00</published><updated>2011-05-23T16:30:23.508-07:00</updated><title type='text'>XRefUtility 10g - Round 2</title><content type='html'>We were using &lt;a href="http://chintanblog.blogspot.com/2011/05/xrefutility-10g.html"&gt;XrefUtility&lt;/a&gt; and realized that Xref utility allows us to run select clause on source and target database, so that we can manipulate any data before comparing it with Xref table values. In our case, we had to manipulate the XRef values as well before comparing it with source and target database.&lt;br /&gt;&lt;br /&gt;For example, it is pretty common to add revision number in BRM values in Xref table. Those revision number changes in BRM without getting updated in AIA database. To solve that problem, revision number should be truncated from AIA XREF and target query. I had to modify XRefUtility to achieve this functionality. I enhanced UI as below:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-1V_okP1PkBk/Tdrqpd8FrmI/AAAAAAAAAF8/C8Vm7RE67hQ/s1600/XrefUtility_V2.png" imageanchor="1" style=""&gt;&lt;img border="0" height="182" width="400" src="http://3.bp.blogspot.com/-1V_okP1PkBk/Tdrqpd8FrmI/AAAAAAAAAF8/C8Vm7RE67hQ/s400/XrefUtility_V2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Another thing we found, is that going through 8 or so report is so cumbersome. If you look at my &lt;a href="http://chintanblog.blogspot.com/2011/05/xrefutility-10g.html"&gt;blog&lt;/a&gt;, you can see each report is combination of different cases. It would be nice to have all discrepancy in one or two reports, and have more control over queries. I ended up just writing my own utility in SQL as below:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;create source view&lt;br /&gt;drop materialized view sv;&lt;br /&gt;create materialized view sv as&lt;br /&gt;select a.row_id as sv_id, a.name as sv_name from SIEBEL.S_ASSET@sbltst a, SIEBEL.S_PROD_INT@sbltst b, SIEBEL.S_ORG_EXT@sbltst c, SIEBEL.S_ASSET@sbltst a2&lt;br /&gt;where a.PROD_ID = b.ROW_ID&lt;br /&gt;AND a.BILL_ACCNT_ID = c.row_id &lt;br /&gt;AND a.root_asset_id = a2.row_id &lt;br /&gt;AND a2.status_cd = 'Active'                &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; create target view&lt;br /&gt;drop materialized view tv;&lt;br /&gt;create materialized view tv as&lt;br /&gt;select * from (&lt;br /&gt;select '0.0.0.1 '||PP.poid_type||' '||PP.poid_id0 AS tv_id, pp.descr as tv_name&lt;br /&gt;from PIN.group_t@BRMMIG g, .....&lt;br /&gt;&lt;br /&gt;&lt;li&gt; create xref view (make it tabluer from row based view so that we can do joins and easier query). &lt;br /&gt;drop materialized view xv;&lt;br /&gt;create materialized view xv as &lt;br /&gt;select row_number, XREF_TABLE_NAME as xref_table_name, max(decode(XREF_COLUMN_NAME, 'SEBL_01', VALUE,null)) sv_id ,max(decode(XREF_COLUMN_NAME, 'COMMON', VALUE,null)) common_id&lt;br /&gt;,max(decode(XREF_COLUMN_NAME, 'BRM_01', rtrim(substr(value,0,length(VALUE)-2)),null))&lt;br /&gt;tv_id from XREF_DATA&lt;br /&gt;WHERE XREF_TABLE_NAME like 'INSTALLEDPRODUCT_ID' group by row_number, XREF_TABLE_NAME&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;b&gt; Note &lt;/b&gt; we can create materialized view so that it doesn't affect the performance and refresh the view only when required.  Now it is pretty simple to generate all reports and report numbers and data in one report:  &lt;ul&gt;&lt;li&gt; count for sv_id null in xv - shows all descrepancy where source id is missing in AIA Xref Database&lt;br /&gt;select count(*) from xv where sv_id is null&lt;br /&gt;select * from xv where sv_id is null&lt;br /&gt;&lt;br /&gt;&lt;li&gt; count for tv_id null in xv - shows all descrepancy where target id is missing in AIA Xref Database&lt;br /&gt;select count(*) from xv where tv_id is null&lt;br /&gt;select * from xv where tv_id is null&lt;br /&gt;&lt;br /&gt;&lt;li&gt; count for rows in sv not in xv - shows all descrepancy where data is in source database but missing AIA xref&lt;br /&gt;select count(*) from sv where not exists ( select * from xv where xv.sv_id = sv.sv_id )&lt;br /&gt;select * from sv where not exists ( select * from xv where xv.sv_id = sv.sv_id )&lt;br /&gt;&lt;br /&gt;&lt;li&gt; count for rows in tv not in xv - shows all descrepancy where data is in target database but missing AIA xref&lt;br /&gt;select count(*) from tv where not exists ( select * from xv where xv.tv_id = tv.tv_id )&lt;br /&gt;select * from tv where not exists ( select * from xv where xv.tv_id = tv.tv_id )&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-170991004549985720?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/170991004549985720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=170991004549985720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/170991004549985720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/170991004549985720'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/05/xrefutility-10g-round-2.html' title='XRefUtility 10g - Round 2'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-1V_okP1PkBk/Tdrqpd8FrmI/AAAAAAAAAF8/C8Vm7RE67hQ/s72-c/XrefUtility_V2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-3961140819178695133</id><published>2011-05-23T16:30:00.000-07:00</published><updated>2011-05-23T16:30:05.786-07:00</updated><title type='text'>OC4J JConsole 10g</title><content type='html'>&lt;h1&gt;&lt;b&gt;For JDK 1.5&lt;/b&gt; &lt;/h1&gt;&lt;ul&gt;&lt;li&gt;Changes in opmn.xml &lt;br /&gt;Add JVM parameter:  -Dcom.sun.management.jmxremote=true&lt;br /&gt;Change tmp directory to c:\temp&lt;br /&gt;&lt;br /&gt;&lt;li&gt; (For Windows) Change the owner user for service same as logged in user&lt;br /&gt;&lt;b&gt; Note &lt;/b&gt; make sure user name doesn't have (_) or (-) in it. bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6332311&lt;br /&gt;&lt;br /&gt;&lt;li&gt; Start the SOASuite in following sequence&lt;br /&gt;set TMP=c:\temp&lt;br /&gt;set TEMP=c:\temp&lt;br /&gt;opmnctl shutdown&lt;br /&gt;opmnctl startall&lt;br /&gt;jps (this should show all the pid which are used by Oracle App server&lt;br /&gt;&lt;br /&gt;&lt;li&gt; Start jconsole and use pid for oc4j_soa&lt;br /&gt;&lt;/ul&gt;&lt;h1&gt;&lt;b&gt; For JDK 1.6 &lt;/b&gt; &lt;/h1&gt;&lt;ul&gt;&lt;li&gt; Changes in opmn.xml: &lt;br /&gt;Add following for oc4j_soa&lt;br /&gt;-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false &lt;br /&gt;&lt;br /&gt;Change tmp directory to c:\temp&lt;br /&gt;&lt;br /&gt;&lt;li&gt; Start jconsole and use remote pid, with value localhost:9999&lt;br /&gt;Please note that JPS will still show "process information unavailable", but jconsole would work.&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-3961140819178695133?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/3961140819178695133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=3961140819178695133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3961140819178695133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3961140819178695133'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/05/oc4j-jconsole-10g.html' title='OC4J JConsole 10g'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-3764487367129670115</id><published>2011-05-03T11:14:00.000-07:00</published><updated>2011-05-03T11:14:27.100-07:00</updated><title type='text'>XRefUtility 10g</title><content type='html'>Recently had chance to work on XrefUtility. It is just designed for COMM PIPS to check on xref data anomaly, but it can be used for any XREF (as long as common column is named as COMMON). It generates multiple reports to show the different anomaly in Xref database. So basically it provides two distinct and valuable features:&lt;br /&gt;- Generates multiple reports for Xref anomaly.&lt;br /&gt;- Provides an interface to fix them &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installation&lt;/b&gt;: You can download the XRefUtility from Oracle Support 9326510. The installation note is included but I faced multiple jar files issues during installation. Nothing major, after adding those missing jars or changing path installation goes smooth.&lt;br /&gt;&lt;br /&gt;It basically installs FixXref Bpel process and web application called XrefUtility. The FixXref should be installed in default domain. I tried to install in different domain which worked fine during install, but during run time it expected to have it in default domain. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Usage:&lt;/b&gt; usage is well documented in the guide but for my own purpose, I created my own XREF table and added my own data to create all possible scenario where Xref can have issues.&lt;br /&gt;&lt;br /&gt;I created source table, target table and Xref called Source_Target_Xref. I also created meta data Xref which is not required for the XrefUtility but definitely required if you planning to use FixXRef.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;integration/esb/bin/xreftool.sh -shell&lt;br /&gt;deleteTable SOURCE_TARGET_XREF&lt;br /&gt;createTable SOURCE_TARGET_XREF&lt;br /&gt;addColumns SOURCE_TARGET_XREF SOURCE&lt;br /&gt;addColumns SOURCE_TARGET_XREF TARGET&lt;br /&gt;addColumns SOURCE_TARGET_XREF COMMON&lt;br /&gt;listColumns SOURCE_TARGET_XREF&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;User screen to configure Xref is quite simple as show below:&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.springsoa.com/images/xref/xref_1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://www.springsoa.com/images/xref/xref_1.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Configure AIA Database and Xref&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.springsoa.com/images/xref/xref_2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://www.springsoa.com/images/xref/xref_2.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Configure Source&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.springsoa.com/images/xref/xref_3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://www.springsoa.com/images/xref/xref_3.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Configure Target&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It can generate multiple reports. As mentioned earlier, I created all possible combination for Xref anomaly, and as mentioned below, reports were able to catch pretty much all of them. Following diagram shows which report causes which type of anomaly.&lt;br /&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.springsoa.com/images/xref/xref_report.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://www.springsoa.com/images/xref/xref_report.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Reports&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="goog_60633369"&gt;&lt;/span&gt;&lt;span id="goog_60633370"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Along with report it also generates text file which can be used for input to FixXref interface. I did found some issue with Fix Xref but mostly tried to avoid as it is better to fix the code or process which causes such anomaly. Probably, I will blog about FixXref in future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-3764487367129670115?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/3764487367129670115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=3764487367129670115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3764487367129670115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3764487367129670115'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/05/xrefutility-10g.html' title='XRefUtility 10g'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-5465484079224471841</id><published>2011-03-25T14:42:00.000-07:00</published><updated>2011-03-25T14:42:55.338-07:00</updated><title type='text'>AQ - queue is stopped</title><content type='html'>We started getting this error message in the log file all of sudden, and not sure how the dequeue for the queue got disabled.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;[Linked-exception]&lt;br /&gt;java.sql.SQLException: ORA-25226: dequeue failed, queue JMSUSER.AIA_CUSTOMERJMSQUEUE is not enabled for dequeue&lt;br /&gt;ORA-06512: at &amp;quot;SYS.DBMS_AQIN&amp;quot;, line 571&lt;br /&gt;ORA-06512: at line 1&lt;br /&gt;&lt;br /&gt;        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:138)&lt;br /&gt;        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:316)&lt;br /&gt;        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:282)&lt;br /&gt;        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:639)&lt;br /&gt;        at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:184)&lt;br /&gt;        at oracle.jdbc.driver.T4CCallableStatement.execute_for_rows(T4CCallableStatement.java:873)&lt;br /&gt;        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1161)&lt;br /&gt;        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3001)&lt;br /&gt;        at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3043)&lt;br /&gt;        at oracle.jms.AQjmsConsumer.dequeue(AQjmsConsumer.java:1601)&lt;br /&gt;        at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:916)&lt;br /&gt;        at oracle.jms.AQjmsConsumer.receiveFromAQ(AQjmsConsumer.java:835)&lt;br /&gt;        at oracle.jms.AQjmsConsumer.receive(AQjmsConsumer.java:776)&lt;br /&gt;        at oracle.tip.adapter.jms.JMS.JMSMessageConsumer.consumeBlockingWithTimeout(JMSMessageConsumer.java:405)&lt;br /&gt;        at oracle.tip.adapter.jms.inbound.JmsConsumer.run(JmsConsumer.java:330)&lt;br /&gt;        at oracle.j2ee.connector.work.WorkWrapper.runTargetWork(WorkWrapper.java:242)&lt;br /&gt;        at oracle.j2ee.connector.work.WorkWrapper.doWork(WorkWrapper.java:215)&lt;br /&gt;        at oracle.j2ee.connector.work.WorkWrapper.run(WorkWrapper.java:190)&lt;br /&gt;        at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:830)&lt;br /&gt;        at java.lang.Thread.run(Thread.java:595)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;It was quite easy to fix it. Following query shows the queues which has dequeue or enqueue disabled:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;select * from all_queues where trim(enqueue_enabled) = 'NO'&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Once idetified which queue has issue, we can run following query to enabled the dequeue and enqueue for particular queue:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;execute DBMS_AQADM.START_QUEUE(queue_name=&amp;gt; 'JMSUSER.AIA_CUSTOMERJMSQUEUE');&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-5465484079224471841?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/5465484079224471841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=5465484079224471841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5465484079224471841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5465484079224471841'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/03/aq-queue-is-stopped.html' title='AQ - queue is stopped'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-6811333243645805111</id><published>2011-03-23T22:42:00.000-07:00</published><updated>2011-03-23T22:42:27.505-07:00</updated><title type='text'>ESB 10g version agnostic routing rules - [default version]</title><content type='html'>In BPEL, it is quite easy that if we don't specify the version during partnerlink invocation, it will use the default one. But in ESB, especially when ESB is calling BPEL via native binding the version of the BPEL process is hard coded inside the routing rule. This was quite annoying because this pattern is heavily used in AIA and redeploying newer version of BPEL requires change in routing rule in ESB.&lt;br /&gt;&lt;br /&gt;In 10.1.3.5, Oracle released a new feature which solves this problem. After 10.1.3.5 upgrade, if you deploy any BPEL process, it creates a separate version in BPELSystem called "default" which is visible in ESB Console as well as JDeveloper. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.springsoa.com/images/esb_default/esb_default.PNG" imageanchor="1" style=""&gt;&lt;img border="0" height="523" width="350" src="http://www.springsoa.com/images/esb_default/esb_default.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If we select default during routing rule, then the default version of the BPEL process would be called from ESB during native invocation. Therefore if we change the BPEL default version or redeploy BPEL process with higher version, it won't require change in ESB routing rules.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-6811333243645805111?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/6811333243645805111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=6811333243645805111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/6811333243645805111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/6811333243645805111'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/03/esb-10g-version-agnostic-routing-rules.html' title='ESB 10g version agnostic routing rules - [default version]'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-861646444696632727</id><published>2011-03-23T21:51:00.000-07:00</published><updated>2011-03-23T21:51:23.841-07:00</updated><title type='text'>BPELConsole promiscuous mode</title><content type='html'>Nothing really new, but been having my eyes on this promiscuous mode, but never had time to sit down and put it under the test. It is at the server level accessible via collax-config.xml or BPELAdmin console.&lt;br /&gt;&lt;br /&gt;So in 10.1.3.3, we had simple feature called:&lt;br /&gt;productionServer = true/false  (false by default)&lt;br /&gt;true: same version of BPEL process is not allowed to be deployed. You get following error message:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;is being re-deployed to a Production Server with same revision number.Please modify the revision for the process.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;In 10.1.3.5, productionServer is deprecated and it is replaced with serverMode property. As per documentation:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;serverMode = production/developement/promiscuous  &lt;br /&gt;Identifies the server mode. Currently supported server modes are:&lt;br /&gt;    * production - re-deployment of process with same revision is not allowed.&lt;br /&gt;    * development - re-deployment of process with same revision marks the existing instance as stale.&lt;br /&gt;    * promiscuous - re-deployment of process with same revision will not stale instances, work items will be migrated. &lt;br /&gt;The default value is &amp;quot;development&amp;quot;. &lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I thought promiscuous is something everybody would want, so I thought experimenting it with. First changed the serverMode to promiscuous, and restarted.&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Test case 1 (Synchronous) : &lt;/b&gt; &lt;br&gt;&lt;br /&gt;I deployed synchronous process A with couple of activities. Fired some instances of process A. Now I completely changed all the activity names in process A, added and deleted some more activities and redeployed process A with same version. Fired some more instances of process A.&lt;br /&gt;&lt;br /&gt;Results: It was pretty good and as expected. None of the instances went stale. Old instances were shown based on old code and new instances were shown based on new BPEL code. &lt;br /&gt;&lt;br /&gt;Now, as synchronous processes held the ground firm, it was time to experiment asynchronous flow. &lt;br /&gt;&lt;br /&gt;&lt;b&gt; Test case 2 (asynchronous ) : &lt;/b&gt; &lt;br&gt;&lt;br /&gt;I deployed asynchronous process B with a few activities. I had process B calling another asynchronous process C and then do receive activity. This was to make sure B goes to dehydration and I can get some inflight instances. I ran some transactions so that process B has a few instances inflight mode.&lt;br /&gt;&lt;br /&gt;Now, I drastically change the process B, added/deleted new activities (but did keep the call to C and receive from C). I deployed the new code of process B with same version. I created some new transaction and tried to complete some old transactions.&lt;br /&gt;&lt;br /&gt;Results: Quite fantastic. Nothing went stale. Process B in-flight instances with older code got migrated to newer code process B after dehydration point, and completed successfully with newer version of code. This is seems to be very powerful but delicate feature and person doing deployment should be very cautious about using promiscuous mode with in flight workflows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Test case 3 (asynchronous human workflow) : &lt;/b&gt; &lt;br&gt;&lt;br /&gt;Created a simple process D, with Human Task, and created some inflight workflows for process D. I made some minor changes in process D, and redeployed the new code with same version. &lt;br /&gt;&lt;br /&gt;Result: All bpel instances were inflight, but all human tasks went stale, at least didn't show up in WLA. This definitely didn't pass the expected results.&lt;br /&gt;&lt;br /&gt;&lt;br&gt; &lt;br /&gt;&lt;b&gt; Conclusion &lt;/b&gt;&lt;br /&gt;It is definitely very strong feature and avoid some hassles with stale activities. But in general it would be great to have this feature at the process level instead of server level. That way, we can do promiscuous only for sync and not just version the async one. I could not find such feature in 11g, guess I need to look around if composite have similar feature.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-861646444696632727?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/861646444696632727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=861646444696632727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/861646444696632727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/861646444696632727'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/03/bpelconsole-promiscuous-mode.html' title='BPELConsole promiscuous mode'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7365487191202200981</id><published>2011-03-02T12:39:00.000-08:00</published><updated>2011-03-02T12:44:46.336-08:00</updated><title type='text'>ESB Connection Leak in ESBPool</title><content type='html'>If I have to come up the list for top 5 things I hate most, Oracle ESB (only 10g) would definitely make it to that list. I have been working on it for almost 5 years and pretty much every single project, including project involving complex business processing in ESB to millions of transaction per hour just using ESB. Each time ESB never fails to disappoint me further. Every new release since 10.1.3.1 fixes hundreds of bugs and introduced another new hundreds. Just an instance "Unable to build the instance relationship", one should get nobel price for solving it as it has been unsolved mystery for 5 years and seems to be more complex than E=MC&lt;sup&gt;2&lt;/sup&gt;. I personally have heard statement - "ESB is unreliable &lt;b&gt;product&lt;/b&gt;" from internal Oracle SOA Gurus, and I completely disagree with it; I think that calling ESB a "product" itself is fundamentally breaking the laws of software ethics.&lt;br /&gt;&lt;br /&gt;Anyways, recently did 10.1.3.5.2 upgrade and we saw that ESB connection pool (ESBPool) was growing 100 connections per hour. After deprived sleep multiple nights, we found that it was another ESB bug. There were constant error messages like "Unclosed connection detected : 'oracle.oc4j.sql.spi.ConnectionFinalizer@" in log.xml. Upon creating multiple different test cases, I found that it was with a very specific pattern:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;AQ -&amp;gt; ESB Consumer -&amp;gt; ESB Async Routing Rule -&amp;gt; Asyn BPEL&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The Async Routing Rule was the culprit and such flows were found in OOTB AIA code. Once we fixed it from Async to Sync, connections never went up more than 2, and life was back to normal again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7365487191202200981?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7365487191202200981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7365487191202200981' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7365487191202200981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7365487191202200981'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/03/esb-connection-leak-in-esbpool.html' title='ESB Connection Leak in ESBPool'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-8009853551728908438</id><published>2011-02-23T10:48:00.000-08:00</published><updated>2011-02-23T10:48:05.001-08:00</updated><title type='text'>Undeploying BPEL process</title><content type='html'>Well, not any cutting edge stuff, but did cause us lot of problem for us during 10.1.3.5 upgrade. It seems like 10.1.3.5 and especially 10.1.3.5.2 has lot of XSD validations and it can cause BPEL process not to load if some of the validation fails. &lt;br /&gt;&lt;br /&gt;It doesn't allow user to click on this process in BPELConsole. Appropriate action would be to undeploy or redeploy those processes but without clicking on that process you can not undeploy it. &lt;br /&gt;&lt;br /&gt;1) One way to undeploy such process would be to clean up database. We tried following: &lt;br /&gt;a) clean up the database tables&lt;br /&gt;   PROCESS&lt;br /&gt;   PROCESS_DEFAULT&lt;br /&gt;   PROCESS_DESCRIPTOR&lt;br /&gt;   PROCESS_LOG&lt;br /&gt;   SUITCASE_BIN&lt;br /&gt;b) clean up the BPEL process under tmp directory (bpel/domains/domain-name/tmp)&lt;br /&gt;c) clean up ESB in BPELSystem&lt;br /&gt;&lt;br /&gt;This was quite cumbersome process. &lt;br /&gt;&lt;br /&gt;2) The other way we found was to use following URL:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;http://host:port/BPELConsole/&amp;lt;&amp;lt;domain&amp;gt;&amp;gt;/undeployProcess.jsp?processId=&amp;lt;&amp;lt;process-id&amp;gt;&amp;gt;&amp;amp;revisionTag=&amp;lt;&amp;lt;revision&amp;gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;It was much cleaner to undeploy this way.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-8009853551728908438?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/8009853551728908438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=8009853551728908438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8009853551728908438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8009853551728908438'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/02/undeploying-bpel-process.html' title='Undeploying BPEL process'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-2054396063479887566</id><published>2011-02-10T17:15:00.000-08:00</published><updated>2011-02-23T22:54:10.696-08:00</updated><title type='text'>handleTopLevelFault - SOA 10.1.3.5</title><content type='html'>I think all of us know that transaction=participate in 10.1.3.3 was replaced by handleTopLevelFault=true in 10.1.3.5. I never realized the impact it had in our processes and how Oracle keep changing their mind on what this value is and how the server behaves. &lt;br /&gt;&lt;br /&gt;First of all, in 10.1.3.3, all BPEL processes DON'T participate in transaction by default. Which means if you have, process A -&gt; Process B -&gt; Process C, and &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;[C] is disabled&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;    insert table 1&lt;br /&gt;    invoke C&lt;br /&gt;} catch {&lt;br /&gt;    insert table 2&lt;br /&gt;    throw&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;In this case, upon the failure of invoke C, entry in table 1 or 2 will never roll back, even if data sources are configured for XA transaction. If you do put transaction=partipate in your process at configuration level, then this process and their operation would be in Global transaction and throw activity would roll back insert in table 1 and 2. &lt;br /&gt;&lt;br /&gt;[Note if you don't have throw, it would act like there is no error and nothing would ever roll back in any scenario, which is quite expected.]&lt;br /&gt;&lt;br /&gt;Now, in 10.1.3.4, they replaced transaction=participate with handleTopLevelFault=false. The default value in the code [com.collaxa.cube.engine.core.map.BPELProcessBlock] was true. That's why behavior would be exactly same as 10.1.3.3. Nothing would participate in transaction unless you explicitly specify it to be. You can not define this property at domain level, it is only supported at process level.&lt;br /&gt;&lt;br /&gt;In 10.1.3.5, the default value in [com.collaxa.cube.engine.core.map.BPELProcessBlock] got changed to "false". It caused numerous problems to us. Based on AIA best practice, we always have our own try/catch block, we do some processing in catch block (e.g. update db, queue, etc) and then we rethrow the error so the caller can get details of the error and instance can show as faulted. We had the pattern mentioned earlier all over the places. In 10.1.3.3 we could see the data which were inserted from catch block, but in 10.1.3.5 everything just rolled back because it started participating in transaction by default.&lt;br /&gt;&lt;br /&gt;I agree, not a very good coding practice but it worked in 10.1.3.3 and nobody realized it can cause transaction issues during upgrade. The ideal solution should be to be catch block in local transaction so during roll back it doesn't rollback your work in catch activity. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;[C] is disabled&lt;br /&gt;try {&lt;br /&gt;    insert table A&lt;br /&gt;    invoke C&lt;br /&gt;} catch {&lt;br /&gt;    insert table B [make sure DB adapter is using tx-level='local' in data source]&lt;br /&gt;    throw&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Anyways, we had more than 200+ processes and we couldn't afford changing the code for each one of them, so I came up with neat solution which worked out without any issues. I wrote BPELClient API to insert "handleTopLevelFault=true" in majority of the BPEL processes, and that's it. No restart and no code change and life was back to normal. The only flow would be that if somebody redeploys the code and overwrites descriptor, but we can just run the util again in that case.&lt;br /&gt;&lt;br /&gt;Here is the how code looked like:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;ProcessDescriptor processDescriptor = bpelProcessHandle.getDescriptor();&lt;br /&gt;ConfigurationsDescriptor configurationsDescriptor = processDescriptor.getConfigurations();&lt;br /&gt;configurationsDescriptor.setPropertyValue(&amp;quot;handleTopLevelFault&amp;quot;,appropriateValue);  // set or add&lt;br /&gt;bpelProcessHandle.updateDescriptor(processDescriptor);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;size=7&gt;Another side effect of handleTopLevelFault&lt;/size&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If your process has handleTopLevelFault = true, it will show the Faulted Instance in Flow view and Audit view in BPELConsole&lt;br /&gt;&lt;br /&gt;if your process has handleTopLevelFault = false (or don't have this property in 10.1.3.5), it will not show the instance in flow view and will only show in Audit view. That was some new enhancement added in 10.1.3.5. &lt;br /&gt;&lt;br /&gt;I fixed the JavaScript issue so it shows up the faulted instance in Flow view even if you have handleTopLevelFault=false. Details can be found at &lt;a href="http://chintanblog.blogspot.com/2011/01/bpelconsole-faulted-instance-in-10135.html"&gt;http://chintanblog.blogspot.com/2011/01/bpelconsole-faulted-instance-in-10135.html&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-2054396063479887566?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/2054396063479887566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=2054396063479887566' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2054396063479887566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2054396063479887566'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/02/handletoplevelfault-soa-10135.html' title='handleTopLevelFault - SOA 10.1.3.5'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-5582770551315902555</id><published>2011-02-03T12:59:00.000-08:00</published><updated>2011-02-03T12:59:30.609-08:00</updated><title type='text'>BAM Filtering / Governance 11g</title><content type='html'>In one of the project, we were trying to push lot of data to BAM (some of the trace data along with data required for reports). We needed a solid approach were we can control the amount of data going to BAM at run time, just like logging level (info/debug). I agree that for infrastructure and instance tracing, CAMM, Amberpoint or Grid Control would be a better solution, but not all clients have luxury to invest in those tools. Sometime EM and BAM can help with basic troubleshooting.&lt;br /&gt;&lt;br /&gt;The only out of the box approach I found was to use EM to disable monitoring at composite level. Pretty much nothing if you are using BAM adapter (e.g. in Mediator). We can also use following at composite level, but it requires redeployment:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;   &amp;lt;property name=&amp;quot;disableProcessSensors&amp;quot; many=&amp;quot;false&amp;quot;&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Following was the pretty intuitive approach we found to control the data going to BAM and we can stop/start/control BAM publishing at runtime. In BAM Sensor (Sensor action) there is feature called Filter. From there we can call any XSL expression, so we wrote custom XSL function which reads some configuration from JVM. We can control the BAM sensor publish event by returning true/false from this function.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.springsoa.com/images/bam-filter/bam_image_1.png" imageanchor="1" style=""&gt;&lt;img border="0" height="700" width="502" src="http://www.springsoa.com/images/bam-filter/bam_image_1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;We used the similar thing in Mediator, but it was quite simple as it also provides filter expression.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.springsoa.com/images/bam-filter/bam_image_2.png" imageanchor="1" style=""&gt;&lt;img border="0" height="358" width="752" src="http://www.springsoa.com/images/bam-filter/bam_image_2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This way we had complete centralized control over BAM publish.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-5582770551315902555?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/5582770551315902555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=5582770551315902555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5582770551315902555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5582770551315902555'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/02/bam-filtering-governance-11g.html' title='BAM Filtering / Governance 11g'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-3385095583388889622</id><published>2011-01-18T11:17:00.000-08:00</published><updated>2011-01-18T11:17:52.669-08:00</updated><title type='text'>BPELConsole Faulted Instance in 10.1.3.5</title><content type='html'>Recently we did upgrade of 10.1.3.5 and found that if you have faulted instance in BPELConsole, it doesn't show up the flow view. You can still see the details from Audit tab but flow tab shows following error (Javascript):&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Line: 57&lt;br /&gt;Char: 48&lt;br /&gt;Error: 'this.wi.state' is null or not an object&lt;br /&gt;Code: 0&lt;br /&gt;URI: http://localhost:7777/BPELConsole/default/lib/flowviewer.js?gvpn0m&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;- First of all, faulted instances are the one which you want to look into BPELConsole first&lt;br /&gt;- Audit tab is very busy, I believe flow view is graphical and very compact&lt;br /&gt;&lt;br /&gt;Upon following up with Oracle, we found that it is expected behavior! (http://download.oracle.com/docs/cd/E14101_01/doc.1013/e15342/bpelrn.htm#BABCGIBB). Since when, the javascript error on the webpage become expected behavior??&lt;br /&gt;&lt;br /&gt;Anyways, it was time back to get into dirty details of the JSP and Javascripts but I finally was able to fix the issue by just changing flowviewer.js  file. Here are the steps, which should be applicable to any version:&lt;br /&gt;&lt;br /&gt;1) open $ORACLE_HOME/j2ee/oc4j_soa/applications/orabpel/console/lib/flowviewr.js&lt;br /&gt;2) You can use online beatifier as this JS is very compact, I used :&lt;br /&gt;   http://jsbeautifier.org/&lt;br /&gt;3) Search for open.faulted, you should see something like&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;                } else {&lt;br /&gt;                    if (this.wi.state == &amp;quot;4&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;open.faulted&amp;quot;) {&lt;br /&gt;                        this.checkforESB(e);&lt;br /&gt;                        this.templateId = &amp;quot;activity.faulted&amp;quot;;&lt;br /&gt;                        return&lt;br /&gt;                    } else {&lt;br /&gt;                        if (this.wi.state == &amp;quot;5&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;6&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;7&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;8&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;11&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;12&amp;quot; &amp;#124;&amp;#124; this.wi.state.substring(0, 6) == &amp;quot;closed&amp;quot;) {&lt;br /&gt;                            this.checkforESB(e);&lt;br /&gt;                            this.templateId = &amp;quot;activity.closed&amp;quot;;&lt;br /&gt;                            return&lt;br /&gt;                        } else {&lt;br /&gt;                            this.checkforESB(e);&lt;br /&gt;                            this.templateId = &amp;quot;activity.pending&amp;quot;;&lt;br /&gt;                            return&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;4) Make changes as below:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;                } else {&lt;br /&gt;                    if (  &lt;b&gt; &lt;font size="4"&gt; (  this.wi.state == null &amp;amp;&amp;amp;   this.type == &amp;quot;4&amp;quot;) &amp;#124;&amp;#124; &lt;/font&gt; &lt;/b&gt;  this.wi.state == &amp;quot;4&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;open.faulted&amp;quot;) {&lt;br /&gt;                        this.checkforESB(e);&lt;br /&gt;                        this.templateId = &amp;quot;activity.faulted&amp;quot;;&lt;br /&gt;                        return&lt;br /&gt;                    } else {&lt;br /&gt;                        if ( &lt;b&gt; &lt;font size="4"&gt; this.wi.state == null &amp;#124;&amp;#124; &lt;/font&gt; &lt;/b&gt; this.wi.state == &amp;quot;5&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;6&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;7&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;8&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;11&amp;quot; &amp;#124;&amp;#124; this.wi.state == &amp;quot;12&amp;quot; &amp;#124;&amp;#124; this.wi.state.substring(0, 6) == &amp;quot;closed&amp;quot;) {&lt;br /&gt;                            this.checkforESB(e);&lt;br /&gt;                            this.templateId = &amp;quot;activity.closed&amp;quot;;&lt;br /&gt;                            return&lt;br /&gt;                        } else {&lt;br /&gt;                            this.checkforESB(e);&lt;br /&gt;                            this.templateId = &amp;quot;activity.pending&amp;quot;;&lt;br /&gt;                            return&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5) On IE or Firefox, just do ctrl+F5 to refresh your local copy of JS, and you should be able to see faulted instance just like before.   &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you are using 10.1.3.5 or 10.1.3.5.2, you can just download flowviewer.js from &lt;a href="http://www.springsoa.com/images/faulted/flowviewer.js"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-3385095583388889622?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/3385095583388889622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=3385095583388889622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3385095583388889622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3385095583388889622'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/01/bpelconsole-faulted-instance-in-10135.html' title='BPELConsole Faulted Instance in 10.1.3.5'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-2863870659947772793</id><published>2011-01-18T08:06:00.000-08:00</published><updated>2011-01-18T08:06:57.591-08:00</updated><title type='text'>OWSM gateway clean up</title><content type='html'>In OWSM fresh install, usually you get following error message in gateway.log file:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;2011-01-15 18:39:37,194 FINEST [Thread-77] configuration.PolicySetWatchdog - Failed to retrieve policy set from policy manager with url http://host:7777/policymanager/services/RegistrationService&lt;br /&gt;com.cfluent.policymanager.sdk.base.exception.ServerException: java.lang.Exception: Invalid component ID - C0003001&lt;br /&gt;        at com.cfluent.policymanager.sdk.client.soap.SoapComponentConfigurator.getPolicies(SoapComponentConfigurator.java:185)&lt;br /&gt;        at com.cfluent.agent.configuration.PolicySetWatchdog.getPolicySetFromPolicyManager(PolicySetWatchdog.java:168)&lt;br /&gt;        at com.cfluent.agent.configuration.PolicySetWatchdog.pollFromPolicyManager(PolicySetWatchdog.java:207)&lt;br /&gt;        at com.cfluent.agent.configuration.PolicySetWatchdog.run(PolicySetWatchdog.java:91)&lt;br /&gt;2011-01-15 18:39:49,484 FINEST [Thread-77] configuration.PolicySetWatchdog - Checking Policy Manager&lt;br /&gt;2011-01-15 18:39:49,530 WARNING [Thread-77] configuration.PolicySetWatchdog - Failed to retrieve policy set from policy manager with url http://host:7777/policymanager/services/RegistrationService: com.cfluent.policymanager.sdk.base.exception.ServerException: java.lang.Exception: Invalid component ID - C0003001&lt;br /&gt;2011-01-15 18:39:49,530 FINEST [Thread-77] configuration.PolicySetWatchdog - Failed to retrieve policy set from policy manager with url http://host:7777/policymanager/services/RegistrationService&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This is known issue, because during fresh install there is no gateway and there is no component called C0003001. So if you create gateway component then it will get the id of C0003001 and this error should go away. &lt;br /&gt;&lt;br /&gt;In our environment, we had C0003001 component as gateway, but we decided to deactivate it and tried to create new one, and this error shows up again. Now deleting any component or recreating   gateway doesn't ensure C0003001 id. On gateway, we started getting error: Gateway is not ready to process requests.&lt;br /&gt;&lt;br /&gt;To resolve the issue, we cleaned up the entire OWSM repository and reset the sequence as below:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;delete from SERVICES;&lt;br /&gt;delete from COMPONENT_POLICY_MAPPINGS;&lt;br /&gt;delete from COMPONENTS;&lt;br /&gt;drop SEQUENCE COMPONENT_ID_SEQ;&lt;br /&gt;CREATE SEQUENCE &amp;quot;ORAWSM&amp;quot;.&amp;quot;COMPONENT_ID_SEQ&amp;quot; MINVALUE 1 MAXVALUE 999999999999 INCREMENT BY 1 START WITH 3001 NOCACHE NOORDER CYCLE &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;After that if we recreate gateway as first component, it will have id of C0003001 and issue will be resolved right away.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-2863870659947772793?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/2863870659947772793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=2863870659947772793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2863870659947772793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2863870659947772793'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2011/01/owsm-gateway-clean-up.html' title='OWSM gateway clean up'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-5723328362158447782</id><published>2010-12-22T11:29:00.000-08:00</published><updated>2010-12-22T11:29:11.971-08:00</updated><title type='text'>XSL Refresh 10g</title><content type='html'>It is always good practice to have all XSD outside the BPEL and ESB project and refer them via http url (or oramds in 11g). All XSL remains in the BPEL or ESB, and changes to XSL requires redeployment. &lt;br /&gt;&lt;br /&gt;We have lot of logic in XSL especially in AIA, and lot of XSL can be reused. We thought of exploring the option of doing real time changes to XSL. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Option 1: XSL embedded in BPEL process &lt;/b&gt;&lt;br /&gt;If XSL is embedded in BPEL process, the XSL is cached inside the transformation engine. Fortunately, XSL function used by BPEl and ESB provides ways to initialize the cache. com.collaxa.cube.xml.xpath.functions.xml.GetElementFromXSLTFunction provide initializeCache function. So if you deploy a Java class in the same JVM as BPEL RT, then it can call this method and reinit the XSL cache. I did the same, created a Java class which calls GetElementFromXSLTFunction initializeCache and then exposed that piece of code as a WebService.&lt;br /&gt;&lt;br /&gt;Here are detailed steps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; (one time) Deploy the the XSL Refresh web service (&lt;a href="www.springsoa.com/images/xslrefresh/XSLTRefresh.ear"&gt;download&lt;/a&gt;) to same container as BPEL&lt;br /&gt;&lt;li&gt; Change the XSL from $ORACLE_HOME/bpel/domains/domain-name/tmp/.bpel.../.. as your need&lt;br /&gt;&lt;li&gt; go to: http://host:port/XSLTRefresh/RefreshXSLTPoolSoapHttpPort and hit invoke&lt;br /&gt;&lt;/ul&gt;This will ensure that new XSL changes will be in effect immediately. This approach came quite handy during development phase as I could avoid redeploying AIA processes for XSL changes and could have better turn around.&lt;b&gt;Option 2: XSL on Apache Server &lt;/b&gt;I think cleaner way would be to Putting XSLs outside the BPEL project and deploy them separately from the BPEL and ESB deployment. E.g. &lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;from expression=&amp;quot;ora:processXSLT('http://host:7777/xsl/Transform_IP_OP_Sample.xsl',bpws:getVariableData('inputVariable','payload'))&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;BPEL XSL engine doesn't cache the XSL handle if it is http based, but you can use the xsl refresh webservice if you see any issue depending on BPEL version you are using.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-5723328362158447782?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/5723328362158447782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=5723328362158447782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5723328362158447782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5723328362158447782'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/12/xsl-refresh-10g.html' title='XSL Refresh 10g'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-774730707369679174</id><published>2010-12-21T15:43:00.000-08:00</published><updated>2010-12-21T15:43:26.191-08:00</updated><title type='text'>IE8 with Oracle ESB 10g</title><content type='html'>We were having issue with ESB console when we upgraded from IE6 to IE8 browser. BPELConsole/AIA/OWSM Console just worked fine with IE8. If you use 10.1.3.5+, I think this issue is fixed, but for lower version of Oracle ESB you can use following to make it compatible with IE8 browser. &lt;br /&gt;&lt;br /&gt;For ESB Console:&lt;br /&gt;&lt;br /&gt;- Modify following files:&lt;br /&gt;&lt;br /&gt;esb-dt-container\applications\esb-dt\esb_console\esb\widgets\InstancesView.js and&lt;br /&gt;esb-dt-container\applications\esb-dt\esb_console\picasso\widgets\widgets.Perspective.js&lt;br /&gt;&lt;br /&gt;- In these files look for a line this.myEvents = [""] and comment this line out with "//"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-774730707369679174?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/774730707369679174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=774730707369679174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/774730707369679174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/774730707369679174'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/12/ie8-with-oracle-esb-10g.html' title='IE8 with Oracle ESB 10g'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4930577816437374322</id><published>2010-12-15T11:19:00.000-08:00</published><updated>2010-12-17T15:14:24.248-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jdbc driver version check'/><title type='text'>How to check JDBC driver version</title><content type='html'>Oracle Support Note: 396187.1 provides instructions on how to install a sample web application to test the database driver. It works great, and it is pretty simple process as shown below:&lt;br /&gt;&lt;br /&gt;1) download drvtest.ear from the Oracle support &lt;br /&gt;2) Deploy it desired container&lt;br /&gt;3) Goto http://&lt;server&gt;:&lt;port&gt;/drvtest/dbdetails.jsp&lt;br /&gt;enter username/password/url &lt;br /&gt;it provide information like below:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;JDBC Driver details&lt;br /&gt;=============&lt;br /&gt;JDBC Driver Name is ........ Oracle JDBC driver&lt;br /&gt;JDBC Driver Version is ..... 10.1.0.5.0&lt;br /&gt;JDBC Driver Major Version is 10&lt;br /&gt;JDBC Driver Minor Version is 1&lt;br /&gt;=============&lt;br /&gt;Database Details&lt;br /&gt;=============&lt;br /&gt;Database Product Name is ... Oracle&lt;br /&gt;Database Product Version is Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production&lt;br /&gt;With the Partitioning, OLAP and Data Mining options&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I found couple of issues with drvtest.ear file which forced me to write another sample app:&lt;br /&gt;1. This application opens connection and doesn't close&lt;br /&gt;2. This application is struts based and causes problem when you deploy oc4j_soa container (at least in 10.1.3.3.x). It works fine on other container&lt;br /&gt;3. Some time you want to use data source instead of direct connection &lt;br /&gt;&lt;br /&gt;I decompiled the code and modified for my need, and it was very easy to expose that piece of java code as web service and provide two separate operations:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;InitialContext initialContext = new InitialContext();&lt;br /&gt;DataSource dataSource = (DataSource) initialContext.lookup(dataSourceName);&lt;br /&gt;connection = dataSource.getConnection();&lt;br /&gt;DatabaseMetaData meta = connection.getMetaData();&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;1. You can deploy the &lt;a href="http://www.springsoa.com/images/customdrivertest/CustomDriverTest.ear"&gt;CustomDriverTest.ear&lt;/a&gt; to any oc4j container&lt;br /&gt;2. Goto http://host:port/CustomDriverTest/DriverCheckService?WSDL or http://host:port/CustomDriverTest/DriverCheckService&lt;br /&gt;it provides both operation - test by direct database connection or test by data source.&lt;br /&gt;3. It certainly closes connection after providing db information&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4930577816437374322?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4930577816437374322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4930577816437374322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4930577816437374322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4930577816437374322'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/12/how-to-check-jdbc-driver-version.html' title='How to check JDBC driver version'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-6381834134843154240</id><published>2010-12-15T11:10:00.000-08:00</published><updated>2010-12-15T11:32:55.642-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jdbc driver upgrade'/><title type='text'>JDBC Driver Upgrade for SOA/AIA 10g</title><content type='html'>Oracle SOA suite comes with 10.1.0.5 version of JDBC driver, which is pretty old I believe. If you are using newer version of database, it is worth upgrading the JDBC driver of SOA Suite or AIA to the database version you are using. &lt;br /&gt;&lt;br /&gt;If you are using 11g database, then 11g version of database driver does cause some problem with AIA console and EBS WF_Event complex payload, but as long as 10g version is concerned it is quite easy migration. &lt;br /&gt;&lt;br /&gt;For instance, we were using 10.2.0.5 version of database and wanted to upgrade to 10.2.0.5 JDBC drivers:&lt;br /&gt;&lt;br /&gt;1. Download 10.2.0.5 specific JDBC drivers from below&lt;br /&gt;  &lt;a href="http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html"&gt;http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;2. Copy all jar files to $ORACLE_HOME/JDBC10205/lib directory&lt;br /&gt;&lt;br /&gt;3. Add following to $ORACLE_HOME/j2ee/&lt;b&gt;CONTAINER_NAME&lt;/b&gt;/config/server.xml:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    &amp;lt;shared-library name=&amp;quot;oracle.jdbc&amp;quot; version=&amp;quot;10.2.0.5&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/JDBC10205/lib/classes12.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/JDBC10205/lib/classes12_g.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/JDBC10205/lib/classes12dms.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/JDBC10205/lib/classes12dms_g.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/JDBC10205/lib/ojdbc14.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/JDBC10205/lib/ojdbc14_g.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/JDBC10205/lib/ojdbc14dms.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/JDBC10205/lib/ojdbc14dms_g.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/j2ee/home/lib/ojms-provider.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/jdbc/lib/ocrs12.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/opmn/lib/ons.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;code-source path=&amp;quot;/aiaapp/oracle/product/10.1.3.1/OracleAS_1/rdbms/jlib/aqapi.jar&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;import-shared-library name=&amp;quot;oracle.dms&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;import-shared-library name=&amp;quot;oracle.gdk&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/shared-library&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4. Change $ORACLE_HOME/j2ee/&lt;b&gt;CONTAINER_NAME&lt;/b&gt;/config/system-application.xml file:&lt;br /&gt; (add : min-version="10.2.0.5)&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    &amp;lt;import-shared-library name=&amp;quot;oracle.jdbc&amp;quot; min-version=&amp;quot;10.2.0.5&amp;quot;/&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5. bounce the server&lt;br /&gt;&lt;br /&gt;6. check the driver version (&lt;a href="http://chintanblog.blogspot.com/2010/12/how-to-check-jdbc-driver-version.html"&gt;http://chintanblog.blogspot.com/2010/12/how-to-check-jdbc-driver-version.html&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-6381834134843154240?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/6381834134843154240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=6381834134843154240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/6381834134843154240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/6381834134843154240'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/12/jdbc-driver-upgrade-for-soaaia-10g.html' title='JDBC Driver Upgrade for SOA/AIA 10g'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-5956693454116232129</id><published>2010-12-02T13:17:00.000-08:00</published><updated>2010-12-02T14:12:13.870-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opmn ping timeout forward reverse ping'/><title type='text'>OPMN Ping timeouts</title><content type='html'>I did this exercise quite a while ago and thought of posting as I encountered this issue again. Basically, opmn manages all containers and does health check. It can restart the container if container doesn't respond in timely fashion. In opmn log file, it shows up as : [libopmnoc4j] Forcefully Terminating Process. During heavy load or temporary network failure, this is not desired behavior so it is better to control and fine tune such parameters.&lt;br /&gt;&lt;br /&gt;It is pretty scattered documentation on different parameters, so thought of putting them together. OPMN algorithm documentation can be found at : &lt;a href="http://www.oracle.com/technetwork/middleware/ias/opmn-101310-faq-128379.pdf"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By default opmn just comes with stop/start and restart timeout, which are used just during start/stop and restart as name suggest, but the run time algorithm uses different ping parameters:&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Different ping option from OPMN &lt;/b&gt;&lt;br /&gt;1. OS Process Check: Every 2 seconds OPMN queries the OS with the managed process id to see if it has terminated.&lt;br /&gt;2. Forward Ping: Periodically, 20 seconds by default, OPMN sends a ping message to the managed process and expects a result within 20 seconds.&lt;br /&gt;3. Reverse Ping: Every 20 seconds managed process sends OPMN a ping notification.&lt;br /&gt;&lt;br /&gt;Forward ping can be fine tuned with ping attribute in opmn.xml&lt;br /&gt;Reverse ping can be set using "reverseping" parameters in opmn.xml&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.springsoa.com/images/opmn/ping.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 748px; height: 482px;" src="http://www.springsoa.com/images/opmn/ping.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-5956693454116232129?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/5956693454116232129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=5956693454116232129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5956693454116232129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5956693454116232129'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/12/opmn-ping-timeouts.html' title='OPMN Ping timeouts'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7294051925263524962</id><published>2010-11-24T19:54:00.000-08:00</published><updated>2010-11-29T07:54:28.931-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BAM 11g'/><title type='text'>BAM 11g JVM Filter/Sort</title><content type='html'>I was working with BAM 11g and saw that I was not able to apply filter or sort when creating chart.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.springsoa.com/images/bam/DataScreen.PNG"&gt;&lt;img style="cursor: pointer; width: 908px; height: 373px;" src="http://www.springsoa.com/images/bam/DataScreen.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No error in log file makes even hard to troubleshoot. Finally, one of the metalink note (1077533.1) helped me out. Downgrading BAM JVM to jdk160_14_XXXX resolved the issue. You can either just change the JDK version of BAM or change it for whole domain by changing $DOMAIN_HOME/bin/setDomainEnv.sh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7294051925263524962?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7294051925263524962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7294051925263524962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7294051925263524962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7294051925263524962'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/11/bam-11g-jvm-filtersort.html' title='BAM 11g JVM Filter/Sort'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7281480833167529626</id><published>2010-09-29T11:13:00.000-07:00</published><updated>2010-09-29T12:32:14.990-07:00</updated><title type='text'>BPEL Fault Generation - adapter framework</title><content type='html'>Recently we had to dig into how BPEL was generating Runtime or Binding Fault. E.g. we were calling BRM adaper and based on BRM logs we could see, it was returning and error code. On BPEL console, we saw that error code was prefixed with &lt;span style="font-weight: bold;"&gt;BRM-&lt;/span&gt;. We had no idea what part was doing this conversion and that brought us to the point to analyze BPEL and Adapter code to figure out how it works with EIS system and how EIS fault gets converted to BPEL fault.  It should be generic across all the adapter, as BPEL PM would be just calling the adapter and getting generic exception.&lt;br /&gt;&lt;br /&gt;It was quite obvious that BRM- would be somewhere in the BRM adapter and that exception would be converted to Fault XML, but we wanted to find exact place where it would happen. Upon analyzing multiple files, we ended up with following findings.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;oracle.tip.adapter.brm.BRMInteraction had hard coded BRM- when it was throwing PCResourceException&lt;/li&gt;&lt;li&gt;com.collaxa.cube.ws.WSIFInvocationHandler.WSIFInvocationHandler is getting this exception and converting this in to Fault XML message which is seen in the BPELConsole&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Details&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Each adapter entry point would be Interaction, and all adapter will implement that interface&lt;/li&gt;&lt;li&gt;com.collaxa.cube.ws.WSIFInvocationHandler.WSIFInvocationHandler.invoke seems to be the master piece which calls all the adapters via WSIF - especially you can see invokeRequestHeaderHandlers and invokeLocalService calls here&lt;/li&gt;&lt;li&gt;invokeLocalService  converts adapter level exception (PCResourceException) to WSIFException&lt;/li&gt;&lt;li&gt;invoke constructs SOAP fault XML message based on WSIFException&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7281480833167529626?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7281480833167529626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7281480833167529626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7281480833167529626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7281480833167529626'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/09/bpel-fault-generation-adapter-framework.html' title='BPEL Fault Generation - adapter framework'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4773012446182324578</id><published>2010-09-27T10:38:00.000-07:00</published><updated>2010-09-27T13:43:14.276-07:00</updated><title type='text'>AIA deployment error: Please set the ORACLE_HOME environment variable</title><content type='html'>When you deploy AIA project from Jdeveloper (10.1.3.x release), you usually get an error: Please set the ORACLE_HOME environment variable. Easiest way to solve is to setup dummy Oracle and AIA home on your machine. You don't need to install entire SOA or AIA suite but need to setup the directory structure as below and copy the appropriate directory content from actual AIA installation. It comes to be about 40 to 50 MB.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.springsoa.com/images/oraclehome/Profile_Set.PNG"&gt;&lt;img style="cursor: pointer; width: 827px; height: 250px;" src="http://www.springsoa.com/images/oraclehome/Profile_Set.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once it is setup, you can setup following environment variables:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;AIA_HOME     D:\Profiles\DummyHomes\DummyAIAHome&lt;/li&gt;&lt;li&gt;ORACLE_HOME  D:\Profiles\DummyHomes\DummyOracleHome&lt;/li&gt;&lt;li&gt;BPEL_HOME     D:\Profiles\DummyHomes\DummyOracleHome\bpel&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Once Jdeveloper is restarted, this error should go away.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: it was quite obvious that something else will fail as soon as I hard code my ORACLE_HOME. It didn't take long me to find, my Oracle XE stopped working after my work station restart. I think it is good practice to not set ORACLE_HOME and set only when you need to do critical AIA deployment.&lt;br /&gt;&lt;br /&gt;As another work around, you can only try to set AIA_HOME and BPEL_HOME, and based on build.xml file, it might just work fine, that way it doesn't cause problem with existing SOA or ORACLE DB installation on your machine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4773012446182324578?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4773012446182324578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4773012446182324578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4773012446182324578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4773012446182324578'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/09/aia-deployment-error-please-set.html' title='AIA deployment error: Please set the ORACLE_HOME environment variable'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-304541644674911263</id><published>2010-09-27T10:34:00.000-07:00</published><updated>2010-09-27T10:38:49.147-07:00</updated><title type='text'>How to install &amp; get list of AIA patches</title><content type='html'>To get list of all the patches installed in Oracle Application Server (10g release), you can run following command to get all patches:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;To list patches installed in Oracle Home&lt;/b&gt;&lt;br /&gt;set ORACLE_HOME=&lt;br /&gt;cd $ORACLE_HOME/OPatch&lt;br /&gt;opatch lsinventory&lt;br /&gt;&lt;br /&gt;For AIA, there is separate OPATCH to install and to get list of patches. Here are the steps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Download latest version of AIA Opatch from metalink (p5912518_111000_GENERIC.zip)&lt;/li&gt;&lt;li&gt;Set following homes&lt;/li&gt;&lt;/ul&gt;export ORACLE_HOME=   (e.g. /home/oracle/product/10.1.3.1/OracleAS_1)&lt;br /&gt;export AIA_HOME=      (e.g. /home/oracle/aiahome )&lt;br /&gt;export SOA_HOME=      (e.g. /home/oracle/product/10.1.3.1/OracleAS_1)&lt;br /&gt;export PATH=          (e.g. /home/oracle/5912518/OPatch:$PATH)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: Make sure AIA Opatch is in the path and it is the first entry or prior to any other OPATCH entry.&lt;br /&gt;&lt;br /&gt;Now you can run following command to get list of AIA patch or install AIA patch&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;List of AIA patch&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;opatch lsinventory -invPtrLoc $AIA_HOME/oraInst.loc -oh $AIA_HOME -jre $SOA_HOME/jdk/jre &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Install AIA patch&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to the directory where patch is unzipped and run:&lt;/li&gt;&lt;li&gt;opatch apply -invPtrLoc $AIA_HOME/oraInst.loc -oh $AIA_HOME -jre $SOA_HOME/jdk/jre&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-304541644674911263?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/304541644674911263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=304541644674911263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/304541644674911263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/304541644674911263'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/09/how-to-install-get-list-of-aia-patches.html' title='How to install &amp; get list of AIA patches'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-1431120703357342736</id><published>2010-09-23T15:30:00.000-07:00</published><updated>2010-09-23T22:43:42.637-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='remove wsse'/><category scheme='http://www.blogger.com/atom/ns#' term='owsm'/><title type='text'>Removing WSSE Headers in OWSM</title><content type='html'>Recently had chance to work with WSSE headers in OWSM. WSSE information is stored in SOAP Header. When we were getting WSSE security information in SOAP envelope (header), and we were using "Verify Signature" to verify signature. Verify Signature has step to remove the WSSE header so that this signature doesn't get propagated to BPEL, otherwise BPEL will throw exception. E.g.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.springsoa.com/images/removeheader/RemoveHeader.PNG"&gt;&lt;img style="cursor: pointer; width: 724px; height: 400px;" src="http://www.springsoa.com/images/removeheader/RemoveHeader.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you install entire SOASuite in one container (oc4j_soa) and use above option to remove Security headers, it works great. When SOA suite is installed as per Enterprise Deployment Guide where gateway and policy manager are in separate container than oc4j_soa, OWSM doesn't remove the header even with this option.&lt;br /&gt;&lt;br /&gt;Quick resolution to this issue is to use XSL and remove the header completely. Earlier we used following XSL to remove entire SOAP header.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.springsoa.com/images/removeheader/XSL_1.PNG"&gt;&lt;img style="cursor: pointer; width: 440px; height: 467px;" src="http://www.springsoa.com/images/removeheader/XSL_1.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We faced the problem with XSL as it removes entire SOAP header. We can use following XSL which can just remove WSSE header from entire SOAP envelope, so if there are custom element in SOAP header, it doesn't get removed.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.springsoa.com/images/removeheader/XSL2.PNG"&gt;&lt;img style="cursor: pointer; width: 440px; height: 350px;" src="http://www.springsoa.com/images/removeheader/XSL2.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-1431120703357342736?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/1431120703357342736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=1431120703357342736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1431120703357342736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1431120703357342736'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/09/removing-wsse-headers-in-owsm.html' title='Removing WSSE Headers in OWSM'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4696263601096129313</id><published>2010-09-16T21:04:00.000-07:00</published><updated>2010-09-16T21:14:59.969-07:00</updated><title type='text'>Non intrusive set title for BPEL, AIA</title><content type='html'>If you check my blog  &lt;a href="http://chintanblog.blogspot.com/2010/03/bpel-set-title.html"&gt;http://chintanblog.blogspot.com/2010/03/bpel-set-title.html&lt;/a&gt; you can see how to configure set title for BPEL process and why it is almost absolutely necessary for enterprise implementation. It also makes search in BPEL console quite useful &lt;a href="http://chintanblog.blogspot.com/2010/03/bpel-title-wildcard-search_01.html"&gt;http://chintanblog.blogspot.com/2010/03/bpel-title-wildcard-search_01.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We did encounter multiple issues which forced us to think non intrusive approach of setting title of BPEL process&lt;br /&gt;&lt;ul&gt;&lt;li&gt;We had to change title of more than 80 processes and writing logic and changing each process was very cumbersome (it had to go through un-necessary QA cycles)&lt;/li&gt;&lt;li&gt;Lot of process were already deployed and had lot of instances, we couldn't go back in time and set the title for them&lt;/li&gt;&lt;li&gt;Due to business requirement, if we plan to change the title, we have to go through this cycle again&lt;/li&gt;&lt;li&gt;We didn't want to touch OOTB process which comes with PIP, but we needed our custom title for those&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Here is what I came up with:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.springsoa.com/images/settitle/set_title.png"&gt;&lt;img style="cursor: pointer; width: 525px; height: 426px;" src="http://www.springsoa.com/images/settitle/set_title.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Implementation Steps&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;EJB 3.0 timer which polls for new instances in BPEL DB&lt;/li&gt;&lt;li&gt;Via JDBC, extract Audit Information and Audit Trail (it would be configurable how much data to extract)&lt;/li&gt;&lt;li&gt;Once payload is available, apply XPath (based on configuration) to extract the title for a particular process&lt;/li&gt;&lt;li&gt;Update the title of the BPEL process&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;It sounded pretty complicated and resource exhaustive, but when I implemented and ran on the huge amount of data. I could see that we could set title of individual process in just 0.03 seconds, which was quite acceptable. It runs in separate JVM and doesn't talk with BPEL Runtime Engine so it doesn't increase any load on BPEL. It does increase some load on database but it is just select and update, there is no heavy processing going inside the database.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;With this approach, we could achieve following&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Centralized approach to configure and set the titles&lt;/li&gt;&lt;li&gt;We could change title of OOTB processes without touching the code&lt;/li&gt;&lt;li&gt;We could set the title of old instances (even stale instances)&lt;/li&gt;&lt;li&gt;Changing title was just matter of configuration and pure XPath. I also increased the size to title from 50 to 256, so you could put more data in title (e.g. order number, organization id, etc...)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4696263601096129313?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4696263601096129313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4696263601096129313' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4696263601096129313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4696263601096129313'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/09/non-intrusive-set-title-for-bpel-aia.html' title='Non intrusive set title for BPEL, AIA'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-3869464091372053266</id><published>2010-09-12T18:55:00.000-07:00</published><updated>2010-09-13T06:20:24.732-07:00</updated><title type='text'>Oracle AIA SOA - Multi JVM - Vertical Scaling</title><content type='html'>It is pretty old concept and I tried earlier couple of times but this time I had much more time to do through analysis of Oracle Application Server with multi &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;JVM&lt;/span&gt; container and see how it works out with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;SOA&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;AIA&lt;/span&gt; in general.&lt;br /&gt;&lt;br /&gt;Configuration of multi &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;JVM&lt;/span&gt; is fairly straight forward. All you need to do is change number of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;JVM&lt;/span&gt; for container from EM or change &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;numprocs&lt;/span&gt; from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;opmn&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;xml&lt;/span&gt; for a particular container. You can get more information from &lt;a href="http://mike-lehmann.blogspot.com/2006/09/scaling-oracleas-with-multiple-jvms.html"&gt;http://mike-lehmann.blogspot.com/2006/09/scaling-oracleas-with-multiple-jvms.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(Note: Although you can not change number of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;JVM&lt;/span&gt; for the container where EM is running, so if you install basic &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;SOA&lt;/span&gt; suite, adding &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;JVM&lt;/span&gt; would cause problem with EM.)&lt;br /&gt;&lt;br /&gt;So we added 2 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;JVM&lt;/span&gt; to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;OC&lt;/span&gt;4J_&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;SOA&lt;/span&gt; container and tried couple of test cases:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) Test case: Make sure load is distributed evenly&lt;/span&gt;&lt;br /&gt;I believe it is due to mod_&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;oc&lt;/span&gt;4j &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;config&lt;/span&gt; or default option, but load was distributed in exactly round robin fashion as per log file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) Functionality testing&lt;/span&gt;&lt;br /&gt;Well, I was not involved much into functional stuff, but seems like functional stuff worked like a charm. We didn't see any issue with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;BPEL&lt;/span&gt; or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;ESB&lt;/span&gt; communication.&lt;br /&gt;&lt;br /&gt;At this point we were pretty satisfied with results and about to move forward and then we thought of checking couple of configuration and deployment stuff for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;AIA&lt;/span&gt; and things started looking pretty disappointing:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) &lt;/span&gt;&lt;span style="font-weight: bold;" class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;AIA&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; Configuration change&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Test case:&lt;/span&gt; Changing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;AIA&lt;/span&gt; configuration file and using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;AIA&lt;/span&gt; console to reload the configuration. Expected output would be to have new configuration in both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;JVM&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Result:&lt;/span&gt; Only one &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;JVM&lt;/span&gt; loads the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;AIA&lt;/span&gt; Configuration. I tried loading multiple times using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;UI&lt;/span&gt;, it still loads only on one &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;JVM&lt;/span&gt;. May be http connection had some static stuff with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;OC&lt;/span&gt;4J. Removing caching or trying from different machine might fix this issue but I would still consider it as failure scenario.&lt;br /&gt;Note: Restarting server certainly forces both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;JVM&lt;/span&gt; to load new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;AIA&lt;/span&gt; configuration file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4) &lt;/span&gt;&lt;span style="font-weight: bold;" class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;BPEL&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; Configuration change &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Test case:&lt;/span&gt; Changing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;BPEL&lt;/span&gt; configuration (e.g. audit level or logging level) from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;BPEL&lt;/span&gt; console. Expected output would be to have new configuration in both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;JVM&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Result:&lt;/span&gt; Only one &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;JVM&lt;/span&gt; loads the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;BPEL&lt;/span&gt; configuration.&lt;br /&gt;Note: Restarting server certainly forces both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;JVM&lt;/span&gt; to load new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;BPEL&lt;/span&gt; configuration&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5) &lt;/span&gt;&lt;span style="font-weight: bold;" class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;BPEL&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; deployment &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Test case:&lt;/span&gt; Redeploying &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;BPEL&lt;/span&gt; process with same version with minor code change. Expected output would be to have new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;BPEL&lt;/span&gt; code in both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;JVM&lt;/span&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Result:&lt;/span&gt; Only one &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;JVM&lt;/span&gt; picks up new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;BPEL&lt;/span&gt; deployed &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_44"&gt;suitcase&lt;/span&gt;. Second &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;JVM&lt;/span&gt; was still running with old &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;BPEL&lt;/span&gt; code.&lt;br /&gt;Note: Restarting server forces both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;JVM&lt;/span&gt; to load latest version of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;BPEL&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_49"&gt;suitcase&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6) &lt;/span&gt;&lt;span style="font-weight: bold;" class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;ESB&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; Configuration and Deployment testing.&lt;/span&gt;&lt;br /&gt;I was really hoping this test to work smooth due to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;ESB&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;DT&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;ESB&lt;/span&gt;-RT concept. So as long as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;ESB&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;DT&lt;/span&gt; is in &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_56"&gt;separate&lt;/span&gt; container with only one &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;JVM&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;ESB&lt;/span&gt; RT (may be in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_59"&gt;OC&lt;/span&gt;4J_&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_60"&gt;SOA&lt;/span&gt;) can have multiple &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_61"&gt;JVM&lt;/span&gt; and deployment and configuration change would still work fine. Unfortunately I didn't have access to correct environment where &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;ESBDT&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_63"&gt;ESBRT&lt;/span&gt; were database persisted, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_64"&gt;ESBDT&lt;/span&gt; in &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_65"&gt;separate&lt;/span&gt; container.&lt;br /&gt;&lt;br /&gt;With &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_66"&gt;ESB&lt;/span&gt;-RT and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_67"&gt;ESB&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_68"&gt;DT&lt;/span&gt; in same container (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_69"&gt;oc&lt;/span&gt;4j_&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_70"&gt;soa&lt;/span&gt;) and having them in-memory topics caused the similar effect as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_71"&gt;BPEL&lt;/span&gt; during configuration &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_72"&gt;chagne&lt;/span&gt; and deployment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In future, I might publish results on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_73"&gt;ESB&lt;/span&gt; with DB persisted topics and some &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_74"&gt;interesting&lt;/span&gt; stuff I saw on Java based application (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_75"&gt;webapp&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_76"&gt;webservices&lt;/span&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-3869464091372053266?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/3869464091372053266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=3869464091372053266' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3869464091372053266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3869464091372053266'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/09/oracle-aia-soa-multi-jvm-vertical.html' title='Oracle AIA SOA - Multi JVM - Vertical Scaling'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-871370528888564427</id><published>2010-09-10T13:16:00.001-07:00</published><updated>2010-09-14T12:27:24.731-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='CAVS'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='AIA'/><title type='text'>CAVS Configuration</title><content type='html'>I have been using CAVS for quite a while but didn't see lot of documentation on how to configure it so just thought blogging about it. I have also been using iTKO Lisa for a long time which is much richer in functionality than CAVS, and maybe I will write an article about it someday.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Brief Summary&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;CAVS (Composite Application Validation System) is mainly used for simulating your integration points for composite testing. It can basically mimic the end system and validate your request and send valid response upon successful validation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Technical details&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;It is a servlet. URL (http://host:port/AIAValidationSystemServlet/syncresponsesimulator). You can configure multiple simulator instances and it get recognized by simid parameter.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It is part of AIAApplication ($CONTAINER_HOME/applications/AIAApplication/ValidationSystemServlet.war)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Execution logs can be found at ($CONTAINER_HOME/application-deployments/AIAApplication/oc4j_soa_default_group_1/application.log)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to use:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario:&lt;/b&gt;&lt;br /&gt;Let's say we have simple Echo service, which returns upper case data back. We want to validate the request that, it has input and return the static response back.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.springsoa.com/images/cavs/ReqRes.png"&gt;&lt;img style="cursor: pointer; width: 660px; height: 422px;" src="http://www.springsoa.com/images/cavs/ReqRes.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Configuration steps:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Login to AIA console (&lt;a href="http://host:port/AIA"&gt;http://host:port/AIA&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click on Validation System (GO)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click on Create Simulator&lt;br /&gt;&lt;a href="http://www.springsoa.com/images/cavs/CreateSimulator.png"&gt;&lt;img style="cursor: pointer; width: 948px; height: 383px;" src="http://www.springsoa.com/images/cavs/CreateSimulator.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Enter the request and response as below (Make sure to include namespace for both request and response and don't remove CAVS namespace)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click Next&lt;br /&gt;&lt;a href="http://www.springsoa.com/images/cavs/CreateSim_Req.png"&gt;&lt;img style="cursor: pointer; width: 600px; height: 372px;" src="http://www.springsoa.com/images/cavs/CreateSim_Req.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.springsoa.com/images/cavs/CreateSim_Res.png"&gt;&lt;img style="cursor: pointer; width: 600px; height: 330px;" src="http://www.springsoa.com/images/cavs/CreateSim_Res.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click on Request and Generate XPath (this will generate xpath for all possible combinations)&lt;br /&gt;&lt;a href="http://www.springsoa.com/images/cavs/Page2_1.png"&gt;&lt;img style="cursor: pointer; width: 600px; height: 399px;" src="http://www.springsoa.com/images/cavs/Page2_1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make changes to validation as necessary. E.g. I made one nodekey (which is required) and just changed "equal to" to "is valid" operation for input.&lt;br /&gt;&lt;a href="http://www.springsoa.com/images/cavs/Page2_2.png"&gt;&lt;img style="cursor: pointer; width: 1377px; height: 413px;" src="http://www.springsoa.com/images/cavs/Page2_2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click on Save and record simulator id number&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now it is ready to tested with SOAP UI and end point would be http://host:port/AIAValidationSystemServlet/syncresponsesimulator?simid=&lt;&lt;&gt;&gt; or http://host:port/AIAValidationSystemServlet/syncresponsesimulator (generic). If you use generic one, it will compare against all simulator to get exact match&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;AIA Configuration&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Out of the box always have support for real or CAVS endpoint for any partnerlink. If you are implementing custom code make sure you use dynamic parterlink for AIA so that it has CAVS support (more information at: http://chintanblog.blogspot.com/2010/03/aia-bpel-dynamic-partnerlink-lookup.html)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In AIAHome/config/AIAConfigurationProperties.xml file, make following changes:&lt;br /&gt;&lt;a href="http://www.springsoa.com/images/cavs/AIAConfig.png"&gt;&lt;img style="cursor: pointer; width: 1113px; height: 330px;" src="http://www.springsoa.com/images/cavs/AIAConfig.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-871370528888564427?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/871370528888564427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=871370528888564427' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/871370528888564427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/871370528888564427'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/09/cavs-configuration.html' title='CAVS Configuration'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4268776407573455216</id><published>2010-08-03T17:00:00.000-07:00</published><updated>2010-08-03T17:06:56.657-07:00</updated><title type='text'>AIA Error Codes</title><content type='html'>&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;" id="internal-source-marker_0.5936619254506974"&gt;I  was working on AIA error handling and found very weird thing about how  AIA was handling its error codes and description. Error codes are pretty  much sporadic in .bpel or .xsl files, and aia:getErrorMessage is used  to get error description for the error code. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA gets error messages from following file:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;$oracle_home/bpel/system/classes/oracle/apps/aia/core/eh/i18n/EHResourceBundle.class&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;table style="border: medium none; border-collapse: collapse;"&gt;&lt;tbody&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;p style="text-align: center; margin-top: 0pt; margin-bottom: 0pt;"&gt;&lt;span style="font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;Error Code&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;p style="text-align: center; margin-top: 0pt; margin-bottom: 0pt;"&gt;&lt;span style="font-size: 14pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: bold; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;Error Message&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAINF_1001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Input log level for IsLoggingEnabled function is incorrect&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAINF_1002&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; No corrective action string specified for the given corrective action code&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAINF_1003&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; No error message has been specified for the input key&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMBMPI_0001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Maxitems requested is less than the Threshold/Number of records returned from the billing system&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMBMPI_0002&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Account/Billing Profile being sent is not synced to the billing system&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMCMPI_0001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; EBMHeader/Sender/ID is required&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMCMPI_0002&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; EBMHeader/Target/ID is required&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMCMPI_0003&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;  Account Sequence Error:  Pay-From Accounts and Billing Profiles must  appear before dependent/subordinate Accounts and Billing Profiles&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMCMPI_0004&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Subordinate account cannot have multiple parent accounts&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMCMPI_0005&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;  Ambiguous subordinate bill profile update: There are multiple distinct  Pay-From-Party Billing Profile references associated with a single Prior  Pay-From-Party Billing Profile reference&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMCMPI_0006&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; All existing subordinate bill profiles are not included in the move account request&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAINF_2001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Error message for getErrorMessage XPath verification&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAO2C2_1001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Timeout while waiting for a response from the InterfaceCustomerToFulfillmentEBF service.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAO2C2_1002&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Timeout while waiting for a response from the InterfaceSalesOrderToCustomerEBFV2 service.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAO2C2_1003&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Timeout while waiting for a response from the CreateSalesOrder EBS service operation.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAO2C2_1004&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Timeout while waiting for a response from the UpdateSalesOrder EBS service operation.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAO2C2_1005&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; This order has already been synced.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAO2C2_1006&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Account could not be queried. Please make sure the Account exists in the system&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAO2C2_1007&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Timeout while waiting for a response from the SyncCustomerPartyList EBS service operation.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAO2C2_1008&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Credit Check failed. Please contact your System Administrator.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAMDM_1001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Timeout while waiting for a response from the SyncCustomerPartyList EBS service operation.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAMDM_1002&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Timeout while waiting for a response from the FetchCustomerPartyEBF service.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAMDM_1003&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Invalid QueryCode. Valid values are: MATCH_PERSON or MATCH_ORGANIZATION.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAMDM_1004&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Invalid QueryCode. Valid values are: FETCH_PERSON or FETCH_ORGANIZATION.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAMDM_1005&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Cross-Reference ID lookup failed or returned no associated IDs&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIARTL2PSFT_1001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Invalid Requesting System; Requesting Systems must be RESA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIARTL2PSFT_1002&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Invalid Set Of Books Id; Set Of Books Id must in BUSINESS_UNIT DVM&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIARTL2PSFT_1003&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Invalid Currency Conversion Type Code; Currency Conversion Type Code is not in CURRENCYEXCHANGE_CONVERSIONTYPECODE DVM&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMOMPI_0001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Dates Validation Falied : Either one of the Purchase Date/Cycle Start Date/ Usage Start Date should be set to future&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMOMPI_0002&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Date Validation Falied : Purchase Date should be set to future&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMOMPI_0003&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;  Purchased promotion instance does not exist for a promotion that was  previously purchased.\240\240 A data upgrade script was not run.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMOFMPI_0001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Data Insufficient for Trouble Ticket Creation. Order Originating System Code not available&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIACOMOFMPI_0002&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Data Insufficient for Trouble Ticket Creation. Order ID not available&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; For additional information go to &lt;soa_home&gt;/agile/ais/fileResult and review the following file:&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0002&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; There are branch plants in the input message that do not have a mapped value in the AGILE_TARGET_SITE_MAPPING DVM&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0003&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; None of the items selected have been integrated&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0004&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; None of the engineering change orders selected have been integrated&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0005&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;  Unable to find a Agile Site to branch plant mapping.  Ensure all of the  sites for the items on the Change are properly mapped or a default is  set in AGILE_SITE_TARGET_MAPPING DVM&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0006&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Invalid Batch Quantity: All Bill of Materials Batch Quantity must be equal to Zero.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0007&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;  Invalid Bill Of Materials Type: All Bill of Materials Type must be  equal to 'DEFAULT_BOM_TYPE' AIA Configuration Property value.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0008&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;  Invalid Bill Of Materials Input: Multiple Bill of Materials for the  same Parent Item is not allowed when 'MULTISITE_ENABLED' property is set  to 'FALSE'.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0009&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;  Invalid Bill Of Materials Input: Bill Of Materials Components with  'Non-Stock' Stocking type is not allowed when 'MULTISITE_ENABLED'  property is set to 'TRUE'.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0010&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Failed&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0011&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Release ECO SDK Execution Failed: &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0012&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Could not find Change Order workflow: &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0013&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; File does not exist: &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0014&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; None of the Items selected have associated Branch Plants&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0015&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; The Change Order Not found - &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAAGILEJDEE1_0016&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt; Invalid Item Revision Level: Make sure 'ITEM_REVISION_LEVEL' Property in AIA Configuration Properties is not Blank&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 0px;"&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;AIA_ERR_AIAEBSI_0001&lt;/span&gt;&lt;/td&gt;&lt;td style="border: 1px dotted rgb(170, 170, 170); vertical-align: top; padding: 8px;"&gt;&lt;span style="font-size: 8pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;  Failed to fetch the Sales Representative Resource ID. Please make sure  the Sales Representative email addresses are identical in both systems&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;It  was quite disappointing to see that all error codes and error messages  are defined in a Java class instead of a property file. if someone needs  to change error message or add new error code and error message, it is  impossible unless you hack the Java code and recompile it.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline;"&gt;It  does makes sense to create a custom framework to store all your error  codes and error messages so that you don’t get bound to the AIA  boundaries. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4268776407573455216?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4268776407573455216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4268776407573455216' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4268776407573455216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4268776407573455216'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/08/aia-error-codes.html' title='AIA Error Codes'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4272316145514260903</id><published>2010-07-07T22:02:00.001-07:00</published><updated>2010-07-07T22:11:39.496-07:00</updated><title type='text'>Siebel Web Service with SoapUI</title><content type='html'>&lt;span style=";font-family:Arial;color:black;"  &gt;I was working with Siebel webservices for Query Custom&lt;/span&gt;&lt;span style=";font-family:Arial;color:black;"  &gt;er and found that it was working fine from BPEL but when I try from soapUI, it returns junk characters. Upon intercepting both traffic using tcpmon, we found the issue was in one of the HTTP header. Basically "Accept-Encoding: gzip,deflate" which was sent from SoapUI was causing the problem. &lt;/span&gt;&lt;div&gt;&lt;p&gt;&lt;span xmlns=""&gt;&lt;span style=";font-family:Arial;color:black;"  &gt;In soapUI, you can disable this particular header via following option. Once the option is enabled, you can invoke Siebel web service doesn't return junk data and&lt;/span&gt;&lt;/span&gt;&lt;span xmlns=""&gt;&lt;span style=";font-family:Arial;color:black;"  &gt; returns valid XML data. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GDyKTmftp-c/TDVc69kMNbI/AAAAAAAAAEs/Yi3FPac0bkA/s1600/final.jpg"&gt;&lt;img style="cursor: pointer; width: 1000px; height: 500px;" src="http://3.bp.blogspot.com/_GDyKTmftp-c/TDVc69kMNbI/AAAAAAAAAEs/Yi3FPac0bkA/s1600/final.jpg" alt="" id="BLOGGER_PHOTO_ID_5491397488676713906" border="0" /&gt;&lt;/a&gt;&lt;p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4272316145514260903?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4272316145514260903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4272316145514260903' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4272316145514260903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4272316145514260903'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/07/siebel-web-service-with-soapui.html' title='Siebel Web Service with SoapUI'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GDyKTmftp-c/TDVc69kMNbI/AAAAAAAAAEs/Yi3FPac0bkA/s72-c/final.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-578876273385264927</id><published>2010-06-30T09:22:00.000-07:00</published><updated>2010-06-30T09:26:27.212-07:00</updated><title type='text'>Java forever</title><content type='html'>Not related with Oracle SOA. It was just fun to watch this after a long busy day .. &lt;a href="http://www.youtube.com/watch?v=fzza-ZbEY70&amp;amp;feature=popt00us0b"&gt;Java forever&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-578876273385264927?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/578876273385264927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=578876273385264927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/578876273385264927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/578876273385264927'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/06/java-forever.html' title='Java forever'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-2546319040972016302</id><published>2010-06-16T18:19:00.001-07:00</published><updated>2010-06-16T18:23:41.377-07:00</updated><title type='text'>BPEL Version Redirect</title><content type='html'>I was working with the client and we had situation were multiple BPEL process versions were deployed with one of them being the default version (e.g. 1.0, 2.0*, 3.0). If client is using is version agnostic WSDL and end point URL, (as below), then it is not major concern because BPEL will route it to default version and everything will work like a charm.&lt;p&gt;http://host:port/orabpel/&amp;lt;domain&amp;gt;/&amp;lt;process&amp;gt;/&amp;lt;process&amp;gt;?wsdl&lt;/p&gt;&lt;p&gt;http://host:port/orabpel/&amp;lt;domain&amp;gt;/&amp;lt;process&amp;gt;&lt;/p&gt;&lt;p&gt;That was not the case we had. One of the client was using version specific URL, and we didn’t have time and control over the client to change their URL right away. Of course, the long term solution would be use version agnostic URL, gateway or UDDI, but here is quick and dirty way if we just want to route old version request to new version using Apache redirect rule.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div id="lh5y" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_217dzjfdknt_b" style="height: 107px; width: 1106px;" /&gt;&lt;br /&gt;This basically routes the request from old-version to new-version for WSDL or End-Point request. If we want to make it generalize, to redirect all versions to a specific version (doesn't matter if that is default or not), it would be following. This can come pretty handy if version management goes out of hand.. &lt;/div&gt;&lt;p&gt; &lt;/p&gt;&lt;div id="e5bx" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_218dj69kxgf_b" style="height: 109px; width: 906px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;After making it generalized, I thought of taking this approach to the next level. As all of us know that to utilize ESB-&amp;gt;BPEL native binding (which is highly recommended by Oracle, especially in AIA world), we have to configure routing rules to point to specific version of BPEL process. Every time new version of BPEL is deployed it causes routing rule to change. I thought may be I can fool ESB with this redirect even if it is using native binding, but this trick but didn’t work out with native binding. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-2546319040972016302?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/2546319040972016302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=2546319040972016302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2546319040972016302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2546319040972016302'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/06/bpel-version-redirect.html' title='BPEL Version Redirect'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-1284169752228129715</id><published>2010-05-03T13:23:00.001-07:00</published><updated>2010-05-03T13:56:10.660-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XSLT troubleshooting FOTY0001 AIA'/><title type='text'>XSLT Troubleshooting</title><content type='html'>May be it is just based on my experience, but I feel in general XSLT doesn’t have lot of troubleshooting support. E.g. in Java, no matter what JVM you use, you can pretty much get stack trace (even in NPE errors). In XSLT, based on XML parser you use, sometime you get line numbers and some time you don’t, plus it doesn't provide lot of details in log. Moreover there are not really any good tools to do much troubleshooting. In AIA world, it gets even crazier. Most of the XSLT functions come with AIA just runs only on server side, so you are hopeless and helpless when you want to do some troubleshooting on your local box. It gets even worse, when you get FOTY0001 type errors. Sometime you get more details in log file when there is FOTY0001, and sometime you don't.&lt;br /&gt;&lt;br /&gt;Here are couples of ideas which can make your life easier.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1) XSL comment&lt;/b&gt;&lt;br /&gt;You can put XSL comment in your code, so it will show up when XSLT is completed. It does help a lot when you are trying to just print values of variables. Pretty much all credit goes to Mahesh Narayanaswamy (absolute XSL genius) for this suggestion.&lt;br /&gt;&lt;br /&gt;&lt;div id="h98b" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_214djftc6d6_b" style="height: 140px; width: 501px;" /&gt;&lt;/div&gt;&lt;b&gt;2) XSL out&lt;/b&gt;&lt;br /&gt;This was very cool idea came out of disucssion with Amol Vaidya. XSL comment didn’t help much when XSLT was completely breaking and we were unable to get the line number or the root cause. All we needed is the similar capability like System.out inside the XSL, so we know how far in XSL we went and what are the variables. We just want to get all information before the point of failure. A custom XSLT log function came pretty handy for putting trace log in your XSLT. This way we can get as much information about the XSLT before the point of failure.&lt;br /&gt;We wrote custom XSL function called XSLTLog, and registered that function in BPEL RT and ESB XSL Library.&lt;br /&gt;&lt;br /&gt;&lt;div id="aobb" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_21587jkh2gk_b" style="height: 412px; width: 851px;" /&gt;&lt;/div&gt;&lt;b&gt;3) Java code&lt;/b&gt;&lt;br /&gt;I also wrote a Java code which can take XML input and execute the XSL. We have to register this Java code to the server as lot of AIA XSL functions relies on server side components. We also took it further to find exact line number in XSL using binary search approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-1284169752228129715?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/1284169752228129715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=1284169752228129715' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1284169752228129715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1284169752228129715'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/05/xslt-troubleshooting.html' title='XSLT Troubleshooting'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-2678296485312263918</id><published>2010-04-28T14:28:00.001-07:00</published><updated>2010-04-28T21:30:16.790-07:00</updated><title type='text'>BPEL ReadOnly Console</title><content type='html'>&lt;div&gt;It was my first blog which I wrote almost three years ago.&amp;nbsp;&lt;a href="http://chintanblog.blogspot.com/2007/12/i-saw-numerous-people-asking-about-bpel_290.html"&gt;http://chintanblog.blogspot.com/2007/12/i-saw-numerous-people-asking-about-bpel_290.html&lt;/a&gt;&amp;nbsp;Since then, pretty much all my clients and a lot of other companies used this approach. I also saw many other blogs copied this idea or put enhancement to it. Anyways, one of my client pointed out this metalink article: 852840.1. Metalink had reference to my blog!! Wow, it certainly makes me feel good when multi billion dollar organization put reference to my tiny little site.&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div id="a5:8" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_212gxkscvgk_b" style="height:664px;width:909px"&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;On a smaller scale, but it still reminds what Margaret said: &amp;quot;&lt;i&gt;Never doubt that a small group of thoughtful, committed citizens can change the world. Indeed, it is the only thing that ever has&amp;quot;&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-2678296485312263918?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/2678296485312263918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=2678296485312263918' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2678296485312263918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2678296485312263918'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/04/bpel-readonly-console.html' title='BPEL ReadOnly Console'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-6775449119946433519</id><published>2010-04-08T22:39:00.000-07:00</published><updated>2010-04-14T10:49:38.028-07:00</updated><title type='text'>TCP Tunnel - Java Port Forwarding - TCP kill</title><content type='html'>You know, sometime you just get amazed when you find an absolutely simple solution for a overly complicated problem. I was working with one client remotely and banging my head against the wall to get the access to their valuable servers. After a so much frustration I could get access to one or two servers via ssh, and that's pretty much it. I could ping to everywhere from that UNIX box but can not connect anything from my local laptop.&lt;br /&gt;&lt;br /&gt;To make long story short, I tried using SSH tunnel, hacked routing tables of UNIX/windows but nothing came as handy as a simple Socket program which basically listens on a port and make socket connection to remote client. It is very much like TcpMon or Obtunnel but it is just bare bone version of it. Pretty much 99% of my laptop traffic was going through this tiny unix box and never had to beg for access.&lt;br /&gt;&lt;br /&gt;java -jar springportforward.jar com.springsoa.socket.Forward localport remotehost remoteport &amp;&lt;br /&gt;&lt;br /&gt;Now as this become the absolutely life savor, I thought I can I can leverage something more out of it. I think we potentially can use this for tcpkill workaround. Basically try to forward all traffic through portforward, and kill the portforward to achieve same effect as tcpkill.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-6775449119946433519?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/6775449119946433519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=6775449119946433519' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/6775449119946433519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/6775449119946433519'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/04/tcp-tunnel-java-port-forwarding-tcp.html' title='TCP Tunnel - Java Port Forwarding - TCP kill'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7239588433054020945</id><published>2010-03-31T12:38:00.001-07:00</published><updated>2010-06-28T08:01:23.859-07:00</updated><title type='text'>BPEL Set Title</title><content type='html'>BPEL titles are extremely important for troubleshooting anything from BPELConsole. It is basically providing title-name to BPEL instance. I also wrote blog on how to do wildcard search on those BPEL titles (&lt;a href="http://chintanblog.blogspot.com/2010/03/bpel-title-wildcard-search_01.html"&gt;http://chintanblog.blogspot.com/2010/03/bpel-title-wildcard-search_01.html&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Now the part comes is how to set titles. I am still working on implementing non-intrusive way of setting titles without ever changing BPEL code, but for now let's talk about how it is done Out of the Box:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Recommended Approach is&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div id="prew" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_209cqhtr5gm_b" style="height: 98px; width: 487px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I didn't like the idea of Java embed, just as it conflicts with other best practices Oracle has and it creates an additional workItem overhead for BPEL RT. Correct way of doing this would be to write BPEL function to do this. I wrote BPEL function as below:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ora:setProcessTitle()&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;        This function sets the title of BPEL process&lt;br /&gt;        The signature of this function is : ora:setProcessTitle ('title', 'auditTrail'?)&lt;br /&gt;        auditTrail: true/false, it is optional and default value is true.&lt;br /&gt;&lt;br /&gt;With this, you can set the title as native assign operation:&lt;br /&gt;&lt;br /&gt;&lt;div id="g484" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_210cgwdtqfd_b" style="height: 100.716px; width: 648px;" /&gt;&lt;/div&gt;&lt;br /&gt;It doesn't reduce the code footprint that much, but still provides neater BPEL code and centralized way of handling Audit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7239588433054020945?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7239588433054020945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7239588433054020945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7239588433054020945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7239588433054020945'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/03/bpel-set-title.html' title='BPEL Set Title'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7022284035380708034</id><published>2010-03-31T11:51:00.001-07:00</published><updated>2010-03-31T11:52:26.788-07:00</updated><title type='text'>AIA BPEL Dynamic Partnerlink Lookup</title><content type='html'>BPEL dynamic partnerlink lookup concept is quite old and been there since 10.1.2 and it works great. AIA took that concept little far and forced the design pattern. E.g. all endpoint URLs should be strictly in AIAConfigurationProperties.xml file.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example would be&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 1:&lt;/b&gt; put the endpoint URL in AIAConfigurationProperties.xml file:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="x7qb" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_202fr2nfzhb_b" style="height: 81px; width: 972px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Step 2:&lt;/b&gt; Change the BPEL code to look up this URL at run time using Java Embed.&lt;br /&gt;&lt;br /&gt;&lt;div id="byw9" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_200gxt5qwdc_b" style="height: 371px; width: 993px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 3&lt;/b&gt;: Follow the same old rule for BPEL dynamic partner-link once we have the right endpoint URL.&lt;br /&gt;&lt;br /&gt;&lt;div id="qieq" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_201fh8p8hht_b" style="height: 350px; width: 738px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So far so good, but the problem is 20 lines of "non reusable" java embed code in my BPEL. If you talk with any decent Oracle SOA guru, they will ask you to avoid Java Embed as much as possible. AIA design pattern didn't stop here, they have recommended not to put EndPoint (or Partner-link) name directly in your Java Embed. Reason seems to quite obvious, you just specify the partner-link name, and based on SystemID or CAVS parameter, we can route it to any place without doing any code change. At the end your Java Embed looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;AIAConfigurationProperties.xml:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="ykrh" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_203hsfjgjhm_b" style="height: 70px; width: 1055px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Java Embed:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="lv8b" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_204g3m34vdg_b" style="height: 742px; width: 1079px;" /&gt;&lt;/div&gt;&lt;div id="zkbx" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_205g57k8md8_b" style="height: 777px; width: 1009px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="gdb:" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_206g8mnfccm_b" style="height: 183px; width: 970px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Functional point of view it looks great, but technically - holy crap! 93 lines of non reusable code copied for every partner-link and every BPEL process.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I took initiative to eliminate the code for and obviously the best option was to use Oracle BPEL XPath Function. Initial functionality didn't take long time to develope BPEL function and register them to BPEL RT engine, but making addAuditTrailEntry working in my custom function was an amazing experience. Rather than going too much into details, would just go with final product. I created two separate bpel functions:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1) ora:getSimpleDynamicURL &lt;/b&gt;(simpler version)&lt;br /&gt;&lt;br /&gt;        This function gets dynamic URL from AIAConfigurationProperties.xml.&lt;br /&gt;        The signature of this function is : ora:getSimpleDynamicURL ('serviceName', 'partnerlinkName', 'auditTrail'?)&lt;br /&gt;        auditTrail: true/false, it is optional and default value is true.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2) ora:getDynamicURL  &lt;/b&gt;(richer version)&lt;br /&gt;&lt;br /&gt;        This function gets dynamic URL from AIAConfigurationProperties.xml.&lt;br /&gt;        The signature of this function is : ora:getDynamicURL ('serviceName', 'partnerlinkName', 'ebmMsgBpelVariableName', 'ebmMsgPartName', 'auditTrail'?)&lt;br /&gt;        auditTrail: true/false, it is optional and default value is true.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If I look at my BPEL process now, it looks like the way it supposed to. I can get TargetEndpointLocation from AIAConfigurationProperties.xml based on parameters, and hallelujah!&lt;br /&gt;&lt;br /&gt;&lt;div id="k2c5" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_2074btxfpph_b" style="height: 127px; width: 1201px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;It just reminds me the most basic programming tip which my friend told me: "Don't do copy and paste, just do cut and paste.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7022284035380708034?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7022284035380708034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7022284035380708034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7022284035380708034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7022284035380708034'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/03/aia-bpel-dynamic-partnerlink-lookup.html' title='AIA BPEL Dynamic Partnerlink Lookup'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-1611561300174949830</id><published>2010-03-04T23:11:00.001-08:00</published><updated>2010-03-07T23:49:22.438-08:00</updated><title type='text'>Namespace agnostic XPath/XQuery</title><content type='html'>&lt;span style="font-weight: bold;font-size:180%;" &gt;Problem Description&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have two different type of XML files, both have multiple namespaces in it. First one contains prefixes along with namespaces, where second one doesn't. The question is how do I find title (Organization-&amp;gt;Person-&amp;gt;title) using XPath or XQuery?&lt;br /&gt;&lt;br /&gt;&lt;div id="rn6e" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_190f4gb9jgc_b" style="height: 350px; width: 602px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Solution - 1 (Aware of Namespace)&lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;The standard way (which I don't recommend) of doing this would be to create XPath resolver and register all the namespaces with it. I created external properties file with all the namespace like below (Note: Namespace prefix doesn't have to match between XPath and XML Input Payload (e.g. org to org1). Only namespaces has to match.):&lt;br /&gt;&lt;br /&gt;&lt;div id="hzr9" style="text-align: left;"&gt;&lt;div id="qi2_" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_1926z787qdv_b" style="height: 120.225px; width: 640px;" /&gt;&lt;/div&gt;&lt;br /&gt;Now, I started writing a method which does Xpath resolution.&lt;br /&gt;&lt;br /&gt;&lt;div id="k18e" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_193gq5ddq8b_b" style="height: 134px; width: 917px;" /&gt;&lt;/div&gt;For this method, I had to create a class for Namespace resolution. I wrote a class which resolves namespaces based on property file:&lt;br /&gt;&lt;br /&gt;&lt;div id="mxc4" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_194g2jnjgd3_b" style="height: 417px; width: 552px;" /&gt;&lt;/div&gt;&lt;br /&gt;That's it, now if you provide &lt;b&gt;/org1:Organization/person1:Person/person1:title&lt;/b&gt; as XPath to this program, it can evaluate it as "Engineer"! I was not too impressed with this approach because everytime payload comes up with change/addition in namespace, I have to maintain my property file. In small organization it might workout OK, but in rapidly changing world I can not imagine it would work at all.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Solution - 2 (Namespace Agnostic XPath/XQuery)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;For this, I wrote method which doesn't require any Namespace Context. E.g.&lt;br /&gt;&lt;br /&gt;&lt;div id="ce65" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_195htcw7ghb_b" style="height: 147px; width: 909px;" /&gt;&lt;/div&gt;&lt;br /&gt;Now the trick is in the XPath, I wrote XPath: &lt;b&gt;/*[contains(name(),'Organization')]/*[contains(name(),'Person')]/*[contains(name(),'title')]&lt;/b&gt;. This XPath resolves to "Engineer" given XML payload and it doesn't require any namespace. Correct way of writing this XPath would be to [name()='Organization' or ends-with(name(),':Organization')], but unfortunately ends-with is not supported with Oracle XML parser, but I don't see any huge issue with current Xpath.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Test&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally I just wrote test case to test this out, e.g.&lt;br /&gt;&lt;br /&gt;&lt;div id="ypcv" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_196ckmthtf6_b" style="height: 347px; width: 728px;" /&gt;&lt;/div&gt;&lt;div id="c7_j" style="text-align: left;"&gt;&lt;br /&gt;Ran the test, and I could not be more happier after looking at the results:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="qe6n" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_198c5h32nf8_b" style="height: 568px; width: 974px;" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;FYI, just found two more approaches to write name space agnostic XPath:&lt;br /&gt;a)  /*[local-name()='Organization']/*[local-name()='Person']/*[local-name()='title']&lt;br /&gt;b) //*[local-name()='title']&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-1611561300174949830?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/1611561300174949830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=1611561300174949830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1611561300174949830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1611561300174949830'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/03/namespace-agnostic-xpathxquery.html' title='Namespace agnostic XPath/XQuery'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-5982156841635303832</id><published>2010-03-03T11:30:00.001-08:00</published><updated>2010-03-03T11:37:06.270-08:00</updated><title type='text'>JAZN Security - Hacked</title><content type='html'>I guess pretty much everybody in Oracle community knows that Oracle supports indirect password (for data-sources.xml) via file based security system (Jazn). All the container passwords e.g. oc4jadmin, bpeladmin are also stored in Jazn. File name is $ORACLE_HOME/j2ee/&amp;lt;&amp;lt;container_name&amp;gt;&amp;gt;/config/system-jazn-data.xml&lt;br /&gt;&lt;br /&gt;There are multiple ways to implement indirect password, and you can go through http://download.oracle.com/docs/cd/B31017_01/web.1013/b28957/deploysimple.htm#BABCCIFH if you really using it first time.&lt;br /&gt;- You can use EM to use indirect password&lt;br /&gt;- You can change data-sources.xml and put ! infront of password.&lt;br /&gt;- You can put "-&amp;gt;USERNAME" and create that USERNAME in Jazn with indirect password using EM&lt;br /&gt;&lt;br /&gt;Anyways, back to the main problem, passwords are stored in encrypted form in system-jazn-data.xml, so people who has access to the file system would not know clear text password. The encryption algorithm used was way too weak to break. I would avoid putting the solution on my blog just to avoid hacking encouragement.&lt;br /&gt;&lt;br /&gt;I would assume the person who wrote encryption algorithm for Jazn was either too lazy or didn't want to implement it correctly, because I believe an average Java programmer can decrypt system-jazn-data.xml in less than 30 minutes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-5982156841635303832?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/5982156841635303832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=5982156841635303832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5982156841635303832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5982156841635303832'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/03/jazn-security-hacked.html' title='JAZN Security - Hacked'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4617463313893507990</id><published>2010-03-02T19:07:00.001-08:00</published><updated>2010-03-02T19:09:14.811-08:00</updated><title type='text'>ESB Interceptor</title><content type='html'>I guess I am pretty late on this blog, I had this working 2 years ago, and implemented it for more than 2 clients over last two years and now probably does not value that much. I still thought to share it and it is a little bit documented in &lt;a href="http://download.oracle.com/docs/cd/E12524_01/relnotes.1013/e12523/esb.htm"&gt;http://download.oracle.com/docs/cd/E12524_01/relnotes.1013/e12523/esb.htm&lt;/a&gt; as well.&lt;br /&gt;&lt;br /&gt;Basically, implementing &lt;span style="font-family:Courier New;"&gt;IEsbMessageInterceptor interface&lt;/span&gt;, which looks something like this (You probably have to tweak it little bit as IEsbMessageInterceptor has been changed from 10.1.3.4 to 10.1.3.5).&lt;br /&gt;&lt;br /&gt;&lt;div&gt;public class CustomESBInterceptor implements IEsbMessageInterceptor {&lt;/div&gt;&lt;div&gt;    public CustomESBInterceptor() {&lt;/div&gt;&lt;div&gt;        System.out.println("Initializing Custome Interceptor");&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;br /&gt;&lt;div&gt;    public void invoke(FlowId pFlowId, String pInstanceId, Element pPayload, Element pHeader, String pServiceName, String pSystemName, boolean isOutbound) {&lt;/div&gt;&lt;div&gt;        System.out.println("----------------------------------------");                       &lt;/div&gt;&lt;div&gt;        System.out.println("Custom Interceptor ");                       &lt;/div&gt;&lt;div&gt;        System.out.println("FlowId: " + pFlowId + " subflowid: " + pFlowId.getSubFlowId() );&lt;/div&gt;&lt;div&gt;        System.out.println("instanceid: " + pInstanceId);&lt;/div&gt;&lt;div&gt;        System.out.println("Header: " + XMLHelper.toXML(pHeader));&lt;/div&gt;&lt;div&gt;        System.out.println("payload: " + XMLHelper.toXML(pPayload));&lt;/div&gt;&lt;div&gt;        System.out.println("Service: " + pServiceName);&lt;/div&gt;&lt;div&gt;        System.out.println("System: " + pSystemName);&lt;/div&gt;&lt;div&gt;        System.out.println("----------------------------------------");&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Once we compile this class, we can put the class in bpel/system/classes directory and add following to $ORALCE_HOME/integration/esb/config/esb_config.ini file:&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;inboundMessageInterceptor = CustomESBInterceptor &lt;/span&gt;&lt;div&gt;&lt;span style="font-family:Courier New;"&gt;outboundMessageInterceptor = CustomESBInterceptor&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:'Courier New';"&gt;Just to clarify, just like any other interceptor this is extreamly dangerous point. We should keep following things in mind:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:'courier new';"&gt;Call from ESB runtime to this interceptor is made in synchronous fashion, so if CustomESBInterceptor.invoke errors out, then entire ESB RT will have issues. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:'courier new';"&gt;Another issue is if we are doing any heavy processing in CustomESBInterceptor.invoke, that will affect performance of entire ESB RT. The code in invoke should be absolutely error free and as quick as possible. We should use AQ or another JMS implementation to avoid real time processing if needed.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:'Courier New';"&gt;You can possibly change the payload and header values if you want to (it should be avoided for best practices)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4617463313893507990?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4617463313893507990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4617463313893507990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4617463313893507990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4617463313893507990'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/03/esb-interceptor.html' title='ESB Interceptor'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-5385138982748940243</id><published>2010-03-02T06:27:00.001-08:00</published><updated>2010-03-02T06:28:52.015-08:00</updated><title type='text'>BPELConsole Timeout Issue</title><content type='html'>&lt;br&gt;&lt;br&gt;In 10.1.3.5 Oracle SOA Suite we realized that BPELConsole to load the flow page, often timeouts. It gets worse if you are accessing the BPELConsole remotely or from different country. Error seems something like: &lt;b&gt;failed to load resource: xmlGetAuditTrail.jsp?referenceId=bpel%3A//localhost/&amp;lt;&amp;lt;domain-name&amp;gt;&amp;gt;/&amp;lt;&amp;lt;process-name&amp;gt;&amp;gt;%7E1.15/431669&amp;amp;id3j0son2=1&lt;br&gt;&lt;br&gt;&lt;/b&gt;After doing extensive digging in the JSP code a little bit, I found that one of the Java Script which was making server call had 20 second timeout!! After bumping up that to higher number, I was able to resolve that issue. Here is the fix:&lt;br&gt;&lt;br&gt;$ORACLE_HOME\j2ee\oc4j_soa\applications\orabpel\console\ui\util2\1001.js&lt;br&gt;(search for rInfo.timeout)&lt;br&gt;increase timeout from 20 to 200&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-5385138982748940243?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/5385138982748940243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=5385138982748940243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5385138982748940243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5385138982748940243'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/03/bpelconsole-timeout-issue.html' title='BPELConsole Timeout Issue'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-1856449537236319347</id><published>2010-03-01T18:05:00.001-08:00</published><updated>2010-03-01T20:41:14.370-08:00</updated><title type='text'>BPEL Title WildCard Search</title><content type='html'>I probably would be blogging on setting title for BPEL processes in non-intrusive way, but have to get through couple of hurdles before I get there. It is quite common practice to set Titles for BPEL process so that you can search from BPELConsole.&lt;br /&gt;&lt;br /&gt;e.g. setTitle("Title = " + title); //in embedded Java  (you can also look at &lt;a href="http://blogs.oracle.com/pt/2009/02/searching_bpel_process_instanc_1.html"&gt;http://blogs.oracle.com/pt/2009/02/searching_bpel_process_instanc_1.html&lt;/a&gt; if you are interested on how to use title in intrusive way)&lt;br /&gt;&lt;br /&gt;The problem people complain is that BPEL title search doesn't support wild card search. It only supports exact search. While looking through BPELConsole JSP, I found this was quite easy change it from exact search to wild card search. The query was getting generated as part of $ORACLE_HOME/j2ee/oc4j_soa/applications/orabpel/console/ngInstanceList.jsp. To change exact title search to wild card search, here is the change required:&lt;br /&gt;&lt;br /&gt;- In $ORACLE_HOME/j2ee/oc4j_soa/applications/orabpel/console/ngInstanceList.jsp, search for keyword called &lt;b&gt;instanceTitle&lt;/b&gt;, you should see something like:&lt;br /&gt;&lt;br /&gt;       String instanceTitleQ = request.getParameter( "instanceTitle" );&lt;br /&gt;       if ( instanceTitleQ != null &amp;amp;&amp;amp; instanceTitleQ.length( ) != 0 )&lt;br /&gt;       {&lt;br /&gt;           buf.setLength( 0 );&lt;br /&gt;           tmpWhere.setClause( buf.append( n++ &amp;gt; 0 ? " AND " : "" )&lt;br /&gt;                                  .append( SQLDefs.AL_ci_title )&lt;br /&gt;                                  .append( " = ? " )&lt;br /&gt;                                  .toString() );&lt;br /&gt;           tmpWhere.setString( 1, instanceTitleQ );&lt;br /&gt;           where.append( tmpWhere );&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;You can change it to:&lt;br /&gt;&lt;br /&gt;       String instanceTitleQ = request.getParameter( "instanceTitle" );&lt;br /&gt;       if ( instanceTitleQ != null &amp;amp;&amp;amp; instanceTitleQ.length( ) != 0 )&lt;br /&gt;       {&lt;br /&gt;           buf.setLength( 0 );&lt;br /&gt;           tmpWhere.setClause( buf.append( n++ &amp;gt; 0 ? " AND " : "" )&lt;br /&gt;                                  .append( SQLDefs.AL_ci_title )&lt;br /&gt;                                  .append( " &lt;b&gt;LIKE&lt;/b&gt; ? " )&lt;br /&gt;                                  .toString() );&lt;br /&gt;           tmpWhere.setString( 1, instanceTitleQ );&lt;br /&gt;           where.append( tmpWhere );&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once it is changed, you can search for Title in BPELConsole using % as wild card character.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-1856449537236319347?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/1856449537236319347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=1856449537236319347' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1856449537236319347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1856449537236319347'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2010/03/bpel-title-wildcard-search_01.html' title='BPEL Title WildCard Search'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-3217245739236380774</id><published>2009-02-24T20:54:00.001-08:00</published><updated>2009-02-24T21:02:55.587-08:00</updated><title type='text'>GreeseMonkey</title><content type='html'>I was working at client site and their web based authentication for Wireless keep expiring every 10 minutes. It was such a pain to login every single time. I tried a Java program but didn't go that well with unknown issuer X509 certificate.&lt;br /&gt;&lt;br /&gt;I found GreeseMonkey pretty helpful, just a few lines of javascript code and you can ask Firefox to do whatever you want. I just wrote a few line of script to get page, put username/passwords and submit every few minutes, and never login again..&lt;br /&gt;&lt;br /&gt;Also found ready made script for &lt;a href="http://userscripts.org/scripts/show/13399"&gt;Outlook Webmail Autologin&lt;/a&gt;, saved tons of my keystrokes and refresh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-3217245739236380774?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/3217245739236380774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=3217245739236380774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3217245739236380774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3217245739236380774'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2009/02/greesemonkey.html' title='GreeseMonkey'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-9094213671968322766</id><published>2008-10-29T18:47:00.001-07:00</published><updated>2008-10-29T18:48:32.504-07:00</updated><title type='text'>Spring SOA</title><content type='html'>Haven't got time to write any Blog entry in past 3 to 4 months. Working on my dreams: building my own company (&lt;a href="http://www.springsoa.com/"&gt;http://www.springsoa.com/&lt;/a&gt;), learning taxes, hiring employees/contractors, bidding for projects. Not everything goes smooth and successful, but I am quite happy with what I could accomplish in last couple of months especially at the same time when I am still working on my own projects. Hopefully things will go better, also will add some reusable component library shopping cart for Fusion Middleware (FMW) and may be FMW training sessions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-9094213671968322766?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/9094213671968322766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=9094213671968322766' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/9094213671968322766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/9094213671968322766'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/10/spring-soa.html' title='Spring SOA'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-8514631025746114300</id><published>2008-06-27T16:43:00.000-07:00</published><updated>2008-06-27T16:45:27.907-07:00</updated><title type='text'>Refreshing Connection Pool via MBeans</title><content type='html'>You can easily refresh the connection pool via Enterprise Manager. If you look at MBean Browser (for more information please look at my earlier blog on JMX http://chintanblog.blogspot.com/2007/12/it-is-all-about-jmx-i-worked-on-jmx.html, it is very comprehensive blog) you can search for your Connection Pool it provides management interface to refresh the connection pool as well. I believe EM internally must be using MBean interface. &lt;br id="ryoa"&gt;&lt;br id="ryoa0"&gt;Anyways, here is programmatic way of accessing MBean related to Connection pool and doing refresh using MBean client API.&lt;br id="d563"&gt;&lt;br id="d5630"&gt;To get Mbean Name, you can look at MBean Browser as displayed here. You can also see it supports testConnection, refreshConnection, etc.. methods.&lt;br id="gle5"&gt;&lt;br id="gle50"&gt;&lt;div id="a.3c" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="d.bl" style="width: 1075px; height: 460px;" src="http://docs.google.com/File?id=dhmngsxp_170gbm5rggk_b"&gt;&lt;/div&gt;&lt;br id="y558"&gt;You can see Mbean name and method name in the Mbean browser, you invoke here if you want also. &lt;br id="qcg1"&gt;&lt;br id="qcg10"&gt;&lt;br id="qcg11"&gt;Here is the code to execute this method using Java API:&lt;br id="vadu"&gt;&lt;br id="vadu0"&gt;&lt;div id="pd.x" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="k0e:" style="width: 1113px; height: 571px;" src="http://docs.google.com/File?id=dhmngsxp_171gd8tk2g8_b"&gt;&lt;/div&gt;&lt;br id="k0e:0"&gt;Here MBean name and method name I have got it from System MBean Browser. This code works great and does invoke the refreshConnectionPool method.&lt;br id="uzv8"&gt;&lt;br id="uzv80"&gt;&lt;br id="uzv81"&gt;&lt;b id="g2_r"&gt;Testing the connection pool refresh&lt;/b&gt;&lt;br id="g2_r0"&gt;&lt;br id="g2_r1"&gt;To replicate the scenario where connection pool get broken and remain broken without calling my refresh method was quite tricky to figure out. I tried multiple different scenarios and here is the one which worked great and as expected.&lt;br id="topw"&gt;&lt;br id="topw0"&gt;Here is the use case and steps I came up with:&lt;br id="qwz4"&gt;&lt;br id="qwz40"&gt;1) Start database and create connection pool and data source&lt;br id="ygb-"&gt;2) Test the connection pool using Mbean browser "testConnection" method&lt;br id="zdo4"&gt;    Expected Result: it should work without any isuse.&lt;br id="zdo40"&gt;3) Stop database and Start the database&lt;br id="zdo41"&gt;4) Test the connection pool using Mbean browser "testConnection" method&lt;br id="zdo42"&gt;    Expected Result: it should not work, and should show error (at least for a while) because of stale connection&lt;br id="q_3s"&gt;5) Stop database and start the database&lt;br id="q_3s0"&gt;6) Run refresh Mbean Client routine&lt;br id="q_3s1"&gt;7) Test the connection pool using Mbean browser "testConnection" method&lt;br id="zdo4"&gt;     Expected Result: it should work without any issue.&lt;br id="g2_r5"&gt;&lt;br id="tm1s"&gt;&lt;b id="tm1s0"&gt;Execution of the usecase:&lt;/b&gt;&lt;br id="g2_r6"&gt;&lt;br id="tm1s1"&gt;&lt;b id="dy00"&gt;Step 1)&lt;/b&gt; Start database and create connection pool and data source: &lt;br id="o_93"&gt;I created connection pool called TestPool which points to Test Schema&lt;br id="tm1s2"&gt;&lt;br id="tm1s3"&gt;&lt;b id="dy000"&gt;Step 2)&lt;/b&gt; Test the connection pool using Mbean browser "testConnection" method: &lt;br id="o_930"&gt;As show below it was successful.&lt;br id="tm1s4"&gt;&lt;br id="tm1s5"&gt;&lt;div id="viua" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="o6g1" style="width: 1076px; height: 365px;" src="http://docs.google.com/File?id=dhmngsxp_172fsshgdfq_b"&gt;&lt;br id="o6g10"&gt;&lt;b id="dy001"&gt;Step 3)&lt;/b&gt; Stop database and Start the database&lt;/div&gt;&lt;b id="dy002"&gt;Step 4)&lt;/b&gt; Test the connection pool using Mbean browser "testConnection" method&lt;br id="zdo42"&gt;As we already know, testConnection method failed with four different error message each time we invoke test connection method. After these four messages, connection was successful. &lt;br id="uzc9"&gt;&lt;br id="uzc90"&gt;Exception occurred testing connection. Exception: java.sql.SQLException: No more data to read from socket.&lt;br id="s-xv"&gt;Exception occurred testing connection. Exception: java.sql.SQLException: OALL8 is in inconsistent state.&lt;br id="s-xv0"&gt;Exception occurred testing connection. Exception: java.sql.SQLException: Io exception: Software caused connection abort: socket write error.&lt;br id="s-xv1"&gt;Exception occurred testing connection. Exception: java.sql.SQLException: Closed Connection.&lt;br id="s-xv2"&gt;&lt;br id="s-xv3"&gt;&lt;div id="ilmg" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="u0gb" style="width: 786px; height: 323px;" src="http://docs.google.com/File?id=dhmngsxp_173dqm5c8db_b"&gt;&lt;/div&gt;&lt;div id="ukmu" style="padding: 1em 0pt; text-align: left;"&gt;&lt;hr id="d0b0" size="2" width="100%"&gt;&lt;div id="twmr" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="v8mp" style="width: 753px; height: 272px;" src="http://docs.google.com/File?id=dhmngsxp_175cmb7rwcn_b"&gt;&lt;/div&gt;&lt;br id="d0b00"&gt;&lt;hr id="v8mp0" size="2" width="100%"&gt;&lt;div id="rh9c" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="v8mp1" style="width: 836px; height: 281px;" src="http://docs.google.com/File?id=dhmngsxp_176f54ftthb_b"&gt;&lt;/div&gt;&lt;br id="v8mp2"&gt;&lt;hr id="v8mp3" size="2" width="100%"&gt;&lt;br id="v8mp4"&gt;&lt;div id="z78s" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="dy003" style="width: 755px; height: 294px;" src="http://docs.google.com/File?id=dhmngsxp_177gk47tghh_b"&gt;&lt;/div&gt;&lt;/div&gt;Step 5) Stop database and start the database&lt;br id="q_3s0"&gt;&lt;br id="o_932"&gt;Step 6) Run refresh Mbean Client routine&lt;br id="q_3s1"&gt;&lt;br id="o_933"&gt;Step 7) Test the connection pool using Mbean browser "testConnection" method&lt;br id="qthh"&gt;&lt;br id="qthh0"&gt;This time it just works fine...&lt;br id="t4s5"&gt;&lt;br id="t4s50"&gt;&lt;br id="t4s51"&gt;Code for MBean Client can be downloaded from &lt;a title="here" href="http://chintanjshah.googlepages.com/ConnectionPoolRefresh.zip" id="yd::"&gt;here&lt;/a&gt;.&lt;br id="zdo4"&gt;&lt;br id="o_934"&gt;             &lt;br id="m4.g"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-8514631025746114300?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/8514631025746114300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=8514631025746114300' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8514631025746114300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8514631025746114300'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/06/refreshing-connection-pool-via-mbeans.html' title='Refreshing Connection Pool via MBeans'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-8637003670554449260</id><published>2008-06-26T22:51:00.000-07:00</published><updated>2008-06-26T22:56:46.769-07:00</updated><title type='text'>DB Adapter Tricks</title><content type='html'>&lt;br id="kdft"&gt;&lt;b id="wd2c"&gt;1. Dealing with Special Characters in Table/Column name&lt;/b&gt;&lt;br id="xhsu"&gt;&lt;br id="o6jb"&gt;Recently saw the issue on forum that Database does allow creating table or column with special characters inside the name e.g. $, #, etc.. Based on W3C standard (http://www.w3.org/TR/xmlschema-1/#cElement_Declarations) not all special characters are allowed in XSD element/attribute names. $ is certainly not allowed. Oracle Database adapter creates one-to-one mapping between database column/table name and element/attribute name. &lt;br id="kv4e"&gt;&lt;br id="j4ol"&gt;Sample Table: I created table named "mytable" with following script:&lt;br id="i9-d"&gt;&lt;br id="i9-d0"&gt;create table mytable (&lt;br id="i9-d1"&gt;id int,&lt;br id="i9-d2"&gt;company varchar2(100),&lt;br id="i9-d3"&gt;my$comments varchar2(100),&lt;br id="i9-d4"&gt;processed varchar2(100),&lt;br id="i9-d5"&gt;processed_time date&lt;br id="i9-d6"&gt;);&lt;br id="j4ol0"&gt;&lt;br id="j4ol1"&gt;&lt;b id="p2.6"&gt;a)&lt;/b&gt; Custom SQL : No toplink mapping is used, in this case conversion from $ value to _ is done automatically. Means, when DB adapter creates XSD file it creates attribute with my_comemnts. That's cool, no work.&lt;br id="p2.60"&gt;&lt;b id="p2.61"&gt;&lt;br id="p2.62"&gt;b)&lt;/b&gt; Insert/Select operation: That uses Toplink mapping which is basically &amp;lt;&amp;lt;SERVICENAME&amp;gt;&amp;gt;_table.xsd file and &amp;lt;&amp;lt;SERVICENAME&amp;gt;&amp;gt;_toplink_mappings.xml file. We can change _table.xsd file and convert my$comments to my_comments as shown below:&lt;br id="jskj"&gt;&lt;br id="jskj0"&gt;&lt;div id="r_xt" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="ry-." style="width: 703px; height: 360px;" src="http://docs.google.com/File?id=dhmngsxp_164gd86bwcw_b"&gt;&lt;/div&gt;Only these changes are required in order to make things work. The same thing can achieved for table name and other types of special characters.&lt;br id="ry-.0"&gt;&lt;br id="d8ti7"&gt;&lt;br id="xhsu0"&gt;&lt;br id="i9-d7"&gt;&lt;hr id="y:pd4" size="2" width="100%"&gt;&lt;br id="i9-d8"&gt;&lt;br id="i9-d9"&gt;&lt;a id="fxl6" name="Issue2"&gt;&lt;/a&gt;&lt;b id="vq0m"&gt;2. Dealing with Dynamic Queries - Query By Example &lt;/b&gt;&lt;br id="xa8k"&gt;&lt;br id="olnu"&gt;For simple use case, you can always use custom query with multiple parameters e.g. "select * from TABLENAME where COL1 = ?1 and COL2 = ?2". It works perfectly fine and input parameters shows up in XSD and also in wsdl contract. &lt;br id="o3r4"&gt;&lt;br id="o3r40"&gt;Sometimes, some richer query is required, usually the dynamic where clause. Here is the example:&lt;br id="o3r41"&gt;&lt;br id="o3r42"&gt;sometimes, you need query, e.g. select * from tablename where col1 = ?1&lt;br id="o3r43"&gt;sometimes, you need query, e.g. select * from tablename where col1 = ?1 and col2 = ?2&lt;br id="o3r44"&gt;&lt;br id="o3r45"&gt;Here you can see the where clause is getting build dynamically. It is supported by Oracle DB adapter and it is called &lt;b id="vnnl"&gt;Query By Example&lt;/b&gt;. It was very well supported in 10.1.2. but somehow it got deleted by some Jdev developer, the good thing is that it is still supported at runtime and you can make small changes to &lt;b id="avzy"&gt;SELECT&lt;/b&gt; operation to convert it into &lt;b id="avzy0"&gt;Query By Example&lt;/b&gt;.&lt;br id="ruls"&gt;&lt;br id="ruls0"&gt;&lt;u id="ruls1"&gt;&lt;b id="ruls2"&gt;What it does:&lt;/b&gt;&lt;/u&gt; It takes lets say object as input (e.g. Employee), and returns collection of Employee as output. Here the trick is, where clause is created based on Employee attribute you provide. So if pass null Employee object it would "select * from Employee" querey. If you provide Employee input with Company name "Oracle", it will return all employee matching company name oracle... &lt;br id="ruls3"&gt;&lt;br id="ruls4"&gt;&lt;u id="ruls5"&gt;&lt;b id="ruls6"&gt;How to implement it:&lt;/b&gt;&lt;/u&gt;&lt;br id="xa8k2"&gt;&lt;br id="pze4"&gt;I created &lt;b id="sd0r"&gt;DynamicQueries&lt;/b&gt; BPEL process and &lt;b id="sd0r0"&gt;DBSelect&lt;/b&gt; partnerlink which does simple SELECT operation (not custom sql), and no parameters on table name &lt;b id="gqh6"&gt;Test&lt;/b&gt;. Now, we need to modify two files:&lt;br id="gqh60"&gt;&lt;br id="gqh61"&gt;&lt;b id="r883"&gt;DBSelect_table.xsd&lt;/b&gt;: Create an Element called Test.&lt;br id="aiw:"&gt;&lt;br id="aiw:0"&gt;&lt;div id="o7on" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="b2-9" style="width: 668px; height: 351px;" src="http://docs.google.com/File?id=dhmngsxp_1652875hwdp_b"&gt;&lt;/div&gt;&lt;b id="wy39"&gt;&lt;br id="r8830"&gt;DBSelect.wsdl&lt;/b&gt;: Specify keyword called &lt;b id="fip-"&gt;IsQueryByExample="true" &lt;/b&gt;in your JCA operation as shown below:&lt;br id="fip-0"&gt;&lt;br id="fip-1"&gt;&lt;div id="f.o4" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="sb95" style="width: 676px; height: 285px;" src="http://docs.google.com/File?id=dhmngsxp_166fmzcp22j_b"&gt;&lt;/div&gt;That's all it needs. You need to create input variable of Element "Test" and assign it to Partnerlink Input variable and deploy the process.  &lt;br id="fip-2"&gt;&lt;br id="pze40"&gt;&lt;br id="xa8k5"&gt;&lt;hr id="y:pd5" size="2" width="100%"&gt;&lt;br id="i9-d10"&gt;&lt;br id="i9-d11"&gt;&lt;b id="pi72"&gt;&lt;a id="anl0" name="Issue3"&gt;&lt;/a&gt;3. Inserting multiple records in Database in single transaction&lt;/b&gt;&lt;br id="vq0m0"&gt;&lt;br id="vq0m1"&gt;Well, I know that is supported out of the box and nothing you need to do special to achieve it. If you create database adapter in your BPEL process with INSERT operation it is exposed as collection of object as Input. You can use XSLT to assign that Collection and all records will be inserted in one atomic transaction. &lt;br id="qh5."&gt;&lt;br id="qh5.0"&gt;&lt;br id="qh5.1"&gt;Working example for all three can be found &lt;a title="here" href="http://chintanjshah.googlepages.com/DBAdapterTricks.zip" id="c_x9"&gt;here&lt;/a&gt;.&lt;br id="xa8k7"&gt;&lt;br id="h9e61"&gt;            &lt;br id="hvk71"&gt;&lt;br id="x:ro"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-8637003670554449260?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/8637003670554449260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=8637003670554449260' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8637003670554449260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8637003670554449260'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/06/db-adapter-tricks-1.html' title='DB Adapter Tricks'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-243996842285060498</id><published>2008-06-19T17:03:00.000-07:00</published><updated>2008-06-19T17:07:51.331-07:00</updated><title type='text'>File Size from File Adapter</title><content type='html'>Well, reading/writing file name and file directory are very well documented in File Adapter guide and blogs. Just to recap, in order to read/write file name and directory you are supposed create a header variable of element InboundFileHeaderType (it will be different if it is outbound header variable). The WSDL file is created when you create FileRead or FileWrite operation.&lt;br id="sou3"&gt;&lt;br id="sou30"&gt;&lt;div id="kw3i" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="or9a" style="width: 1127px; height: 443px;" src="http://docs.google.com/File?id=dhmngsxp_157gxh5c8ck_b"&gt;&lt;/div&gt;&lt;br id="or9a0"&gt;&lt;br id="or9a1"&gt;After you create Variable, we just need to specify that variable as part of Header variable in Adapter.&lt;br id="or9a2"&gt;&lt;br id="or9a3"&gt;&lt;div id="x6u2" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="p9ic" style="width: 947px; height: 452px;" src="http://docs.google.com/File?id=dhmngsxp_15856kx547z_b"&gt;&lt;br id="p9ic0"&gt;&lt;br id="p9ic1"&gt;&lt;br id="p9ic2"&gt;That's all required, and during file polling you will get the fileName and directoryName already populated.&lt;br id="p9ic3"&gt;&lt;br id="p9ic4"&gt;&lt;br id="p9ic5"&gt;Wait a minute, but if you look at Variable_FileHeader at runtime in Assign Activity, you can see 5 elements are populated rather than 2. E.g. &lt;br id="f0-o"&gt;&lt;br id="f0-o0"&gt;&lt;div id="slgz" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="w_8n" style="width: 646px; height: 249px;" src="http://docs.google.com/File?id=dhmngsxp_159fhpmhvfz_b"&gt;&lt;/div&gt;&lt;br id="f0-o1"&gt;It means, this header variable is populating 5 elements, where wsdl file is exposing only two! How to get remainder three, or let;s say SIZE which is more interesting to all of us.&lt;br id="w_8n0"&gt;&lt;br id="w_8n1"&gt;&lt;br id="w_8n2"&gt;&lt;b id="w_8n3"&gt;Two ways: &lt;/b&gt;&lt;br id="f0-o2"&gt;&lt;br id="w_8n4"&gt;&lt;b id="i3fx"&gt;1)&lt;/b&gt; Hack the wsdl file and put size as one of the element as shown below. (Note fileAdapterInboundHeader.wsdl file is created with ReadOnly attribute so you have to change the attribute prior to modification).&lt;br id="bn1m"&gt;&lt;br id="bn1m0"&gt;&lt;div id="vyxo" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="e2vy" style="width: 700px; height: 473px;" src="http://docs.google.com/File?id=dhmngsxp_160nq46vbfc_b"&gt;&lt;/div&gt;&lt;br id="d6st"&gt;After doing this size attribute is populated and you can assign to any other variable if you like.&lt;br id="d6st0"&gt;&lt;br id="jz03"&gt;&lt;b id="i3fx0"&gt;2)&lt;/b&gt; This is non-intrusive way. As we know that Header Variable (XML Element) already has size, it is just matter of extracting it, so why not to convert Header Variable in String and do string search? e.g. I did following assign activity to get the size and assign it to some string variable called Variable_File_Size. You can see, that I am converting xml element to string and then doing search for string between &amp;lt;size&amp;gt; &amp;lt;/size&amp;gt;.&lt;br id="cv9:"&gt;&lt;br id="cv9:0"&gt;&lt;div id="h3vv" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="dlsy" style="width: 700px; height: 550px;" src="http://docs.google.com/File?id=dhmngsxp_161wmfmnvcx_b"&gt;&lt;/div&gt;&lt;br id="jz030"&gt;&lt;br id="i-y2"&gt;&lt;br id="i-y20"&gt;Things didn't end here, as somebody asked me that how to know how many elements/attributes are really supported. I couldn't find the documentation anywhere, so back to the JAD, and I could find the file name called "oracle/tip/adapter/file/FileAgent.java" which had following lines of code:&lt;br id="onv8"&gt;&lt;br id="onv80"&gt;&lt;div id="svhi" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="s8p9" style="width: 988px; height: 537px;" src="http://docs.google.com/File?id=dhmngsxp_162ftz5fscw_b"&gt;&lt;/div&gt;&lt;br id="s8p90"&gt;Based on code, it looks like variables are just getting inserted on the fly, as it is not JAXB but just being treated as DOM element. Ofcourse, it showed me a way what I need to do if I need to insert my custom header in File Adapter. &lt;br id="yadu"&gt;&lt;br id="yadu0"&gt;&lt;br id="hzqy"&gt;&lt;a title="Here" href="http://chintanjshah.googlepages.com/FileSizeReader.zip" id="t8jh"&gt;Here&lt;/a&gt; is the entire code used for sample.&lt;br id="e1e6"&gt;&lt;/div&gt;            &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-243996842285060498?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/243996842285060498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=243996842285060498' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/243996842285060498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/243996842285060498'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/06/well-readingwriting-file-name-and-file.html' title='File Size from File Adapter'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-2613250818047119673</id><published>2008-06-18T13:39:00.000-07:00</published><updated>2008-06-18T13:45:55.270-07:00</updated><title type='text'>Business Rules WebDav Repository</title><content type='html'>                        I was used to configure WebDav on Oracle Database for Oracle Business Rules, it was pretty hard to configure and very unstable. Recently found out that I can configure WebDav on Oracle Apache.&lt;br id="ne5q"&gt;&lt;br id="ne5q0"&gt;Usually to install WebDav on vanilla Apache server, we need to install couple of dll file and load those module during Apache startup, but for Oracle Apache all configuration are done out-of-the-box, only thing we need to specify is location and type of repository.&lt;br id="rh4o"&gt;&lt;br id="rh4o0"&gt;&lt;b id="hwy_"&gt;&lt;br id="l.iz"&gt;&lt;font id="z7o3" size="4"&gt;Configuration file:&lt;/font&gt;&lt;/b&gt; &lt;br id="yvzk"&gt;&lt;br id="yvzk0"&gt;%soasuite%/Apache/oradav/conf/moddav.conf&lt;br id="vg1g"&gt;&lt;br id="vg1g0"&gt;&lt;b id="m1jo"&gt;&lt;br id="l.iz0"&gt;&lt;font id="z7o30" size="4"&gt;To enable default WebDav repository:&lt;/font&gt;&lt;/b&gt;&lt;br id="j0al0"&gt;&lt;br id="j0al1"&gt;&amp;lt;Location /dav_public&amp;gt;&lt;br id="j0al2"&gt;    DAV &lt;b id="j0al3"&gt;on&lt;/b&gt;&lt;br id="j0al4"&gt;&amp;lt;/Location&amp;gt;&lt;br id="epuu1"&gt;            &lt;br id="xwr7"&gt;Once you specify on, http://host:port/dav_public (which located under %soasuite%/Apache/Apache/htdocs/dav_public is ready for use as webdav repository.&lt;br id="m1jo0"&gt;&lt;br id="yvzk1"&gt;&lt;br id="m1jo1"&gt;&lt;font id="z7o31" size="4"&gt;&lt;b id="m1jo2"&gt;To create new WebDav repository:&lt;/b&gt;&lt;/font&gt;&lt;br id="m1jo3"&gt;&lt;br id="l.iz1"&gt;1) Add following entry in %soasuite%/Apache/oradav/conf/moddav.conf file&lt;br id="l.iz2"&gt;&lt;br id="m1jo5"&gt;&amp;lt;Location &lt;b id="l.iz3"&gt;/my_webdav_repository&lt;/b&gt;&amp;gt;&lt;br id="j0al2"&gt;     DAV &lt;b id="j0al3"&gt;on&lt;/b&gt;&lt;br id="j0al4"&gt; &amp;lt;/Location&amp;gt;&lt;br id="epuu1"&gt;&lt;br id="l.iz5"&gt;2) Create directory called %soasuite%/Apache/Apache/htdocs/my_webdav&lt;br id="l.iz6"&gt;&lt;br id="l.iz7"&gt;3) Restart the Apache server and that's all required for configuring custom repository.&lt;br id="l.iz8"&gt;&lt;br id="l.iz9"&gt;&lt;br id="sxyo"&gt;&lt;font id="ap:d" size="4"&gt;&lt;b id="sxyo0"&gt;To create password for WebDav repository:&lt;/b&gt;&lt;/font&gt;&lt;br id="sxyo1"&gt;&lt;br id="z20q"&gt;1) Create authentication file with different user, I created &lt;br id="z20q0"&gt;&lt;br id="l.iz10"&gt;%soasuite%/Apache/Apache/bin/&lt;b id="g405"&gt;htdigest&lt;/b&gt; -c %soasuite%/Apache/oradav/conf/webdav.access webdav-authentication oc4jadmin&lt;br id="sxyo2"&gt;%soasuite%/Apache/Apache/bin/&lt;b id="ccq8"&gt;htdigest&lt;/b&gt; %soasuite%/Apache/oradav/conf/webdav.access webdav-authentication ruleauthor&lt;br id="vpc2"&gt;&lt;br id="vpc20"&gt;2) Change %soasuite%/Apache/oradav/conf/moddav.conf to provide the authentication mode:&lt;br id="vpc21"&gt;&lt;br id="vpc22"&gt;&amp;lt;Location /my_webdav_repository&amp;gt;&lt;br id="r4_m"&gt;    DAV on&lt;br id="r4_m0"&gt;    AuthType Digest&lt;br id="r4_m1"&gt;    AuthName "webdav-authentication"&lt;br id="r4_m2"&gt;    AuthDigestFile %soasuite%/Apache/oradav/conf/webdav.access&lt;br id="r4_m3"&gt;    Require valid-user&lt;br id="r4_m4"&gt;&amp;lt;/Location&amp;gt;&lt;br id="r4_m5"&gt;&lt;br id="r4_m6"&gt;3) Restart the server and now my_webdav_repository will be accessible only after username and password authentication.&lt;br id="mg_s"&gt;&lt;br id="mg_s0"&gt;&lt;br id="mg_s1"&gt;             &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-2613250818047119673?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/2613250818047119673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=2613250818047119673' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2613250818047119673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/2613250818047119673'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/06/business-rules-webdav-repository-i-was.html' title='Business Rules WebDav Repository'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-8515837145904139632</id><published>2008-06-17T12:13:00.000-07:00</published><updated>2008-06-18T17:36:31.074-07:00</updated><title type='text'>Flex Field Mapping Migrator</title><content type='html'>&lt;P id=cm4y0&gt;Nothing special, just putting together some BPEL client API to create useful utility for BPEL Human Workflow migration. &lt;/P&gt; &lt;P id=k16v&gt; &lt;/P&gt; &lt;P id=k16v0&gt;Flex field mappings are very useful for creating custom views/queues and reports. Flex-Field mapping in worklist are persisted in Workflist Schema with MD5 encoded guid. It is not advisable to promote them from one server to another server via database scripts. BPEL workflow client API supports extracting, creating and deleting such mappings for worklist application.&lt;/P&gt; &lt;P id=ge8w&gt; &lt;/P&gt; &lt;P id=ge8w0&gt;Here is the utility which I created by using worklist client API, which I have released it as JAR file, and I wrote wrapper BAT file to execute the command. &lt;/P&gt; &lt;P id=ohzy3&gt; &lt;IMG id=m7bz src="http://docs.google.com/File?id=dhmngsxp_154cpqmdhfk_b"&gt;&lt;/P&gt; &lt;P id=ohzy5&gt;As mentioned earlier I support three COMMANDNAME export, import and clean. Export will generate workflowmappings.xml file in the current directory and import will take workflowmappings.xml file and import all the payload mappings to the target server. My import program is not very intelligent, it cleans all the mapping on target server and creates them according to workflowmappings.xml file, it is not smart update.&lt;/P&gt; &lt;P id=zjfd&gt; &lt;/P&gt; &lt;P id=zjfd0&gt;It can be downloaded from &lt;A id=bmbn title=here href="http://chintanjshah.googlepages.com/FlexFieldMappingDistribution.zip"&gt;here&lt;/A&gt;.  &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-8515837145904139632?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/8515837145904139632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=8515837145904139632' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8515837145904139632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8515837145904139632'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/06/flex-field-mapping-migrator-nothing.html' title='Flex Field Mapping Migrator'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4328022490468649034</id><published>2008-05-27T15:41:00.000-07:00</published><updated>2008-05-29T19:06:36.981-07:00</updated><title type='text'>Can you create a domain with upper case name?</title><content type='html'>&lt;P id=codl1&gt;&lt;FONT id=codl11 size=3&gt;Realized that you can not create domain with upper case, and if you do then you have login in BPELConsole in very weird way. I saw the meta-link and this issue been around for more than a year. &lt;/FONT&gt;&lt;FONT id=codl16 size=3&gt;I looked into exploded version of BPELConsole, it took me couple of min to fix it, and here is my hack:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT id=w6ek3 size=3&gt; &lt;P id=s3bb0&gt; &lt;/P&gt; &lt;P id=up4d0&gt;Either you can get modified JSP files from &lt;A id=cjvy title=here href="http://chintanjshah.googlepages.com/UpperCaseDomain.zip"&gt;here&lt;/A&gt; and dump it to &lt;B id=q1z:0&gt;%soasuite%/j2ee/oc4j_soa/applications/orabpel/console&lt;/B&gt;, or follow the steps described here:&lt;/P&gt; &lt;P id=s3bb0&gt; &lt;/P&gt; &lt;P class=MsoNormal id=w6ek0 style="MARGIN: 0in 0in 0pt"&gt; &lt;/P&gt;&lt;/FONT&gt; &lt;P class=MsoNormal id=w6ek0 style="MARGIN: 0in 0in 0pt"&gt;&lt;B id=codl21&gt;&lt;FONT id=codl22 size=3&gt;&lt;FONT id=codl23&gt;1. %soasuite%/j2ee/oc4j_soa/applications/orabpel/console/index.jsp &lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P class=MsoNormal id=up4d1 style="MARGIN: 0in 0in 0pt"&gt; &lt;/P&gt; &lt;P class=MsoNormal id=up4d2 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=up4d3 size=3&gt;Search for lines, with IBPELDomainHandle ch = l.lookupDomain(), and comment it out 2 lines. It is about line number 15 or 16.&lt;/FONT&gt;&lt;/P&gt; &lt;P class=MsoNormal id=uygo0 style="MARGIN: 0in 0in 0pt"&gt; &lt;/P&gt; &lt;DIV id=s9ig0 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=s9ig1 src="http://docs.google.com/File?id=dhmngsxp_148pxmtcc4v_b"&gt;&lt;/DIV&gt; &lt;DIV id=s9ig2 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;FONT id=codl115 size=3&gt;Now if you login to BPEL console, you can see the Domain Picker jsp file and I thought it will just work fine, but I had to modify domainPicker jsp file as well to get thing done.&lt;/FONT&gt;&lt;/DIV&gt; &lt;P id=s3bb0&gt; &lt;/P&gt; &lt;P id=up4d33&gt;&lt;B id=codl120&gt;&lt;FONT id=codl121 size=3&gt;2. %soasuite%j2ee/oc4j_soa/applications/orabpel/console/domainPicker.jsp&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P id=s3bb0&gt; &lt;/P&gt; &lt;P id=up4d35&gt;&lt;FONT id=codl126&gt;&lt;SPAN id=codl127&gt;&lt;FONT id=codl128 size=3&gt;&lt;B id=qw130&gt;    a) &lt;/B&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT id=codl130 size=3&gt;Search for string called “alreadyAuthed.add( aDomainId )”, it will be about line number 39, and add following line of code&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;B id=codl135&gt;&lt;FONT id=codl136 size=3&gt;&lt;FONT id=codl137&gt; &lt;P id=s3bb0&gt; &lt;/P&gt;&lt;/FONT&gt; &lt;P id=s3bb0&gt; &lt;/P&gt;&lt;/FONT&gt; &lt;DIV id=mhso style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=uwyu0 src="http://docs.google.com/File?id=dhmngsxp_149cmwf23dt_b"&gt;&lt;/DIV&gt; &lt;P id=s3bb0&gt; &lt;/P&gt;&lt;/B&gt; &lt;P id=s3bb0&gt; &lt;/P&gt; &lt;P class=MsoNormal id=i9.224 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=i9.226&gt;&lt;SPAN id=i9.227&gt;&lt;FONT id=i9.228 size=3&gt;&lt;B id=i9.229&gt;    b)&lt;/B&gt;&lt;/FONT&gt; &lt;/SPAN&gt;&lt;FONT id=codl197 size=3&gt;Need to change Java Script at the end of page:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT id=codl200 size=3&gt;&lt;FONT id=codl285 size=3&gt;&lt;B id=o1z54&gt; &lt;P id=s3bb0&gt; &lt;/P&gt;&lt;/B&gt; &lt;DIV id=t5uw style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=uwyu1 src="http://docs.google.com/File?id=dhmngsxp_150cnvk8kgt_b"&gt;&lt;/DIV&gt; &lt;P id=s3bb0&gt; &lt;/P&gt;&lt;/FONT&gt; &lt;P id=s3bb0&gt; &lt;/P&gt;&lt;/FONT&gt; &lt;P id=s3bb0&gt; &lt;/P&gt; &lt;P class=MsoNormal id=sjk526 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=codl273&gt;&lt;SPAN id=codl274&gt;&lt;FONT id=codl275 size=3&gt;&lt;B id=qw132&gt;    c)&lt;/B&gt;&lt;/FONT&gt; &lt;/SPAN&gt;&lt;FONT id=codl277 size=3&gt;Finally Change the submit button, and that’s all.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT id=codl285 size=3&gt;&lt;B id=o1z54&gt; &lt;P id=s3bb0&gt; &lt;/P&gt;&lt;/B&gt; &lt;P id=s3bb0&gt; &lt;/P&gt; &lt;DIV id=qipf style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=uwyu2 src="http://docs.google.com/File?id=dhmngsxp_151dprh6r84_b"&gt;&lt;/DIV&gt;&lt;/FONT&gt; &lt;P id=s3bb0&gt; &lt;/P&gt; &lt;P id=s3bb0&gt;&lt;FONT id=codl310 size=3&gt;No need to bounce the server to see the magic! It feels like hacking is my business and consulting is byproduct.&lt;/FONT&gt;&lt;/P&gt; &lt;P id=codl311&gt; &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4328022490468649034?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4328022490468649034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4328022490468649034' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4328022490468649034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4328022490468649034'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/05/can-you-create-domain-with-upper-case.html' title='Can you create a domain with upper case name?'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7720148371284369717</id><published>2008-05-27T15:39:00.000-07:00</published><updated>2008-05-27T16:06:36.750-07:00</updated><title type='text'>Rule Engine Tricks</title><content type='html'>&lt;P id=u_sh1&gt;While working with Oracle Business Rules I found some tricks:&lt;/P&gt; &lt;P id=s3bb0&gt; &lt;/P&gt; &lt;P id=s3bb1&gt;&lt;b id=wm3q0&gt;1) Enable Logging&lt;/b&gt;&lt;/P&gt; &lt;P id=u_bk0&gt;Provide following properties in decisionservice.desc file in your bpel process:&lt;/P&gt; &lt;P id=w4.s0&gt;     &amp;lt;properties&amp;gt;&lt;BR id=xv:e0&gt;        &amp;lt;property name="watchRules"&amp;gt;true&amp;lt;/property&amp;gt;&lt;BR id=xv:e1&gt;        &amp;lt;property name="watchActivations"&amp;gt;true&amp;lt;/property&amp;gt;&lt;BR id=xv:e2&gt;        &amp;lt;property name="watchFacts"&amp;gt;true&amp;lt;/property&amp;gt;&lt;BR id=xv:e3&gt;        &amp;lt;property name="watchCompilations"&amp;gt;true&amp;lt;/property&amp;gt;&lt;BR id=xv:e4&gt;    &amp;lt;/properties&amp;gt;&lt;BR id=xv:e5&gt;You have to provide this right in &amp;lt;ruleEngineProvider&amp;gt; and right after the &amp;lt;repository&amp;gt; tag. If you have worked with Rule Engine SDK, then you may realize that it is not really providing all debugging information which you can see via ruleSession.executeFunction("watchFacts"). Well, be happy with what it provides, it is good enough. If you want to look at more information then look at my article on Custom Decision Service.&lt;/P&gt; &lt;P id=wm3q1&gt; &lt;/P&gt; &lt;P id=jgqe1&gt;&lt;b id=orzg0&gt;2) Additional Libraries&lt;/b&gt;&lt;/P&gt; &lt;P id=boft0&gt;If your BPEL process is having decision service and your Rule is calling external Java program, then you will need to include those Jar files in to your path. The directory would be: &lt;b id=ea-20&gt;decisionservices\DecisionService\war\WEB-INF\lib&lt;/b&gt; under your BPEL root directory.&lt;/P&gt; &lt;P id=vboh0&gt; &lt;/P&gt; &lt;P id=vboh1&gt;&lt;b id=ufkh0&gt;3) RuleSet invoking other RuleSets&lt;/b&gt;&lt;/P&gt; &lt;P id=vmm70&gt;Hmm, this was cool one. If you have ruleSet and inside that ruleSet you are calling another ruleSet via pushRuleSet functioin, it just works fine in RuleAuthor, but decision service interface doesn't let you execute it. It throws exception something like "Rule Set xyz is undefined". Well, again if you are familiar with how Rule SDK works, then you can guess why this is the case. Developer of decision service probably loading only one rule set and that is what causing the issue.&lt;/P&gt; &lt;P id=fwjp0&gt; &lt;/P&gt; &lt;P id=fwjp1&gt;&lt;b id=fwjp2&gt;Resolution:&lt;/b&gt; Rule function is quite different, if you execute rule function and if rule function calls multiple RuleSet that just works fine. When I created my custom decision service, I did the same for both RuleSet and Rule Functions. Therefore, for out-of-the box rule decision service, we have to create function interface in order to interact with multiple rule-sets.&lt;/P&gt; &lt;P id=ltwn0&gt; &lt;/P&gt; &lt;P id=pye00&gt; &lt;/P&gt; &lt;P id=vmm71&gt;&lt;b id=gbfp0&gt;4) Deploying to home container&lt;/b&gt;&lt;/P&gt; &lt;P id=gbfp1&gt; &lt;/P&gt; &lt;P id=mo9t0&gt;As shown in below diagram, if you specify oc4j_soa while deploying decision service, it just works fine. If you specify home during creating Jdeveloper connection while deploying Decision service it throws following exception. Therefore, we have to use oc4j_soa while making Jdeveloper AS/Integration server connection.&lt;/P&gt; &lt;P id=ddf90&gt; &lt;/P&gt; &lt;DIV id=b30z style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=xcpj0 src="http://docs.google.com/File?id=dhmngsxp_146crqdpzht_b"&gt;&lt;/DIV&gt; &lt;P id=q.an0&gt; &lt;/P&gt; &lt;P id=q.an1&gt; &lt;/P&gt; &lt;P id=q.an2&gt;[deployDecisionServices] &lt;BR id=q.an3&gt;[deployDecisionServices] 08/05/14 18:20:26 Notification ==&amp;gt;application : rules_default_TestBPEL1_1_0_DecisionService is in failed state&lt;/P&gt; &lt;P id=q.an4&gt;[deployDecisionServices] &lt;/P&gt; &lt;P id=q.an5&gt;[deployDecisionServices] Exception in thread "ConfigurableThreadImpl::" java.lang.NoClassDefFoundError: oracle/classloader/util/LocalizedText&lt;BR id=q.an6&gt;[deployDecisionServices]  at com.evermind.server.rmi.RMICall.EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER(RMICall.java:109)&lt;BR id=q.an7&gt;[deployDecisionServices]  at com.evermind.server.rmi.RMICall.throwRecordedException(RMICall.java:125)&lt;BR id=q.an8&gt;[deployDecisionServices]  at com.evermind.server.rmi.RMIClientConnection.obtainRemoteMethodResponse(RMIClientConnection.java:517)&lt;BR id=q.an9&gt;[deployDecisionServices]  at com.evermind.server.rmi.RMIClientConnection.invokeMethod(RMIClientConnection.java:461)&lt;BR id=q.an10&gt;[deployDecisionServices]  at com.evermind.server.rmi.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:63)&lt;BR id=q.an11&gt;[deployDecisionServices]  at com.evermind.server.rmi.RecoverableRemoteInvocationHandler.invoke(RecoverableRemoteInvocationHandler.java:28)&lt;BR id=q.an12&gt;[deployDecisionServices]  at com.evermind.server.ejb.StatefulSessionRemoteInvocationHandler.invoke(StatefulSessionRemoteInvocationHandler.java:31)&lt;BR id=q.an13&gt;[deployDecisionServices]  at __Proxy2.getEvents(Unknown Source)&lt;BR id=q.an14&gt;[deployDecisionServices]  at oracle.oc4j.admin.jmx.client.MBeanServerEjbRemoteSynchronizer.getEvents(MBeanServerEjbRemoteSynchronizer.java:530)&lt;BR id=q.an15&gt;[deployDecisionServices]  at oracle.oc4j.admin.jmx.client.CoreRemoteMBeanServer.getEvents(CoreRemoteMBeanServer.java:319)&lt;BR id=q.an16&gt;[deployDecisionServices]  at oracle.oc4j.admin.jmx.client.EventManager.run(EventManager.java:217)&lt;BR id=q.an17&gt;[deployDecisionServices]  at oracle.oc4j.admin.jmx.client.ThreadPool$ConfigurableThreadImpl.run(ThreadPool.java:303)&lt;/P&gt; &lt;P id=q.an18&gt; &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7720148371284369717?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7720148371284369717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7720148371284369717' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7720148371284369717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7720148371284369717'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/05/rule-engine-tricks-while-working-with.html' title='Rule Engine Tricks'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-6222180018712154095</id><published>2008-05-27T15:36:00.000-07:00</published><updated>2008-05-27T15:47:20.645-07:00</updated><title type='text'>How to start Enterprise Manager</title><content type='html'>&lt;P id=g3t41&gt;If you shutdown Enterprise Manager from Console or any other way here is the trick to start the Enterprise Manager:&lt;/P&gt; &lt;P id=szy_0&gt; &lt;/P&gt; &lt;P id=szy_1&gt;&lt;B id=szy_2&gt;soasuite/j2ee/home/config/default-web-site.xml&lt;/B&gt;&lt;BR id=szy_3&gt;&amp;lt;application name="ascontrol" path="../../home/applications/ascontrol.ear" parent="system" &lt;B id=x43l0&gt;start="true"&lt;/B&gt; /&amp;gt;&lt;BR id=szy_4&gt;&amp;lt;application name="javasso" path="../../home/applications/javasso.ear" parent="default" &lt;B id=x43l1&gt;start="true"&lt;/B&gt; /&amp;gt; (not sure if it is required all the time)&lt;/P&gt; &lt;P id=szy_5&gt; &lt;/P&gt; &lt;P id=szy_6&gt;&lt;B id=szy_7&gt;soasuite/j2ee/home/config/server.xml&lt;/B&gt;&lt;BR id=szy_8&gt;&amp;lt;web-app application="ascontrol" name="ascontrol" &lt;B id=x43l2&gt;load-on-startup="true"&lt;/B&gt; root="/em" &lt;B id=x43l3&gt;ohs-routing="true"&lt;/B&gt; /&amp;gt;&lt;BR id=szy_9&gt;&lt;/P&gt; &lt;P id=szy_10&gt;&lt;B id=szy_11&gt;Bounce the home container using following command&lt;/B&gt;&lt;/P&gt; &lt;P id=szy_12&gt;opmnctl restartproc process-type=home&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-6222180018712154095?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/6222180018712154095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=6222180018712154095' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/6222180018712154095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/6222180018712154095'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/05/how-to-start-enterprise-manager-if-you.html' title='How to start Enterprise Manager'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-3560498548372336397</id><published>2008-05-23T10:10:00.000-07:00</published><updated>2008-06-17T15:32:09.443-07:00</updated><title type='text'>Custom Decision Service</title><content type='html'>&lt;P id=iwba2&gt;I am not very big fan of Decision Service which comes out of the box with Oracle BPEL. There are couple of issues I found&lt;/P&gt; &lt;P id=qp4l0&gt; &lt;/P&gt; &lt;P id=qp4l1&gt;- It creates whole bunch JAXB classes in my bpel process, which are .java and .class files (I have to keep both of them, .class files are not generated during compilation of bpel process!)&lt;/P&gt; &lt;P id=qp4l2&gt;- I can NOT change the created Decision Service, it is not like I can click on DB adapter and reconfigure it. It make my life extremely difficult when have to accommodate changes from client&lt;/P&gt; &lt;P id=qp4l3&gt;- I can not call the service from ESB or other WS consumer, the decision service exposed takes millions of parameters which are not relevant to web service consumer (e.g. bpelInstanceId? why in the hell rule engine needs to know bpel instance id?)&lt;/P&gt; &lt;P id=yp::0&gt;- There is a decision service for each partner link! We have 20 BPEL processes making almost 30 different type of calls, that ends up in 30 decision services. That make my life impossible to manage.&lt;/P&gt; &lt;P id=tmt30&gt;- It is way too complicated to implement WSIF with the decision service.&lt;/P&gt; &lt;P id=m5ve0&gt; &lt;/P&gt; &lt;P id=m5ve1&gt;I love the idea of BAM, where all Active Data cache operations are exposed as one service. I had very naive and romantic idea of implementing my custom decision service and talk to any type of rule set, rule function, do the connection pooling of rules via one web service interface. It can take any type of parameter and using Java reflection I can convert to right type and that's all I need. My client did buy this idea and I implemented very nice and generic Custom Decision Service.&lt;/P&gt; &lt;P id=nh1h0&gt; &lt;/P&gt; &lt;P id=nh1h1&gt; &lt;/P&gt; &lt;P id=nh1h2&gt;&lt;B id=f7:r0&gt;&lt;FONT id=hqrf0 size=3&gt;1. Implemented POJO&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P id=mfcy0&gt;- I implemented a small Java POJO service, which does takes configuration &lt;/P&gt; &lt;P id=rikn0&gt;e.g. RuleRepositoryType (webdav, files), File Repository Connection Information, WebDav Repository Connection Information, Whole bunch of debug flags which are supported by Rule Engine, Dictionary Name, Rule Function or Rule Set, Input types and output types.&lt;/P&gt; &lt;P id=nh1h4&gt; &lt;/P&gt; &lt;P id=nh1h6&gt;&lt;B id=mfcy1&gt;&lt;FONT id=hqrf1 size=3&gt;2. Implemented EJB 3.0 and exposed as Web service via annotations&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P id=nh1h7&gt;- Just created EJB 3.0 session facade on top of POJO so that it is container managed, I can easily expose as Web Service via Annotations, and for implementing Connection pool. &lt;/P&gt; &lt;P id=nh1h8&gt; &lt;/P&gt; &lt;P id=nh1h9&gt;&lt;B id=mfcy2&gt;&lt;FONT id=o99g0 size=3&gt;3. Implemented Connection Pooling in EJB&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P id=f7:r1&gt;- I implemented custom connection pool of Rule Repository and Rule Dictionary. I initiate new Rule Session each time. I also noticed that pooling/caching Rule repository was not just good enough so I had to cache Rule Dictionary as well. Yeah, I implemented &lt;/P&gt; &lt;P id=f7:r2&gt; &lt;/P&gt; &lt;P id=f7:r3&gt;&lt;B id=mfcy3&gt;&lt;FONT id=y3j60 size=3&gt;4. WSIF Interface via annotations&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P id=f7:r4&gt;-  I just followed &lt;A id=qyk10 href="http://chintanblog.blogspot.com/2007/12/although-wsif-seems-to-be-hack-to-plug.html"&gt;http://chintanblog.blogspot.com/2007/12/although-wsif-seems-to-be-hack-to-plug.html&lt;/A&gt; to create WSIF on top of my EJB 3.0 session facade.&lt;/P&gt; &lt;P id=f7:r5&gt; &lt;/P&gt; &lt;P id=f7:r7&gt;&lt;B id=mfcy4&gt;&lt;A id=ivcu name=Performance_Matrix:&gt;&lt;/A&gt;&lt;FONT id=y3j61 size=3&gt;5. Performance Matrix&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P id=rikn1&gt; &lt;/P&gt; &lt;P id=rikn2&gt;&lt;B id=a-nc0&gt;Test case: &lt;/B&gt; Used WebDav repository, Rule Function interface which executes more than 10 rule sets and creates whole bunch of external connection. It usually takes about 2 seconds to complete the Rule Session itself. I used about 10 threads and loop of 50 with 1 second delay in each (so total number of instances will be 500).&lt;/P&gt; &lt;P id=lncn0&gt; &lt;/P&gt; &lt;P id=lncn1&gt;&lt;B id=a4bl0&gt;Default Decision Service over SOAP:&lt;/B&gt; I created sample BPEL process and created decision service with decide activity (which comes with jaxb java and classes, jar, ear, war, and so on...). Here were the results:&lt;/P&gt; &lt;P id=r2pz0&gt;&lt;B id=r2pz1&gt;Average execution time:&lt;/B&gt; 3.1 second&lt;/P&gt; &lt;P id=r2pz2&gt;&lt;B id=r2pz3&gt;Number of failures:&lt;/B&gt; 15&lt;/P&gt; &lt;P id=lncn2&gt; &lt;/P&gt; &lt;P id=lncn3&gt; &lt;/P&gt; &lt;P id=lncn4&gt;&lt;B id=a4bl1&gt;Custom Decision Service over SOAP:&lt;/B&gt; To be fair I didn't use WSIF interface. Calling my custom decision service over soap protocol. It is just like normal partner link.&lt;/P&gt; &lt;P id=r2pz0&gt;&lt;B id=r2pz1&gt;Average execution time:&lt;/B&gt; 3.5 second&lt;/P&gt; &lt;P id=r2pz2&gt;&lt;B id=r2pz3&gt;Number of failures:&lt;/B&gt; 10&lt;/P&gt; &lt;P id=a4bl2&gt; &lt;/P&gt; &lt;P id=slut0&gt; &lt;/P&gt; &lt;P id=slut1&gt;&lt;B id=slut2&gt;&lt;FONT id=iq9m0 size=3&gt;Notes:&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P id=a4bl3&gt;- Reason behind slowness is because of I am doing more reflection which is a bit expensive.&lt;/P&gt; &lt;P id=slut3&gt;- Because of EJB and container managed stuff, I am getting less number of failures.  &lt;/P&gt; &lt;P id=m8sw0&gt;- Out-of-box decision service caches the Rule Connection where the custom decision service manages the entire pool which is shared across the enterprise. I believe if I test with 20 different BPEL processes with different pattern of calls, I will be far ahead in comparison with default decision service. &lt;/P&gt; &lt;P id=slut5&gt; &lt;/P&gt; &lt;P id=nrk60&gt; &lt;/P&gt; &lt;P id=a4bl4&gt;I am more than willing to get your feedback on this. I am not sure if I did right thing, but I believe I reduced (rather completely eliminated) overhead for managing far complex default decision service.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-3560498548372336397?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/3560498548372336397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=3560498548372336397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3560498548372336397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3560498548372336397'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/05/custom-decision-service-i-am-not-very.html' title='Custom Decision Service'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-5100586772964079704</id><published>2008-05-22T14:30:00.000-07:00</published><updated>2008-06-02T16:22:23.039-07:00</updated><title type='text'>ESB Display Older Instances</title><content type='html'>&lt;P id=fr1j1&gt;I used to have my own interceptor logging all required thing into the database, so never had to look at ESB console. &lt;/P&gt; &lt;P id=oczt0&gt; &lt;/P&gt; &lt;P id=oczt1&gt;&lt;B id=oczt2&gt;&lt;FONT id=l-.40 size=4&gt;Issue 1 : &lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P id=oczt3&gt; &lt;/P&gt; &lt;P id=oczt4&gt;Recently when I was working on ESB console I realized that it displays only a day old instances! While looking into the database I saw all instances where there. &lt;/P&gt; &lt;P id=h:420&gt; &lt;/P&gt; &lt;P id=h:421&gt;Yeah, of course the ESB client API was causing the issues. As mentioned in my earlier blogs, to debug ESB Console related issues, the best things is to use obtunnel to intercept all your request and then simple wingrep/grep to search for what you interested in. &lt;/P&gt; &lt;P id=dwv80&gt; &lt;/P&gt; &lt;P id=dwv81&gt;The reason behind day old instance was easy to find:&lt;/P&gt; &lt;P id=dwv82&gt; &lt;/P&gt; &lt;P id=dwv83&gt;&lt;B id=gmd90&gt;File Name:&lt;/B&gt;    %soasuite%/j2ee/oc4j_soa/applications/esb-dt/esb_console/esb/model/model.InstancesSearch.js&lt;/P&gt; &lt;P id=dwv84&gt;&lt;B id=gmd91&gt;Where:&lt;/B&gt;         Search for key word "InstanceSearchModel.prototype.init" about the line number: 150 in 10.1.3.1&lt;/P&gt; &lt;P id=dwv85&gt; &lt;/P&gt; &lt;P id=coso0&gt;&lt;B id=coso1&gt;Content:         &lt;/B&gt;&lt;/P&gt; &lt;P id=coso2&gt; &lt;/P&gt; &lt;P id=coso4&gt;&lt;B id=coso5&gt;Original:&lt;/B&gt;&lt;/P&gt; &lt;P id=coso6&gt; &lt;/P&gt; &lt;P id=coso8&gt;InstanceSearchModel.prototype.init = function(serviceConfigROTID)&lt;BR id=coso9&gt;{&lt;BR id=coso10&gt;  this._trackingSC = new TrackingSearchCriterion(serviceConfigROTID);&lt;BR id=coso11&gt;  this._serviceEntityInfo = null; // ESBEntityInfo&lt;BR id=coso12&gt;  this._status = "Any";&lt;BR id=coso13&gt;  this._flowID = "";&lt;BR id=coso14&gt;  this._timePeriod = 1;&lt;BR id=coso15&gt;  this._timeUnit = "days";&lt;BR id=coso16&gt;  this._timeZoneString = InstanceSearchModel.getTimezoneString(new Date(), false);&lt;BR id=coso17&gt;}&lt;/P&gt; &lt;P id=coso18&gt; &lt;/P&gt; &lt;P id=coso19&gt;Basically InstanceSearchModel creates Rest Webservice request to ESB server, and timePeriod is configurable parameter to this object. Based on my observation, other javascript which are using InstanceSearchModel object are not passing this parameter, so default parameter will be used which is &lt;B id=fwo70&gt;1 day&lt;/B&gt;. I changed the default to 20 days and it showed 20 days worth of instances... &lt;/P&gt; &lt;P id=fwo71&gt; &lt;/P&gt; &lt;P id=fwo72&gt;&lt;B id=fwo73&gt;Modified:&lt;/B&gt;&lt;/P&gt; &lt;P id=fwo74&gt; &lt;/P&gt; &lt;P id=fwo76&gt;InstanceSearchModel.prototype.init = function(serviceConfigROTID)&lt;BR id=ue4t0&gt;{&lt;BR id=ue4t1&gt;  this._trackingSC = new TrackingSearchCriterion(serviceConfigROTID);&lt;BR id=ue4t2&gt;  this._serviceEntityInfo = null; // ESBEntityInfo&lt;BR id=ue4t3&gt;  this._status = "Any";&lt;BR id=ue4t4&gt;  this._flowID = "";&lt;BR id=ue4t5&gt;  this._timePeriod = &lt;B id=s:_60&gt;&lt;FONT id=s:_61 color=#0000ff&gt;20&lt;/FONT&gt;&lt;/B&gt;;&lt;BR id=ue4t6&gt;  this._timeUnit = "days";&lt;BR id=ue4t7&gt;  this._timeZoneString = InstanceSearchModel.getTimezoneString(new Date(), false);&lt;BR id=ue4t8&gt;}&lt;/P&gt; &lt;P id=ib5t0&gt; &lt;/P&gt; &lt;P id=ib5t1&gt; &lt;/P&gt; &lt;P id=oczt5&gt;&lt;B id=yl:b0&gt;&lt;FONT id=yl:b1 size=4&gt;Issue 2 : &lt;/FONT&gt;&lt;/B&gt; &lt;/P&gt; &lt;P id=oczt6&gt; &lt;/P&gt; &lt;P id=yl:b2&gt;ESB has limitation on returning only 100 results. It was an amanzing experience to rip off the entire oraesb.jar and go through the hierachy of java files, &lt;/P&gt; &lt;P id=a_io0&gt; &lt;/P&gt; &lt;P id=xkzl0&gt;soasuite/j2ee/oc4j_soa/applications/esb-dt/esb_console/WEB-INF/web.xml &lt;BR id=a_io1&gt;oraesb/oracle/tip/esb/configuration/servlet/CommandServlet.jad&lt;BR id=a_io2&gt;oraesb/oracle/tip/esb/configuration/servlet/command/GetInstancesCommand.jad  (xmlInstanceManager.getInstances)&lt;BR id=a_io3&gt;oraesb/oracle/tip/esb/console/XMLInstanceManager.jad &lt;BR id=a_io4&gt;oraesb/oracle/tip/esb/console/XMLInstanceManagerImpl.jad&lt;BR id=a_io5&gt;oracle/tip/esb/monitor/manager/ActivityMessageStore.jad&lt;BR id=a_io6&gt;oraesb/oracle/tip/esb/monitor/manager/database/DBActivityMessageStore.jad  (InstanceListXMLBuilder)&lt;BR id=a_io7&gt;oraesb/oracle/tip/esb/monitor/manager/database/InstanceListXMLBuilder.jad &lt;BR id=a_io8&gt;oraesb/oracle/tip/esb/monitor/manager/database/FilterParser.jad (String s = RepositoryFactory.getRepository("RUNTIME").getESBParameter("MaxInstanceCount"))&lt;/P&gt; &lt;P id=vr4v1&gt; &lt;/P&gt; &lt;P id=vr4v2&gt;&lt;B id=a_io9&gt;Bingo!&lt;/B&gt; Finally I found the last file which was reading the parameter from ESB parameter table, now it was piece of cake!&lt;/P&gt; &lt;P id=vr4v3&gt; &lt;/P&gt; &lt;P id=vr4v4&gt;I added, insert into esb_parameter (PARAM_NAME, PARAM_VALUE)  values ( 'MaxInstanceCount', '1000' ); in ORAESB schema, and bounced the server and it started working like magic!&lt;/P&gt; &lt;P id=hgr00&gt; &lt;/P&gt; &lt;P id=hgr01&gt; &lt;/P&gt; &lt;P id=v5n51&gt; &lt;/P&gt; &lt;P id=xkzl1&gt; &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-5100586772964079704?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/5100586772964079704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=5100586772964079704' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5100586772964079704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5100586772964079704'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/05/esb-display-older-instances-i-used-to.html' title='ESB Display Older Instances'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7857991568813530536</id><published>2008-05-13T13:59:00.000-07:00</published><updated>2008-05-13T19:02:38.598-07:00</updated><title type='text'>MQ Adapter Anatomy</title><content type='html'>&lt;P id=e_rk0&gt;Recently I had chance to work with MQ Adapter, and it was pretty nice experience and I pretty much tried all different types of settings supported by MQAdapter. Here I would like to share something. &lt;/P&gt; &lt;P id=be0c0&gt; &lt;/P&gt; &lt;P id=be0c1&gt;If you religiously follow the document: &lt;A id=dyla0 href="http://download.oracle.com/docs/cd/B32110_01/web.1013/b28956.pdf"&gt;&lt;U id=dyla1&gt;&lt;FONT id=dyla2 color=#0000ff&gt;http://download.oracle.com/docs/cd/B32110_01/web.1013/b28956.pdf&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt;  then there is not much value I will be adding, but still you might find something useful and accumulated information.&lt;/P&gt; &lt;P id=dyla3&gt; &lt;/P&gt; &lt;P id=dyla4&gt;&lt;FONT id=dyla5&gt;&lt;B id=z_0y0&gt;1) Different Settings&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P id=z_0y1&gt; &lt;/P&gt; &lt;DIV id=nwps0 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=bfjp0 src="http://docs.google.com/File?id=dhmngsxp_1396pz546hd_b"&gt;    &lt;/DIV&gt; &lt;DIV id=nwps1 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;    Now let's take a look at each parameter:&lt;/DIV&gt; &lt;UL id=j6wa0 dir=ltr&gt; &lt;LI id=voy31&gt; &lt;P class=MsoNormal id=gwyb3&gt;Scheme: Three types of scheme&lt;/P&gt; &lt;OL id=voy32&gt; &lt;LI id=voy33&gt; &lt;P class=MsoNormal id=voy34&gt;dynamic : use max connections, if all are in use, then give new one and don't worry about maxConnections limit&lt;/P&gt; &lt;LI id=voy35&gt; &lt;P class=MsoNormal id=voy36&gt;fixed: use max connections, if all are in use, then throw exception for new request &lt;/P&gt; &lt;LI id=voy37&gt; &lt;P class=MsoNormal id=voy38&gt;fixed_wait: use max connections, if all are in use, then do fixed amount of wait for newly requested connection&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt; &lt;P class=MsoNormal id=bk1w1&gt; &lt;/P&gt;&lt;/LI&gt; &lt;UL id=x58l0&gt; &lt;LI id=bk1w2&gt; &lt;P class=MsoNormal id=bk1w3&gt;Best practice is to use fixed_wait with higher timeout so that we can restrict the number of connection &lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=gwyb21 style="MARGIN: 0in 0in 0pt"&gt; &lt;/P&gt; &lt;UL id=gwyb24 style="MARGIN-TOP: 0in" type=disc&gt; &lt;LI class=MsoNormal id=gwyb25 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=gwyb26&gt;minConnections/maxConnections/initial-capacity: Decided number of connections and initial connections during start up.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=gwyb27 style="MARGIN: 0in 0in 0pt 0.25in"&gt; &lt;/P&gt; &lt;UL id=gwyb30 style="MARGIN-TOP: 0in" type=disc&gt; &lt;LI class=MsoNormal id=gwyb31 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=gwyb32&gt;waitTimeout : This is the timeout used during fixed_wait scheme for new requests&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=gwyb33 style="MARGIN: 0in 0in 0pt"&gt; &lt;/P&gt; &lt;UL id=gwyb36 style="MARGIN-TOP: 0in" type=disc&gt; &lt;LI class=MsoNormal id=gwyb37 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=gwyb38&gt;inactivity-timeout-check: When to check for expired or inactive connections. Supported values are "never","periodic","piggyback" (when a new connection is fetched), and "all" (periodically and when a new connection is fetched).&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=vb2m0 style="MARGIN: 0in 0in 0pt"&gt;     &lt;/P&gt; &lt;UL id=vb2m1 style="MARGIN-TOP: 0in" type=disc&gt; &lt;UL id=vb2m2&gt; &lt;LI class=MsoNormal id=j6wa4 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=itmm3&gt;We kept it “all” as we don’t want to keep connections idle longer than certain time period.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=gwyb44 style="MARGIN: 0in 0in 0pt 0.5in"&gt; &lt;/P&gt; &lt;UL id=vb2m3&gt; &lt;LI class=MsoNormal id=gwyb48 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=gwyb49&gt;inactivity-timeout: The desired connection timeout, in seconds, as a positive integer, or 0 for connections to never expire. Negative values are disallowed.&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=vb2m4 style="MARGIN: 0in 0in 0pt"&gt; &lt;/P&gt; &lt;UL id=vb2m5&gt; &lt;UL id=vb2m6&gt; &lt;LI id=vb2m7&gt; &lt;DIV class=MsoNormal id=vb2m8 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=gwyb54&gt;We have kept it 60 seconds.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=gwyb55 style="MARGIN: 0in 0in 0pt 0.5in"&gt;   &lt;/P&gt; &lt;P id=liin4&gt;   &lt;/P&gt; &lt;P id=vb2m9&gt; &lt;/P&gt; &lt;P id=ilmw3&gt;&lt;FONT id=ilmw4&gt;&lt;B id=ilmw5&gt;2) "Garbage Collector" - clean up routine&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P id=liin12&gt; &lt;/P&gt; &lt;P id=i4tw0&gt;     Basically three parameters are used to configure for releasing the idle connection held by OC4J connection pool. &lt;/P&gt; &lt;P id=neh60&gt; &lt;/P&gt; &lt;UL id=neh61&gt; &lt;LI id=neh62&gt; &lt;DIV id=neh63&gt;inactivity-timeout-check: has to be "all" or "piggyback", all is desired if you want to periodically run clean up routine.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P id=s0el0&gt; &lt;/P&gt; &lt;UL id=s0el1&gt; &lt;LI id=s0el2&gt; &lt;DIV id=s0el3&gt;&lt;FONT id=gwyb49&gt;inactivity-timeout: The desired connection timeout, in seconds, as a positive integer, or 0 for connections to never expire. Negative values are disallowed.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P id=i4tw1&gt; &lt;/P&gt; &lt;UL id=gwyb58 style="MARGIN-TOP: 0in" type=disc&gt; &lt;LI class=MsoNormal id=gwyb59 style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT id=gwyb60&gt;Server.xml (taskmanager-granularity): When inactivity-timeout-check is configured to be periodic, this value specify how specified how frequently we want to run the periodic recycling routine.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P class=MsoNormal id=f:bt0 style="MARGIN: 0in 0in 0pt"&gt; &lt;/P&gt; &lt;P class=MsoNormal id=f:bt1 style="MARGIN: 0in 0in 0pt"&gt;        Here is sample server.xml entry:&lt;/P&gt; &lt;P class=MsoNormal id=f:bt2 style="MARGIN: 0in 0in 0pt"&gt;        &lt;/P&gt;&lt;FONT id=gwyb63&gt; &lt;DIV id=ihgi style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=zi:c0 src="http://docs.google.com/File?id=dhmngsxp_140cqd62vv7_b"&gt;&lt;/DIV&gt;&lt;/FONT&gt; &lt;P id=liin14&gt; &lt;/P&gt; &lt;P id=vb2m10&gt; &lt;/P&gt; &lt;P id=vb2m11&gt; &lt;/P&gt; &lt;P id=fvw11&gt; &lt;/P&gt; &lt;P id=ilmw0&gt;&lt;FONT id=ilmw1&gt;&lt;B id=ilmw2&gt;3) Different Level of Caching and Related Errors&lt;/B&gt;&lt;/FONT&gt;&lt;/P&gt; &lt;P id=xpgg0&gt; &lt;/P&gt; &lt;P id=yexx0&gt;Actually, after setting 1 and 2, connections were still not getting cleared, and we were able to see on MQ server side (using Tivoli) that connections are not getting closed. We found from Oracle product managers, that Adapter itself manages cache for MQ (or any type of) connections.&lt;/P&gt; &lt;P id=erz80&gt; &lt;/P&gt; &lt;P id=erz81&gt;We need to provide, &lt;FONT id=zk7-0 size=2&gt;cacheConnections=false property in BPEL Partnerlink or ESB end point property. After that ESB and BPEL releases connection nicely and clean up routine described in No 2, works great and cleans up all idle connections. &lt;/FONT&gt;&lt;/P&gt; &lt;P id=yexx1&gt; &lt;/P&gt; &lt;P id=vb2m12&gt; &lt;/P&gt; &lt;P id=vb2m13&gt; &lt;/P&gt; &lt;P id=pd2t0&gt; &lt;/P&gt; &lt;P id=pd2t2&gt;&lt;B id=pd2t3&gt;4) Inbound and Outbound MQ adapter&lt;/B&gt;&lt;/P&gt; &lt;P id=fvw13&gt; &lt;/P&gt; &lt;P id=fvw15&gt;&lt;FONT id=f.a60&gt;Another finding I found was, difference between inbound and outbound adapters. If you have MQ outbound adapter with "cacheConnections=false", it releases connection right after completing the unit of work, and connection is available to OC4J connection pool. But if you have MQ inbound adapter with "cacheConnections=false", it still holds the connection. Probably it is because of continuous polling. &lt;/FONT&gt;&lt;/P&gt; &lt;P id=v2m50&gt; &lt;/P&gt; &lt;P id=v2m51&gt;I have not tried it with changing the polling frequency to see if connection get releasesd. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7857991568813530536?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7857991568813530536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7857991568813530536' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7857991568813530536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7857991568813530536'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/05/mq-adapter-anatomy-recently-i-had.html' title='MQ Adapter Anatomy'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-3276641313361616302</id><published>2008-05-09T21:57:00.001-07:00</published><updated>2008-05-09T22:08:02.050-07:00</updated><title type='text'>Big News - Resigned Oracle</title><content type='html'>Joined on Nov 29, 2005 and finally completed my last day at Oracle today. Feel pretty sad and same time very exciting to face new challenges by my self.  Now I am becoming independent consultant in Oracle SOA space and without any expert's support. &lt;br /&gt;&lt;br /&gt;I am may be putting my career at risk but as we all know: &lt;strong&gt;The biggest risk in life is not to take one!&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-3276641313361616302?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/3276641313361616302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=3276641313361616302' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3276641313361616302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3276641313361616302'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/05/big-news-resigned-oracle.html' title='Big News - Resigned Oracle'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4010492587233319307</id><published>2008-04-09T11:55:00.000-07:00</published><updated>2008-04-09T11:59:21.121-07:00</updated><title type='text'>ESB (and BPEL) purge instances</title><content type='html'>            There are multiple ways we can use to purge &lt;span id="gfax"&gt;&lt;b id="p141"&gt;ESB instances&lt;/b&gt;&lt;/span&gt;.&lt;br id="zlds"&gt;&lt;br id="dpdh"&gt;&lt;span id="pz63"&gt;&lt;b id="alkm"&gt;Database Scripts&lt;/b&gt;&lt;/span&gt;&lt;br id="zrn1"&gt;For 10.1.3.3.1 SOASuite ESB purge instances scripts are provided as part of installation (%soasuite%/integration/esb/sql/other):&lt;br id="y501"&gt;- purge_by_date.sql&lt;br id="f-jp"&gt;- purge_by_instance_id.sql&lt;br id="mrw2"&gt;- purge_by_id.sql&lt;br id="bf6-"&gt;&lt;br id="cmri"&gt;&lt;span id="uqj9"&gt;&lt;br id="ir7b"&gt;&lt;b id="nb91"&gt;ESB Client API&lt;/b&gt;&lt;/span&gt;&lt;br id="bfvg"&gt;Database scripts are always good, but it should be best practice to rely on API provided by product. Same as BPEL Client API, whatever you can do in ESB console you can do via ESB client API. I used %soasuite%/bpel/bin/obtunnel.bat to check what XML based payload it is using. For cleaning the ESB instances, here is the  sample code:&lt;br id="zwr6"&gt;&lt;br id="ye6."&gt;        purgeInstance.consoleClient = purgeInstance.getESBClient();&lt;br id="q82w"&gt;        String purge = "&amp;lt;instanceManage enable='true' userPurgeTimePeriod='14400000'/&amp;gt;";&lt;br id="gm6d"&gt;        HashMap&amp;lt;String, String&amp;gt; requestProps = new HashMap&amp;lt;String, String&amp;gt;();&lt;br id="h2yc"&gt;        requestProps.put("root", purge);&lt;br id="j.xh"&gt;        purgeInstance.consoleClient.perform("UpdateTrackingConfig", requestProps);&lt;br id="p7gj"&gt;&lt;br id="fq1o"&gt;Here time period is in milliseconds and all instances older than timestamp will be purged. If we need to purge all instances, we need to change userPurgeTimePeriod='0'.&lt;br id="nuun"&gt;&lt;br id="lt-q"&gt;&lt;span id="x1.q"&gt;&lt;br id="uhww"&gt;&lt;b id="pnmi"&gt;Custom ANT Task&lt;br id="vlnk"&gt;&lt;/b&gt;&lt;/span&gt;I saw the custom ANT tasks for managing BPEL domain, purge instances, etc.. It is an amazing job done by Ramkumar Menon (&lt;a title="http://blogs.oracle.com/rammenon/2007/11/26#a74" href="http://blogs.oracle.com/rammenon/2007/11/26#a74" id="ynz4"&gt;http://blogs.oracle.com/rammenon/2007/11/26#a74&lt;/a&gt; ). I used his framework and added some tasks for managing ESB. &lt;br id="usym"&gt;&lt;br id="rx8g"&gt;It is really easy to use this tasks, e.g. for managing BPEL domain you can specify following in build.xml:&lt;br id="b885"&gt;&lt;br id="ws5e"&gt;  &amp;lt;BPELServerAdmin providerurl="${bpelProviderURL}" username="${bpelUsername}" password="${bpelPassword}"&amp;gt;&lt;br id="g_6s"&gt;   &amp;lt;manageDomain domain="${bpelDomainName}"&amp;gt;&lt;br id="ln67"&gt;    &amp;lt;purgeInstances select="all" fromdatetime="${bpelPurgeInstanceFromDateTime}" todatetime="${bpelPurgeInstanceToDateTime}"/&amp;gt;&lt;br id="r_yb"&gt;    &amp;lt;undeployProcesses select="BPELProcess.*" type="all" revision="all"/&amp;gt;&lt;br id="txze"&gt;   &amp;lt;/manageDomain&amp;gt;&lt;br id="egd:"&gt;  &amp;lt;/BPELServerAdmin&amp;gt;&lt;br id="rj4g"&gt;&lt;br id="snk7"&gt;This will purge instances based on timestamp and undeploy the processes.&lt;br id="x6e8"&gt;&lt;br id="jjfj"&gt;For ESB, this is what I added: &lt;br id="ub.0"&gt;&lt;br id="o.bf"&gt;  &amp;lt;ESBServerAdmin username="${esbUsername}" password="${esbPassword}" hostname="${esbHostName}" port="${esbPort}"&amp;gt;&lt;br id="xo9y"&gt;   &amp;lt;purgeESBInstances todatetime="${esbPurgeInstanceToDateTime}"/&amp;gt;&lt;br id="xhe5"&gt;  &amp;lt;/ESBServerAdmin&amp;gt;&lt;br id="z23k"&gt;&lt;br id="wk:s"&gt;You can purge ESB instances based on timestamp, from and to is not supported. Probably it can be enhanced if there is requirement.&lt;br id="bs4k"&gt;&lt;br id="g1lo"&gt;Here is the &lt;a title="link" href="http://chintanjshah.googlepages.com/PurgeInstances.zip" id="tzjp"&gt;link&lt;/a&gt; for downloading Ant task with readme file, sample build.xml and sample build.properties file.&lt;br id="tpz1"&gt;&lt;br style="font-weight: bold;" id="jwzb"&gt;            &lt;br id="i1t-"&gt;&lt;br id="baa6"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4010492587233319307?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4010492587233319307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4010492587233319307' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4010492587233319307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4010492587233319307'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/04/esb-purge-instances-there-are-multiple.html' title='ESB (and BPEL) purge instances'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-5012892171935165920</id><published>2008-04-08T14:57:00.000-07:00</published><updated>2008-06-18T14:05:31.723-07:00</updated><title type='text'>Performance with ESB and BPEL UDDI runtime lookups</title><content type='html'>            Well, nothing new with it, as long as you are using SOASuite 10.1.3.3.1 you should have both of them out of the box. Just to recap: &lt;p id="h3wc"&gt; &lt;/p&gt; &lt;p id="di45"&gt;&lt;font id="ac77" size="3"&gt;&lt;b id="hjb5"&gt;BPEL run-time look-ups&lt;/b&gt;&lt;/font&gt;&lt;b id="c1e4"&gt;:&lt;/b&gt;&lt;/p&gt;&lt;p id="di45"&gt;&lt;br id="lefv"&gt;&lt;/p&gt; &lt;p id="lwzz"&gt;1) You have to define/publish wsdl in service registry. If you publish wsdl through User Interface, it creates unique sequence id for registry key which you can change using registry user interface. You can also use registry API to publish wsdl of the service.&lt;/p&gt;&lt;p id="lwzz"&gt;2) Define registryServiceKey as property of partnerlink&lt;/p&gt;&lt;br id="wnw3"&gt;&lt;p id="lwzz"&gt;You can either edit bpel.xml or edit the partnerlink to achieve it:&lt;/p&gt;&lt;br id="tlhs"&gt;&lt;div id="oq:b" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="upzt" style="width: 966px; height: 360px;" src="http://docs.google.com/File?id=dhmngsxp_132c2xbwnfn_b"&gt;&lt;/div&gt;&lt;br id="c11o"&gt;&lt;p id="lwzz"&gt;&lt;/p&gt;&lt;div id="j.f:" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="z.dw" style="width: 640px; height: 390px;" src="http://docs.google.com/File?id=dhmngsxp_1314mskrgd8_b"&gt;&lt;/div&gt;&lt;p id="dwt:"&gt;&lt;/p&gt;&lt;p id="lwzz"&gt;&lt;br id="fefk"&gt;&lt;/p&gt;&lt;p id="lwzz"&gt;3) Define registry URLs in domain.xml &lt;br id="fxb_"&gt;&lt;/p&gt;&lt;p id="lwzz"&gt; &lt;/p&gt; &lt;br id="nu0-"&gt;&lt;p id="cf7o"&gt;&lt;/p&gt;&lt;div id="pkmp" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="n195" style="width: 875px; height: 468px;" src="http://docs.google.com/File?id=dhmngsxp_133fhzqr3hn_b"&gt;&lt;/div&gt;&lt;p id="vicr"&gt;&lt;/p&gt;URL for uddiLocation should be http://host:port/registry/uddi/inquiry.&lt;br id="ag2j"&gt;&lt;br id="y2o1"&gt;&lt;br id="rskt"&gt;&lt;p id="cf7o"&gt;&lt;font id="z7lr" size="3"&gt;&lt;span id="m5v-"&gt;&lt;b id="jnyj"&gt;ESB run-time look-ups:&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p id="cf7o"&gt;&lt;br id="cai6"&gt;&lt;/p&gt;&lt;p id="lwzz"&gt;1) You have to define/publish wsdl in service registry. If you publish wsdl through User Interface, it creates unique sequence id for registry key which you can change using registry user interface. You can also use registry API to publish wsdl of the service.&lt;/p&gt; &lt;p id="lwzz"&gt;&lt;br id="sjfh"&gt;&lt;/p&gt;&lt;p id="lwzz"&gt;2) Define registryServiceKey as end point property for service&lt;br id="c_6k"&gt;&lt;/p&gt;&lt;br id="epwz"&gt;&lt;p id="lwzz"&gt;&lt;/p&gt;&lt;div id="ykgp" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="lnmz" style="width: 722px; height: 360px;" src="http://docs.google.com/File?id=dhmngsxp_134fjrc3vhm_b"&gt;&lt;/div&gt;&lt;p id="o76a"&gt;&lt;/p&gt;&lt;p id="cf7o"&gt;3) Define registry URLs in integration/esb/config/esb_config.ini file&lt;/p&gt; &lt;p id="vy0r"&gt;&lt;br id="vmil"&gt;&lt;/p&gt;&lt;div id="cn7m" style="padding: 1em 0pt; text-align: left;"&gt;&lt;div id="zd9y" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img id="ts5v" style="width: 822px; height: 507px;" src="http://docs.google.com/File?id=dhmngsxp_155cr8nqhd3_b"&gt;&lt;/div&gt;&lt;br id="ts5v0"&gt;&lt;/div&gt;I have tried both ESB and BPEL run-time look-ups and they work great. Although there are some really bad performance issues I saw: &lt;p id="htn7"&gt; &lt;/p&gt; &lt;p id="jl8z"&gt;After enabling run-time look-ups ESB or BPEL calling any service via UDDI was taking longer than 1 minutes to invoke (it was couple of milliseconds earlier). Upon analysis we find out the actual invocation was not the issue but preparing the call (get-wsdl, parse wsdl and store in specific cache) was taking the longest time. &lt;/p&gt; &lt;p id="b-n9"&gt; &lt;/p&gt; &lt;p id="fp.s"&gt;Also we saw that if load on BPEL and ESB if not very high, I don't see many performance issues but as soon as load increases (with number of threads) things get really slow. We did look at service registry logs and it's response time, service registry was extremely fast. &lt;/p&gt; &lt;p id="obbr"&gt; &lt;/p&gt; &lt;p id="hd8l"&gt;Here is what we found the reason behind slowness: ESB and BPEL both caches WSDL into their cache in specific format. If we do run-time look-ups BPEL and ESB gets the WSDL using service registry (which is pretty fast), but analyzing those wsdl and storing them in structure which BPEL and ESB run-time engine can understand takes a long time.&lt;/p&gt; &lt;p id="dz3o"&gt; &lt;/p&gt; &lt;p id="x:7q"&gt;In conclusion, all this stuff BPEL, ESB, OSR - run-time look-ups looked like an ideal approach but had some performance drawbacks. All that glitters is not gold :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-5012892171935165920?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/5012892171935165920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=5012892171935165920' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5012892171935165920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5012892171935165920'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/04/performance-with-esb-and-bpel-run-time.html' title='Performance with ESB and BPEL UDDI runtime lookups'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-787258161396546044</id><published>2008-03-31T15:14:00.000-07:00</published><updated>2008-04-08T12:27:00.168-07:00</updated><title type='text'>ESB read-only Console</title><content type='html'>&lt;P id=r6ti&gt;I know this functionality is supported out of the box, but there are some special touches added by me, and thought to share with everybody.&lt;/P&gt; &lt;P id=kqa5&gt; &lt;/P&gt; &lt;P id=imf4&gt;To create ESB read-only user account: &lt;/P&gt; &lt;P id=gi02&gt;- Create user in EM with ascontrol_monitor, and that's all is required for creating read-only account for ESB read-only.&lt;/P&gt; &lt;P id=i18v&gt; &lt;/P&gt; &lt;DIV id=nn_i style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=rnew src="http://docs.google.com/File?id=dhmngsxp_127d2v5pngb_b"&gt;&lt;/DIV&gt; &lt;P id=nucu&gt; &lt;/P&gt; &lt;P id=h:e2&gt;Now if I login to ESB console using esbreadonly user, everything works fine. There are some gotchas here:&lt;/P&gt; &lt;P id=gpk:&gt; &lt;/P&gt; &lt;P id=ef7o&gt;- You can delete any service using esbreadonly user! &lt;/P&gt; &lt;P id=n11s&gt;- Sometime you want to enhance functionality, e.g. not all readonly user should have access to routing rules, etc... &lt;/P&gt; &lt;P id=j8e3&gt; &lt;/P&gt; &lt;P id=cvyl&gt;I published the article for &lt;A id=tqyq title="BPEL Readonly Console" href="http://chintanblog.blogspot.com/2007/12/i-saw-numerous-people-asking-about-bpel_290.html"&gt;BPEL Read-only Console&lt;/A&gt; , it was fairly easy because BPEL read-only console are all JSP and I used Servlet filter to achieve that functionality. Now ESB console is all Java Script underneath. From directory names I can see it is Picasa framework, not sure how that works, but debugging JS is hell lot of time unless you have good editor. &lt;/P&gt; &lt;P id=z21o&gt; &lt;/P&gt; &lt;P id=t59z&gt; &lt;/P&gt; &lt;P id=vwjd&gt; &lt;/P&gt; &lt;P id=ptx6&gt;&lt;B id=rlfx&gt;Disable Delete button for Readonly Users&lt;/B&gt;:&lt;/P&gt; &lt;P id=fwjk&gt; &lt;/P&gt; &lt;P id=sf-h&gt;The best way to debug Javascript is just to use wingrep and find the pattern which you are looking for. For disabling &lt;B id=b7b:&gt;DELETE&lt;/B&gt; button, here is the trick:&lt;/P&gt; &lt;P id=n488&gt; &lt;/P&gt; &lt;P id=c.o6&gt;- open %soasuite%/j2ee/oc4j_soa/applications/esb-dt/esb_console/esb/commands/controller.ServiceNavigator.js&lt;/P&gt; &lt;P id=rrf7&gt; &lt;/P&gt; &lt;P id=zzg5&gt;- Search for following two entry (it should be about 399 or 400 line in the file: &lt;/P&gt; &lt;P id=om3q&gt;  var a=ActionController[gActionDeleteService];&lt;BR id=m5ld&gt;  a.enable();&lt;/P&gt; &lt;P id=x:g9&gt; &lt;/P&gt; &lt;P id=g33u&gt;- Add following line of code below the a.enable(); line:&lt;/P&gt; &lt;P id=x:bi&gt;&lt;B id=bhbw&gt;  /* cshah changes : added code to disable delete button */&lt;BR id=mmmk&gt;  if(!isAdminUser()) {&lt;BR id=q2-7&gt;    a.disable();&lt;BR id=z_q5&gt;  }&lt;BR id=w265&gt;&lt;/B&gt;   &lt;/P&gt; &lt;P id=a9y_&gt;That's all and DELETE button will be disabled for non-admin users.&lt;/P&gt; &lt;P id=so_d&gt; &lt;/P&gt; &lt;P id=vjuh&gt; &lt;/P&gt; &lt;P id=eu3m&gt; &lt;/P&gt; &lt;P id=a11x&gt;&lt;B id=ujoc&gt;Enhance functionality for ESB console, disable tabs e.g. Routing Rules&lt;/B&gt;&lt;/P&gt; &lt;P id=x8bx&gt; &lt;/P&gt; &lt;P id=ipwv&gt;- open %soasuite%/j2ee/oc4j_soa/applications/esb-dt/esb_console/esb/commands/controller.ESBController.js&lt;/P&gt; &lt;P id=zzg5&gt; &lt;/P&gt; &lt;P id=kgv1&gt;- Search for following two entry (it should be about 614 and 615 line in the file: &lt;/P&gt; &lt;P id=pd4y&gt;  tabmodel.enableTab(TabModel.TAB_RTNGRULES_IDX);&lt;BR id=ave4&gt;  tabmodel.enableTab(TabModel.TAB_TACKINGFLDS_IDX);  &lt;/P&gt; &lt;P id=c:vk&gt; &lt;/P&gt; &lt;P id=uyjv&gt;- Add the following line of code right below tabmodel.enableTab(TabModel.TAB_TACKINGFLDS_IDX);&lt;/P&gt; &lt;P id=l58j&gt;&lt;B id=qvc4&gt;  /* cshah -- disable routing rules if the user is not admin */&lt;BR id=v0t:&gt;  if(!isAdminUser()) {&lt;BR id=clep&gt;   tabmodel.hideTab(TabModel.TAB_RTNGRULES_IDX);&lt;BR id=ayoa&gt;  }&lt;/B&gt;&lt;/P&gt; &lt;P id=py:j&gt;This will remove Routing Rules tabs for read-only (non-admin) users.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-787258161396546044?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/787258161396546044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=787258161396546044' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/787258161396546044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/787258161396546044'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/03/i-know-this-functionality-is-supported.html' title='ESB read-only Console'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-8759654286267027983</id><published>2008-01-10T10:17:00.000-08:00</published><updated>2008-01-10T10:18:46.680-08:00</updated><title type='text'>OWSM Offline Agents</title><content type='html'>&lt;p&gt;Per architecture OWSM Agents intercepts the requerst, calls the policy manager to retrieve the policy and then executes those policy where agent is installed. It introduces lot of traffic on policy manager. Policies are stored in database and policy manager is single point of contant for them. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Although we can break this dependency by offline agent installation, we can export all the policy from database as an XML file and provide that XML file to OWSM agent during the time of installation. In this case, owsm agents will look into the file, and wouldn't contact policy manager. We can update this file and policies at run time without bouncing the server.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Here are steps I followed:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Step 1: &lt;/b&gt;Create a client agent using OWSM ccore User Interface and defined the policies as I would for any other client agent. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Step 2:&lt;/b&gt; I expored those policies to an XML file using "save" button:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div id="kn45" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_122g4x8f2d5" /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Step 3:&lt;/b&gt; Now it is time to install this agent with policy file already exported. Client agent installation is explained pretty well in &lt;a href="http://www.oracle.com/technology/obe/fusion_middleware/owsm/index.html"&gt;http://www.oracle.com/technology/obe/fusion_middleware/owsm/index.html&lt;/a&gt; , but here I will just provide required informaiton to make offline. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;I provided following agent.properties and then used "wsmadmin installAgent" to install the client agent.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;agent.componentType=OC4JClientInterceptor&lt;br /&gt;agent.containerType=OC4J&lt;br /&gt;agent.containerVersion=10.1.3&lt;br /&gt;client.home=d:/soasuite/j2ee/oc4j_soa&lt;br /&gt;agent.component.id=C0003007&lt;br /&gt;agent.policymanager.enabled=&lt;b&gt;false&lt;/b&gt;&lt;br /&gt;agent.policySet.file=&lt;b&gt;D:/temp/owsm/OfflineAgentPolicySet.xml&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here I had to provide the policy file and disable the policy manger. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Step 4:&lt;/b&gt; Final testing: After this, I just create two BPEL process Calle and Caller to test my client agent, and it worked simply great. Upon changing the file name my client agent didn't work and upon updating the file client agent picked up new changes. It worked..&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;You can download agent.properties, policy file and test code from &lt;a id="v1ee" title="here" href="http://chintanjshah.googlepages.com/OfflineAgents.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-8759654286267027983?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/8759654286267027983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=8759654286267027983' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8759654286267027983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/8759654286267027983'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/01/per-architecture-owsm-agents-intercepts.html' title='OWSM Offline Agents'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-3648325360909228761</id><published>2008-01-10T09:13:00.000-08:00</published><updated>2008-01-10T09:15:56.698-08:00</updated><title type='text'>OWSM Client Agents</title><content type='html'>&lt;P&gt;It took me a while to configure all client agents, here is some information I would like to share. OWSM supports 3 types of client agents (&lt;A href="http://download.oracle.com/docs/cd/E10291_01/doc.1013/e10298.pdf"&gt;http://download.oracle.com/docs/cd/E10291_01/doc.1013/e10298.pdf&lt;/A&gt; page 6-6):&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;- &lt;B&gt;J2EE Client Agents&lt;/B&gt;: Configured when Servlet/EJB makes call to WebService and web service clients are maintained by Container&lt;/P&gt; &lt;P&gt;&lt;B&gt;- J2SE Client Agent:&lt;/B&gt; Configured when Stand-Alone Java is making call to WebService.&lt;/P&gt; &lt;P&gt;&lt;B&gt;- WSIF Client Agent:&lt;/B&gt; To leverage the WSIF framework used by ESB and BPEL. Configured when ESB/BPEL making outbound call to webservice.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; Client agent intercepts the outbound requests and executes the policies defined by policy manager.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;WSIF Client Agent&lt;/B&gt;: It is very well explained at Oracle OBE: &lt;A href="http://www.oracle.com/technology/obe/fusion_middleware/owsm/index.html"&gt;http://www.oracle.com/technology/obe/fusion_middleware/owsm/index.html&lt;/A&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;J2SE Client Agent:&lt;/B&gt; Here are the steps I followed to create J2SE client agent. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Step 1:&lt;/B&gt; I created BPEL webservice called HelloBPELAgentTestingCalle. Deployed that process to BPEL PM and secured it using Server Agent which requires WSSE authentication information. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Step 2:&lt;/B&gt; I copy the WSDL link and created J2EE webservice proxy from JDeveloper.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;IMG src="http://docs.google.com/File?id=dhmngsxp_118cbsbrf7x"&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; It creates pretty much all code required to invoke the webservice, although I had to add couple of lines of code to test the way I wanted:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;IMG src="http://docs.google.com/File?id=dhmngsxp_119gjzk26c4"&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; I tried to create fake security token from wizard (and also per documentation), I created HelloBPELAgentTestingCalleBinding_Stub.xml and put that file in src and also under src/../proxy/runtime directory. The content of this file is very well explained in WSIF client agent. &lt;/P&gt; &lt;P&gt;  &lt;/P&gt; &lt;DIV id=o1kk style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_120gbst52fv"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Now after putting all libraries in classpath as mentioned in document: client.home/owsm/lib/extlib, ORACLE_HOME/owsm/lib/cfluent-log4j.jar, JDBC jar file, ORACLE_HOME/jlib/orai18n.jar, ORACLE_HOME/jlib/ojmisc.jar&lt;/DIV&gt; &lt;P&gt;Now if I execute the client using JDeveloper, I can see that it is executing the client agent before it goes to real service.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;J2EE client agent:&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I tried to create J2EE client by creating Web Service proxy mentioned earlier and then wrapping it up in servlet or JSF page. &lt;/P&gt; &lt;P&gt;I found out that if I have to follow &lt;A href="http://download.oracle.com/docs/cd/B31017_01/web.1013/b28974/j2eewsclient.htm"&gt;http://download.oracle.com/docs/cd/B31017_01/web.1013/b28974/j2eewsclient.htm&lt;/A&gt; to create webservice client and then follow the document &lt;A href="http://download.oracle.com/docs/cd/E10291_01/doc.1013/e10298.pdf"&gt;http://download.oracle.com/docs/cd/E10291_01/doc.1013/e10298.pdf&lt;/A&gt; for configuring my war or jar file. I believe that's too much work and per my personal experience I would avoid recommeding such complicated way to client. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I went for little easy solution, although I my client agent will not be managed by container, but I can get same functionality served. I used my J2SE client which _stub.xml file and all other good stuff. I created Servlet wrapper around it and deployed to application server, things works just fine....&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;In a nutshell, you can use J2SE client approach and still deploy to container. It will serve the the purpose but won't be managed by container.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;You can download the code here for WSIF, J2SE and J2EE client agent over &lt;A id=kwqk title=here href="http://chintanjshah.googlepages.com/OWSMAgentTesting.zip"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-3648325360909228761?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/3648325360909228761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=3648325360909228761' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3648325360909228761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/3648325360909228761'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/01/owsm-client-agents-it-took-me-while-to.html' title='OWSM Client Agents'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-1315487801333159033</id><published>2008-01-09T22:06:00.000-08:00</published><updated>2008-01-09T22:07:55.554-08:00</updated><title type='text'>OWSM Field Level Encryption</title><content type='html'>&lt;P&gt;I had chance to work on OWSM agents and different type of encryption. Here I would like to present the solution for OWSM field level encryption. I already had encryption/decryptioin example working for full payload, so here I will just provide tricks on how to configure OWSM for field level encryption. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;It is basically doing XPATH encryptiong, as described in &lt;A href="http://download.oracle.com/docs/cd/E10291_01/doc.1013/e10299/policy_steps.htm#sthref612"&gt;http://download.oracle.com/docs/cd/E10291_01/doc.1013/e10299/policy_steps.htm#sthref612&lt;/A&gt;. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Step 1.&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I created a BPEL process called DemoOWSMFieldLevelEncryption which pretty much returns the input string. Here is how it looks like:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;IMG src="http://docs.google.com/File?id=dhmngsxp_109gtsms6gr"&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I have input payload with SSN number in it, which I am interested in encrypting:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=rgnt style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_110cp7k5jdp"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Please note down the namespace, it is used when we encrypt the message.&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;B&gt;Step 2:&lt;/B&gt;&lt;/DIV&gt; &lt;P&gt;Just for testing purpose I registered that service in OWSM gateway, and start creating policies for the service as shown below:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=ehfs style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_111dn5sw5d4"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; If we look at the XML encrypt in more detail :&lt;/P&gt; &lt;P&gt;  &lt;/P&gt; &lt;DIV id=yu6- style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_112hgggjhf8"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Here I am using existing utility to create JKS files. Interesting thing to note down is:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Encrypted Content: XPATH&lt;/P&gt; &lt;P&gt;Encrypt XPATH: /soap:Envelope/soap:Body/ns1:DemoFieldLevelEncryptionProcessRequest/ns1:SSN&lt;BR&gt;Encrypt namespaces: soap=http://schemas.xmlsoap.org/soap/envelope/,ns1=http://xmlns.oracle.com/DemoFieldLevelEncryption &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;As you can see, I am using soap and ns1 namespaces in my XPATH, so I have to define them in namespaces section as comma seperated values. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;If we look into XML decrypt, it remains pretty much the same. XML encrypt of body/header/envelope or xpath doesn't change XML decrption part.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=zxz2 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_113z263vqf6"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I created LOG before and after each policy step as part of best practices.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Step 3:&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Now time for testing. I used OWSM test page to test my registered service and used Execution Logs to check if messages are getting encrypted and then decrypted back to the original content. Here is what I saw:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=xgxp style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_114843sz8dg"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;First log (SSN is encrypted)&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=ucsn style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_115gxb7zwgr"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Second Log: SSN is decrypted back to the original value&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=at67 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_116gcbf8sgw"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;It seems like it is encrypting and decrypting field level variables. Source code can be downloaded at &lt;A id=q3hi title=here href="http://chintanjshah.googlepages.com/FieldLevelEncryption.zip"&gt;here&lt;/A&gt;. &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-1315487801333159033?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/1315487801333159033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=1315487801333159033' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1315487801333159033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1315487801333159033'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2008/01/owsm-field-level-encryption-i-had.html' title='OWSM Field Level Encryption'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-531050720377615503</id><published>2007-12-31T17:48:00.000-08:00</published><updated>2007-12-31T17:51:32.320-08:00</updated><title type='text'>BPEL Client API</title><content type='html'>&lt;P&gt;I had chance to work on both BPEL and ESB client APIs, and I found very little documentation on BPEL Client API, that made me write this BLOG entry. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;BPEL Client API:&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Everything we can do in BPELConsole, we can do through BPEL client API as well. BPEL client API is JAR file shipped with SOASuite, I imporeted that JAR file and I could manage my BPEL domain using stand alone Java program which calls this client APIs. Here is the usecase we had to implement: Activating and Deactivating a BPEL process using stand-alone Java program or Servlet.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Here is what I started with: &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=lbjx style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_105khvcdngx"&gt; &lt;/DIV&gt; &lt;DIV id=xffq style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_107dc9nhncg"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Here we can see the establishConnection, which takes oc4j server name, port, username and port to connect with BPEL server. I have couple of test service to list all domains, list all services in a domain. I have high-lighted startService and endService which has logic for activating and deactivating the service. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I had to include all libraries from, bpel/lib, opmn/lib and j2ee/home/lib. Once I included these libraries, I was able to run this Java program and activate/deactivate the process successfully.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;BPEL Client API source code can be downloaded from &lt;A id=kpoz title=here href="http://chintanjshah.googlepages.com/BPELClientAPI.zip"&gt;here&lt;/A&gt;.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;ESB Client API:&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I found ESB Client API are extreamly well explained and documented, so I avoided repeating that information.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-531050720377615503?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/531050720377615503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=531050720377615503' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/531050720377615503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/531050720377615503'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2007/12/bpel-client-api-i-had-chance-to-work-on.html' title='BPEL Client API'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-5796726115875538535</id><published>2007-12-31T15:38:00.000-08:00</published><updated>2007-12-31T15:39:31.768-08:00</updated><title type='text'>Oracle BPEL Header Interceptor</title><content type='html'>&lt;P&gt;I saw that BPEL interceptor has been only documented as header handler, I found it can do much more than just handling Headers. It is perfect interceptor and works just like Servlet Filter. It is sensitive part of code, because interceptor is called synchronously from main BPEL process. Any uncatched exception or time consuming delays in interceptor code will be propagated to main BPEL process.  &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;OK, let's look at how to implement it:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;We can register two different interceptor, one for request and one for response. I pretty much copied the initial part from documentation and enhance it for 10.1.3.x SOASuite. I created CustomHeaderHandler which implements HeaderHandler, and then I created two different classes InboundHandler and OutboundHandler which extends CustomHeaderHandler. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;CustomHeaderHandler:&lt;/B&gt; &lt;/P&gt; &lt;DIV id=yw6_ style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_98hr9sgvg6"&gt; &lt;/DIV&gt; &lt;P&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_99ctrh9qcr"&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Here we can see invoke operation with Parternlink, Header, CallProperties. I have also written dumpProperties method which will dump all the properties from Map. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Here is InBound and OutBound interceptor which merely just calls CustomHedaerHandler's invoke method:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;InboundHandler&lt;/B&gt; &lt;/P&gt; &lt;DIV id=v91e style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_100cjp9ktf4"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;OutboundHandler&lt;/B&gt; &lt;/P&gt; &lt;DIV id=k2nq style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_101dxqtxwg8"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;I compiled all three classes and put it in bpel/system/classes directory and restarted SOASuite. I created couple of BPEL Processes to test my interceptors, I put following lines of code in bpel.xml to activate the interceptors: &lt;/DIV&gt; &lt;DIV id=k82h style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_102hj44j7cs"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Now if I look into soasuite/opmn/log/default_group~oc4j_soa~default_group~1.log, I can see the intercepted log:&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=e_cp style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_103qrzn97gd"&gt;&lt;/DIV&gt;&lt;/DIV&gt;Source code can be downloaded at &lt;A id=ma.r title=here href="http://chintanjshah.googlepages.com/BPELHeaderInterceptor.zip"&gt;here&lt;/A&gt;.&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-5796726115875538535?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/5796726115875538535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=5796726115875538535' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5796726115875538535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/5796726115875538535'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2007/12/oracle-bpel-header-interceptor-i-saw.html' title='Oracle BPEL Header Interceptor'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4094970333519537073</id><published>2007-12-27T17:02:00.000-08:00</published><updated>2007-12-27T17:08:15.042-08:00</updated><title type='text'>It is all about JMX</title><content type='html'>&lt;DIV id=u0pg style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;It is all about JMX&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I worked on JMX stuff on OC4J lately, and found information are scattered at many places. Thought of writing blog to combine information which might be useful.&lt;/P&gt; &lt;P&gt;- Simple MBean registered in Stand-Alone JVM, and monitered using JConsole&lt;/P&gt; &lt;P&gt;- Simple MBean registration to stand-alone OC4J, Stand-Alone OC4J MBean Browser, Stand-Alone OC4J MBean Client&lt;/P&gt; &lt;P&gt;- Simple MBean registration to cluster OC4J, OC4J Cluster MBean Browser, Cluster OC4J MBean Client&lt;/P&gt; &lt;P&gt;- Monitor OC4J MBeans using JConsole&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;&lt;FONT size=4&gt;1. Stand-Alone JVM&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;As per MBean spec, we need to define interface which is suffixed by MBean. I created interface called HelloServiceMBean and implemented called HelloService.&lt;/P&gt; &lt;DIV id=jq1w style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=aq3i style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_74f7d5ndfk"&gt;&lt;/DIV&gt;Here getMessage and setMessage will expose my message as an &lt;B&gt;attribute&lt;/B&gt; to the MBean and printMessage will be exposed as an &lt;B&gt;operation&lt;/B&gt; to MBean. To register this MBean in stand-alone JVM, I wrote another class which register this MBean in JVM and I could manage it using JConsole MBean Browser.&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=sm49 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_75fb3rg2f2"&gt;&lt;/DIV&gt;I compiled those classes using JDeveloper and executed through following command line:&lt;/DIV&gt; &lt;P&gt;&lt;I&gt;cd D:projectsJMXSamplesSampleJMXclasses&lt;/I&gt;&lt;/P&gt; &lt;P&gt;&lt;I&gt;java -Dcom.sun.management.jmxremote jmx.trial.SimpleAgent &lt;/I&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;On second window, I started JConsole using: %JAVA_HOME%jdkbinJConsole, and I can see my MBean with Attributes and Operations. I can invoke any operation but I am not able to change any attribute using JConsole. Not sure why I am not able to change any attribute value using JConsole, it works just fine with OC4J MBean Browser.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=r025 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_76dkp367cf"&gt;&lt;/DIV&gt; &lt;DIV id=rbq6 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_77dw59hvf5"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;&lt;FONT size=4&gt;2. MBean with Stand-Alone OC4J&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;There are two options we can try, Registering JAR (&lt;B&gt;static registration&lt;/B&gt;) file to OC4J using deployment descriptor, and registering MBean from servlet (&lt;B&gt;dyanmic registration&lt;/B&gt;). For current Blog entry, I will use deploying through descriptor.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I used the same project which I used for Stand-Alone JVM. I created 3 artifacts in my JDeveloper project:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;- Created EJB-JAR deployment profile for jar file called: helloservicejar.deploy&lt;/P&gt; &lt;P&gt;- Created EAR deployment profile: helloservice.deploy (had dependency on helloservicejar.deploy)&lt;/P&gt; &lt;P&gt;- Created OC4J deployment descriptor called - orien-application.xml &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=f9-_ style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_78gqpv49hr"&gt;&lt;/DIV&gt; &lt;P&gt;I deployed this ear file in stand-alone OC4J, I can see my application and MBean Browser right in EM console. (We can also register this Jar file in j2ee/config/application.xml file then we don't need to have orien-application.xml and ear file.)&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=v2v8 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_79gqm6xrx2"&gt;&lt;/DIV&gt; &lt;DIV id=tz2h style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_80g9977qfd"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Here I can change attribute values and invoke operation without any issues. I used java client to test MBeans deployed on OC4J. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=qo_n style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_82nk88kmhn"&gt;&lt;/DIV&gt; &lt;P&gt;Here getMBeanConnection method is pretty generic, it will get us connection based on the URL specified. printAllMBeans will iterate through all available MBeans and prints all MBeans. The testStandAlone() method does, invocation of method, get attribute and set attribute. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I had to put following libraries in my classpath in order to execute my client:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;J2EE&lt;BR&gt;j2eehomelibjmx_remote_api.jar&lt;BR&gt;j2eehomelibjmxcluster.jar&lt;BR&gt;j2eehomelibjmxri.jar&lt;BR&gt;j2eehomelibadminclient.jar&lt;BR&gt;j2eehomeoc4jclient.jar&lt;BR&gt;opmnlib all six jar files.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=l8ni style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_83cm5zr9gq"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;&lt;FONT size=4&gt;3. MBean with Cluster OC4J&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Registration as JAR: &lt;/B&gt;Registration through JAR in Cluster is pretty much similar as registering in Stand-Alone. I use JDeveloper to deploy my EAR file in Cluster Group. I created a group called default_group and registered all my OC4J instances in that group. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Dynamic Registration:&lt;/B&gt; Through servlet or POJO residing in container, I could register only to specific container. It looks like, all instances has to do the same to achieve cluster level MBeans deployment.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;For testing purpose, I manually deployed a JAR on OC4J group. Here is little introduction about Cluster MBean:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;b&gt;Cluster MBean is actually a proxy to the OC4J group. Client (Java/Browser) can get hold on Cluster MBean, and pass the specific MBean and it's method/attribute as paraemter. Cluster MBean takes care of invoking those method across cluster. Cluster MBean knows about all OC4J instances through OC4J group configured in EM. For each OC4J group there will be one Cluster MBean proxy.&lt;/b&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;b&gt;OC4J Cluster MBean Browser&lt;/b&gt;: following are the screen shots which explains how did I use cluster MBean browser for getAttribute, I can use it for setAttribute or invoke operation exactly the same way.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=xm7e style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_84svq23jg6"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=mvfr style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_85dk24pkf2"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=io.n style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_86r34rnvgz"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=zu-s style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_88c7mnz8cx"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=l1.z style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_87skk657cq"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=j.ft style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_89dz2ckxhk"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=xzov style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_90fkdrs6hb"&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV id=y5gf style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_91qmdhbgb"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Upon invoking the operation I get following return values.&lt;/DIV&gt; &lt;DIV id=ney0 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_92ctj8f9cx"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Now to test through Java code, it is pretty much the same concept:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=z228 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_93gm6sd8ds"&gt;&lt;/DIV&gt; &lt;P&gt;We can see that I got access to Cluster MBean which is "ias:j2eeType=J2EEServerGroup,name=default_group', and after that I am just invoking method of that proxy same as MBean browser. Here tricky part is method signatures, OC4J MBean browser is able to know all those signature through reflection but in my code I had to provide those signature before hand. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;b&gt;&lt;FONT size=4&gt;4. Monitor OC4J MBeans using JConsole&lt;/FONT&gt;&lt;/b&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; Basically by adding few libraries to JConsole, you can use it to browse OC4J MBeans. Here is the thing I used to start my JConsole:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;set ORACLE_HOME=d:soasuite&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;jconsole -J-Dcom.sun.management.jmxremote.ssl=false -J-Dcom.sun.management.jmxremote.authenticate=true -J-Djmx.remote.protocol.provider.pkgs=oracle.oc4j.admin.jmx.remote -J-Djava.class.path=;%JAVA_HOME%libjconsole.jar;%JAVA_HOME%libtools.jar;%ORACLE_HOME%j2eehomelibadminclient.jar;%ORACLE_HOME%j2eehomeoc4jclient.jar;%ORACLE_HOME%j2eehomelibjavax77.jar&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Upon the window, I added the same URLs which I used in my Java program, I can use any of the following URLs:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;STAND_ALONE_OC4J_URL (service:jmx:rmi://localhost:23791/oc4j)&lt;BR&gt;SOASUITE_HOME_URL (service:jmx:rmi:///opmn://mycomputer:6003/home)&lt;BR&gt;SOASUITE_OC4J_SOA_URL (service:jmx:rmi:///opmn://mycomputer:6003/oc4j_soa)&lt;BR&gt;SOASUITE_CLUSTER_URL (service:jmx:rmi:///opmn://localhost:6003/cluster)&lt;BR&gt; &lt;/P&gt; &lt;DIV id=m0_0 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_94g562qfc7"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;And it works great except one weird exception on DOS prompt.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Source code for all can be downloaded over &lt;A id=vorl title=here href="http://chintanjshah.googlepages.com/JMXSamples.zip"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4094970333519537073?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4094970333519537073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4094970333519537073' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4094970333519537073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4094970333519537073'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2007/12/it-is-all-about-jmx-i-worked-on-jmx.html' title='It is all about JMX'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-1133323540915326180</id><published>2007-12-23T13:14:00.000-08:00</published><updated>2007-12-23T13:16:09.802-08:00</updated><title type='text'>Insert/Extract SOAP Headers in BPEL</title><content type='html'>&lt;P&gt;It has been very common topic to insert and extract SOAP headers with BPEL. Lately, I was working with extracting WSSE headers in BPEL, I had to apply some tricks that made me write this BLOG entry. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Inserting Headers in BPEL Outbound:&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I will try to enter three different types of headers:&lt;/P&gt; &lt;P&gt;1) Complex XSD element&lt;/P&gt; &lt;P&gt;2) Simple XSD element&lt;/P&gt; &lt;P&gt;3) WSSE headers - which comes out-of-box with BPEL&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;- First of all I defined XSD element which I want to insert in SOAP headers, e.g.  &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=n3-- style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_629mqtf7d9"&gt;&lt;/DIV&gt; &lt;DIV id=p-py style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Here I have created ComplexCredentialElement as XSD Complex element and and Username and Password with XSD simple type. Here namespace is extremely important, I will insert all elements in SOAP header with "http://xmlns.oracle.com/InsertHeaderVariables" namespace. A target process will need to know namespace while extracting Headers, that's why namespace is very important in this case.&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Now, in BPEL process I created variable and assigned those variable with some dummy values. You can see my BPEL process as well as source code in following figure:&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=ky0_ style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_63fjdvbfrm"&gt;&lt;/DIV&gt; &lt;DIV id=dpcj style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_64drvqzcd4"&gt;&lt;/DIV&gt;Here I created variable of the header elements, and assigned dummy values to them. Now when I invoke the partnerlink, I need to specify those variable as bpelx:inputHeaderVariable, and BPEL PM will take care of inserting them when creating SOAP envelope. &lt;B&gt;I believe if you have to insert some SOAP headers for enterprise wide, you can use OWSM client agent to do so, and if you haven't bought OWSM product then writing custom BPEL partnerlink interceptor would be an awesome choice rather than putting header in each partner link. Stay tuned for my blog on intercepting/hacking BPEL partnerlink! &lt;/B&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;The last one is to insert some WSSE headers through partnerlink, from security aspect I have separate blog entry for this thread: &lt;A href="http://chintanblog.blogspot.com/2007/12/have-been-playing-around-with-ws-basic.html"&gt;http://chintanblog.blogspot.com/2007/12/have-been-playing-around-with-ws-basic.html&lt;/A&gt; but here I am more interested in inserting and extracting headers using BPEL partnerlink. &lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=ufg: style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_65fjrg272r"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;I deployed this BPEL process and changed my partnerlink URL port to 1234 to test using obtunnel.bat. I started soasuite/bpel/bin/obtunnel.bat and kick-off the BPEL process, here is the intercepted request payload:&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=c8_a style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_66c4tm78cc"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_67cqdqj2gk"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;I can see my custom headers as well as wsse headers in my SOAP envelope Header, therefore it is working great!!!&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;P&gt;&lt;B&gt;Extracting Headers in BPEL in-bound:&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;I will try to extract three different types of headers:&lt;/P&gt; &lt;P&gt;1) Complex XSD element&lt;/P&gt; &lt;P&gt;2) Simple XSD element&lt;/P&gt; &lt;P&gt;3) WSSE headers &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;To extract headers I need to define elements which I need to extract, I created following XSD file which represent my simple and complex XSD header elements. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=k79p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_68cxhfm7gp"&gt;&lt;/DIV&gt;I also need to define wsse headers. Ideally I should download the XSD defined by OASIS for WSSE (&lt;A href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&gt;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&lt;/A&gt;) in my project and create variable of the elements already defined in this XSD. Upon loading this XSD project, I got numourous issues so left that approach and created my own XSD element for reprsenting WSSE security header as shown below. &lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=e386 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_696zrfbpgm"&gt;&lt;/DIV&gt;Now I created three variables and pass them to receive activity. BPEL PM takes care of populating them from SOAP headers...&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=rz04 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_70g76dkwcg"&gt;&lt;/DIV&gt;&lt;/DIV&gt;I just deployed this process and I could see both my custom headers and wsse headers are populated nicely... &lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Source code can be downloaded from this &lt;A id=lxla title=link href="http://chintanjshah.googlepages.com/InsertExtractHeaders.zip"&gt;link&lt;/A&gt;.&lt;/DIV&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-1133323540915326180?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/1133323540915326180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=1133323540915326180' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1133323540915326180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/1133323540915326180'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2007/12/insertextract-soap-headers-in-bpel-it.html' title='Insert/Extract SOAP Headers in BPEL'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-4783538430983151076</id><published>2007-12-22T22:09:00.000-08:00</published><updated>2007-12-22T22:14:21.210-08:00</updated><title type='text'>HTTP and WS-BASIC authentication</title><content type='html'>&lt;P&gt;Have been playing around with WS-BASIC authentication and HTTP authentication. I just created HelloBPEL project and secured it using OWSM gateway. I defined following policy steps in OWSM for HTTP basic authentication:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=h62. style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_51dz9vhk2z"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Extract credentials I specified HTTP credentials and for File Authenticate I created username/password file using md5 utilies, here is details of the steps:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=zzut style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_52dqkdb3dt"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;To test if my policies are defined fine, I tested using Tools -&amp;gt; test page feature.&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=oqjk style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_53hgfb9qvp"&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Everything works great so far. I tried to test it using BPEL. I provided gateway URL to BPEL partnerlink. I had to specify following additional partnerlink properties so that BPEL passes correct header information for HTTP authentication.&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=s3g2 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_54w4c5wmc4"&gt;&lt;/DIV&gt;Cool... It worked great.&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Similar way for WS-BASIC authentication. I changed Extract Credential step in OWSM policy: &lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=mlob style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_5566zrmkff"&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;P&gt;And now to test using BPEL, I had to provide following Partnerlink properties:&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=fpca style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_57g8kn788d"&gt;&lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;You can see in above image that you can use httpBasicUsername and httpBasicPassword as well. I found that httpUsername and httpPassword were supported in 10.1.2 but they are deprecated in 10.1.3 as per &lt;A href="http://download-uk.oracle.com/docs/cd/B31017_01/integrate.1013/b28982/security.htm"&gt;http://download-uk.oracle.com/docs/cd/B31017_01/integrate.1013/b28982/security.htm&lt;/A&gt; , therefore httpBasicUsername and basicUsername are our only choice for 10.1.3.3 SOASuite.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Source code can be downloaded at this &lt;A id=sh_w title=link href="http://chintanjshah.googlepages.com/httpwsse_src.zip"&gt;link&lt;/A&gt;.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-4783538430983151076?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/4783538430983151076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=4783538430983151076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4783538430983151076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/4783538430983151076'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2007/12/have-been-playing-around-with-ws-basic.html' title='HTTP and WS-BASIC authentication'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-7223661847062444342</id><published>2007-12-19T17:47:00.000-08:00</published><updated>2007-12-20T12:27:33.717-08:00</updated><title type='text'>WSIF with EJB 2.0, 2.1 and 3.0</title><content type='html'>  &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;Although WSIF seems to be hack to plug-in native protocol in web services framework, I absolutely love WSIF.&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;My understanding of WSIF is standard way of representing service contract (which is WSDL) for any type of service. E.g. if you have servlet, java program, .Net code or JCA operation, you can represent all of them as standard WSDL. Now for WSDL consumer (e.g. BPEL) it is just any other WSDL operation and WSIF provider will know how to interact with this service. My belief is Oracle BPEL uses open source Apache WSIF provider in BPEL engine. I did play with HTTP WSIF Binding and Java Binding. I probably will post on HTTP binding once I figure out how to pass dynamic URL (e.g. calling servlet with dynamic parameters) but now it is time to play with some EJB WSIF.  &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;I created sample EJB 2.0, EJB 2.1 and EJB 3.0 Session Façade using Jdeveloper and deployed to my SOASuite oc4j. I deployed in different container than OC4J_SOA just to make sure Remote interface are being used. I will start with EJB 2.1 because that is the easiest one, EJB 3.0 and EJB 2.0 WSIF binding needs lot of hack and/or custom coding. &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;&lt;b&gt;Technology Used:&lt;/b&gt; JDeveloper 10.1.3.3, Oracle SOASuite 10.1.3.3&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;&lt;b&gt; &lt;hr&gt; &lt;/b&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;&lt;b&gt;EJB 2.1 WSIF:&lt;/b&gt; Created a sample EJB 2.1 Session Façade, one business method called demoHelloMethod as shown below:  &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;  &lt;img src="http://docs.google.com/File?id=dhmngsxp_27dzc43vhh"&gt; &lt;/p&gt;&lt;div class="Section1"&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;Once you right click your EJB icon, it let’s you create stand-alone Java client for EJB pointing to Remote Application Server as shown below: &lt;/p&gt; &lt;div id="uv_d" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_28d77zrrhk"&gt;&lt;/div&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;We can see that the client uses opmn URL to connect with remote EJB: “opmn:ormi://localhost:6003:home/demosessionejb21”. I found WSIF doesn’t like this URL so I tested my client with ormi url “ormi://localhost:12402/demosessionejb21”. We probably want to note down some information from this client, e.g.&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;&lt;b&gt;Provider URL:&lt;/b&gt; ormi://localhost:12402/demosessionejb21&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;&lt;b&gt;Initial Context Factory:&lt;/b&gt; oracle.j2ee.rmi.RMIInitialContextFactory&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;&lt;b&gt;EJB name:&lt;/b&gt; DemoSessionEJB21&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;  &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;Now it is time to create WSDL, which can represent this EJB operation. We can Jdeveloper wizard to create such such wsdl. Once we right click on EJB we can see “create J2EE web service” option, it lets you create web-service for your EJB. Remember we are just going to use this to create WSDL but not web-service. I took backup of my project, created web-service, took wsdl and then restored my old project, as I am not interested in web-service. I just followed the wizard as shown below. &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;div id="s.3s" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_29cbvwrrgv"&gt;&lt;/div&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;div id="h5e." style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_30md3zr2gf"&gt;&lt;/div&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;div id="o0.3" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_31g93sh2fn"&gt;&lt;/div&gt; &lt;div style="padding: 1em 0px; text-align: left;"&gt;In Step 2. Please remember to select RPC Lit otherwise some extra effort will be required on XSD side.&lt;/div&gt; &lt;div id="apih" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_32hq3hbzhs"&gt;&lt;/div&gt; &lt;div id="gr7d" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_33dcxhjfdb"&gt;&lt;/div&gt; &lt;div id="lwwi" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_34fh3hdrcn"&gt;&lt;/div&gt; &lt;div id="imjr" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_35dbsj5rc7"&gt;&lt;/div&gt; &lt;div style="padding: 1em 0px; text-align: left;"&gt;In Step 6, this values I took from EJB Client code which was generated using JDeveloper.&lt;/div&gt; &lt;div id="yf8t" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_3653qqj4hq"&gt;&lt;/div&gt; &lt;div id="jsv-" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_37d65j3kgd"&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="Section1"&gt; &lt;div style="padding: 1em 0px; text-align: left;"&gt; &lt;/div&gt; &lt;div style="padding: 1em 0px; text-align: left;"&gt;Just click on Finish and Look at generated WSDL file:&lt;/div&gt; &lt;div id="cmhy" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_39hqjj8rc7"&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="Section1"&gt; &lt;div style="padding: 1em 0px; text-align: left;"&gt;We can take this wsif and restore the project from earlier backup. We can see both WSIF and HTTP binding in this WSDL. Now as this is not deployed as web-service, I commented out the http part and also put the partner-link so that BPEL doesn’t create extra ref file. The final WSDL file look something like this:&lt;/div&gt; &lt;div id="gj0y" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_41g9vqqqgd"&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="Section1"&gt; &lt;div style="padding: 1em 0px; text-align: left;"&gt;&lt;b&gt;EJB 2.1 WSIF Testing through BPEL Project&lt;/b&gt;&lt;/div&gt; &lt;div style="padding: 1em 0px; text-align: left;"&gt;I created sample BPEL project and copied this wsdl file in bpel directory. I created partnerlink and selected the binding wsdl. I am almost done, I just need to pass extra information required by EJB RMI client. Seems like these extra information (e.g. username, password) are not part of WSIF spec, but BPEL supports it very well. I provided these entries in bpel.xml:&lt;/div&gt; &lt;div id="o_:i" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_42fd494hfw" height="385" width="640"&gt;&lt;/div&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;Because it is native call, BPEL engine will need all classes for EJB client. I copied the classes from EJB session facade project to bpel/system/classes directory.&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;  &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;Deployed the project … and hulala… things working great. &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;  &lt;/p&gt;&lt;/div&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;br style="page-break-before: always;" clear="all"&gt;&lt;font size="2"&gt; &lt;hr&gt; &lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;  &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;&lt;b&gt;EJB 2.0  WSIF:&lt;/b&gt;  It is very well supported by Oracle BPEL PM, but not through JDeveloer. Overuse of Wizards and drag-drop kinda makes us handicapped!! Anyways, time to get hand dirty. Created EJB 2.0 session façade, a sample business method and deployed to Application Server. I also created EJB 2.0 Java Client the same way as described in EJB 2.1.  &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;  &lt;img src="http://docs.google.com/File?id=dhmngsxp_43f5t799dv"&gt;&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;We can see the “Create J2EE Web Service option”. Upon clicking this option it just create web service code and wsdl file with name called “MyWebService1” without showing any prompt… I double click on MyWebService1 so I could at least change the name of WS to DemoSessionEJB20. The initial WSDL looks something like: &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;div id="t804" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_44dsgz6xfg"&gt;&lt;/div&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;There is no WSIF information at all. I hand coded the part of WSDL as shown below. I copied most of the part from EJB 2.1 WSIF wsdl and just changed the stuff as required. &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;  &lt;/p&gt; &lt;div id="t64q" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_45g5ghv6wh"&gt;&lt;/div&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 0pt;"&gt;I created sample BPEL project and imported WSIF WSDL. I also put username and password in bpel.xml as described in EJB 2.1 and copied required EJB classes in bpel/system/classes directory. Deployed the project and things went pretty smooth… &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;hr&gt;  &lt;p&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;"&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;EJB 3.0:&lt;/b&gt; Personally I believe EJB 3.0 made life much easier in J2EE development. It is really very nice concept eliminating need of EJB 2.x crap, lot of XMLs (like Spring) and extensive use of annotations. Ok, let’s get back to WSIF part. &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;"&gt;I created sample EJB 3.0 Session Façade, Java Client, as EJB 2.x. JDeveloper doesn’t display “Create J2EE webservice” option for EJB 3.0 Session Façade, but there is Annotation to create WSIF bindings. &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;"&gt; &lt;img src="http://docs.google.com/File?id=dhmngsxp_46chj9jrd7"&gt; &lt;/p&gt;&lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;"&gt;During the creation of EJB 3.0, please expose them to WebService interfacce as well as shown in above figure. That creates Doc-Lit service without any WSIF binding. I believe we need to do schemac if we stick with Doc-Lit. I changed webservice interface (DemoSessionEJB30WebService.java) as shown below to create RPC Lit service with WSIF bindings using annotations.  &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_47cfx7wzg4"&gt;&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;font size="2"&gt;Now when I deploy this service using deployment profile, Oracle AS creates very nice WSDL: &lt;/font&gt;&lt;/span&gt; &lt;/p&gt;&lt;div id="mm2z" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_48d79dk9d8"&gt;&lt;/div&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;"&gt;&lt;span style="font-family: Verdana;"&gt;&lt;font size="2"&gt;I created BPEL project, imported this WSDL. After importing this WSDL file I still had to make couple of changes. I had to add partner link to avoid Ref file, remove soap bindings for safety and I also had to add more parameter in ejb:address e.g. className, jndiName and providerURL. The final WSDL with changes looks something like:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style="font-family: Verdana;"&gt;&lt;div id="cyim" style="padding: 1em 0px; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dhmngsxp_49hsfwmndf"&gt;&lt;/div&gt;&lt;/span&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;As usual, I provided username and password in bpel.xml and copied required classes in bpel/system/classes directory, and things started rocking!!!&lt;/p&gt; &lt;hr&gt;  &lt;p&gt; &lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;Source code can be downloaded at this &lt;a title="link" href="http://chintanjshah.googlepages.com/Bindings.zip" id="hwj_"&gt;link&lt;/a&gt;.&lt;br&gt;&lt;/p&gt;&lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt;I will try to update my log when JDeveloper has support for creating wsif WSDL through wizard for EJB 2.0 and EJB 3.0.&lt;/p&gt; &lt;p class="MsoBodyText" style="margin: 0in 0in 14.15pt;" align="left"&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-7223661847062444342?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/7223661847062444342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=7223661847062444342' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7223661847062444342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/7223661847062444342'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2007/12/although-wsif-seems-to-be-hack-to-plug.html' title='WSIF with EJB 2.0, 2.1 and 3.0'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-9063254896632427107</id><published>2007-12-17T17:41:00.000-08:00</published><updated>2007-12-17T17:44:53.345-08:00</updated><title type='text'>Hosting .zip File on Google/Web</title><content type='html'>&lt;P&gt;Nothing interesting, but it took me long time to find a place on web where I can upload all my documents reliably. Google docs didn't let me upload .zip files, so I tried Myspace, WordExpress and plenty of other Blog websites which can let me upload .zip or other .java files which I can point to my Blog. No luck!&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;E.g. other day I was writing blog on BPEL Read Only Console, but I couldn't find where to put the source code. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Got an idea! I went to Google page maker, it let you create a website and you can upload any files on your webpage..... Done, I created a page called &lt;A href="http://chintanjshah.googlepages.com/"&gt;http://chintanjshah.googlepages.com/&lt;/A&gt; and put all my files out there, and it does give individual link for each file e.g. &lt;A href="http://chintanjshah.googlepages.com/BPELReadOnly.zip"&gt;http://chintanjshah.googlepages.com/BPELReadOnly.zip&lt;/A&gt;....&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Now my files are saved on Web through google (till google doesn't disable this service .... )  :)&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-9063254896632427107?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/9063254896632427107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=9063254896632427107' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/9063254896632427107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/9063254896632427107'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2007/12/nothing-interesting-but-it-took-me-long.html' title='Hosting .zip File on Google/Web'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1459511178626634251.post-712290623458896322</id><published>2007-12-17T17:01:00.000-08:00</published><updated>2007-12-17T17:35:39.952-08:00</updated><title type='text'>BPEL Read Only Console - Role Based Security</title><content type='html'>&lt;DIV&gt;I saw numerous people asking about BPEL read only console, which is not supported out of the box. I guess Oracle might ship this feature in 11g, but here is the hack which will obviously come in mind of any web-developer. &lt;BR&gt;&lt;BR&gt;First of all, BPEL Console is just a common J2EE web application which front servlet and couple of JSPs behind the scene. It is deployed in "soasuite/j2ee/oc4j_soa/applications/orabpel/console" By default it is secured by JAZN file based security which you can easily look at "WEB-INF/web.xml". &lt;BR&gt;&lt;BR&gt;In nutshell, I just wrote servlet filter and provided non-intrusive role based security to BPEL console. Here are the steps I followed: &lt;BR&gt;&lt;BR&gt; &lt;HR style="WIDTH: 100%; HEIGHT: 2px"&gt; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;Step 1. &lt;/B&gt;I wrote standard Servlet Filter with help of java.util.regex.Pattern class. &lt;/DIV&gt; &lt;DIV&gt; &lt;/DIV&gt; &lt;DIV&gt; &lt;DIV style="TEXT-ALIGN: center"&gt;&lt;/DIV&gt; &lt;DIV id=zb2e style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=ry9d style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em"&gt;&lt;IMG src="http://docs.google.com/File?id=dhmngsxp_9fx7vh2cc"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;B&gt;Note:&lt;/B&gt; Current filter code doesn't care about user's role. Every single request will be filtered against filterlist.txt file shown below:  &lt;DIV id=rzh5 style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=ba9h style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG style="WIDTH: 640px; HEIGHT: 384px" src="http://docs.google.com/File?id=dhmngsxp_12ffq2dffd"&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;HR style="WIDTH: 100%; HEIGHT: 2px"&gt; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;Step 2:&lt;/B&gt;  I wrote to fake servlet to test this servlet Filter. Now we need to integrate this filter with BPELConsole. We can check in "/soasuite/j2ee/oc4j_soa/config/default-web-site.xml" that BPELConsole is located at "soasuite/j2ee/oc4j_soa/applications/orabpel/console". &lt;BR&gt;&lt;BR&gt;a) I put compiled BPELFilter.class file in "soasuite/j2ee/oc4j_soa/applications/orabpel/console/WEB-INF/classes" directory. This is how it looks like: "/soasuite/j2ee/oc4j_soa/applications/orabpel/console/WEB-INF/classes/bpelfilterproject/BPELFilter", where bpelfilterproject is the package name.&lt;BR&gt;&lt;BR&gt;b) I changed soasuite/j2ee/oc4j_soa/applications/orabpel/console/WEB-INF/web.xml file to apply this filter settings:&lt;BR&gt;&lt;BR&gt;&lt;BR&gt; &lt;DIV id=hpfh style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG style="WIDTH: 691px; HEIGHT: 384px" src="http://docs.google.com/File?id=dhmngsxp_13fddcnbf9"&gt;&lt;/DIV&gt;These changes are good enough to make BPEL console read only. Now if we restart SOASuite and click on one of the sensitive URL, e.g. Purge Instances, it should show the page with following message:&lt;BR&gt;&lt;BR&gt; &lt;DIV id=g49l style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG style="WIDTH: 669px; HEIGHT: 387px" src="http://docs.google.com/File?id=dhmngsxp_14fwnxxkcw"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt; &lt;HR style="WIDTH: 100%; HEIGHT: 2px"&gt; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;Step 3:  &lt;/B&gt;We are done with basic component, but now it is time to do some Role based security. I had to dig into some JAZN settings in order to make this thing worked. I followed the link http://download.oracle.com/docs/cd/B12314_01/web.904/b10325/configja.htm#1007274 which was very helpful. I realized that BPELConsole is using only one Role called "PUBLIC" which is defined in Web.xml file and not mapped to any of the OC4J Role!!!&lt;BR&gt;&lt;BR&gt;So let's follow the best practice which has been defined for ESB console already. &lt;BR&gt;- I need to create two roles called "viewers" and "admins". &lt;BR&gt;- I need to define this role in web.xml and map to oc4j role using orien-web.xml file. &lt;BR&gt;- I need to assign admins to bpeladmin &lt;BR&gt;- I need to assign viewers to guest&lt;BR&gt;- Change the Filter code to do Role based filtering&lt;BR&gt;&lt;BR&gt;Then let's do it:&lt;BR&gt;&lt;BR&gt;a) Create viewers and admins role from EM as shown below:&lt;BR&gt;&lt;BR&gt; &lt;DIV id=cr.z style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=ycub style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG style="WIDTH: 1082px; HEIGHT: 610px" src="http://docs.google.com/File?id=dhmngsxp_16c4k847c5"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;/DIV&gt; &lt;BR&gt;&lt;/DIV&gt;&lt;BR&gt; &lt;DIV id=p.b0 style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG style="WIDTH: 871px; HEIGHT: 646px" src="http://docs.google.com/File?id=dhmngsxp_17cq5d2bct"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;b)  assign "admins" role to "bpeladmin" user and "viewers" role to "guest" user. (Note: BPELDefaultDomainAdmin is always required to access anything in BPELDomain).&lt;BR&gt;&lt;BR&gt; &lt;DIV id=vcvv style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=t-y: style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG style="WIDTH: 919px; HEIGHT: 481px" src="http://docs.google.com/File?id=dhmngsxp_19zj9rb4fm"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;/DIV&gt;c) Let's change the source code. Here is what I did:&lt;BR&gt;&lt;BR&gt; &lt;DIV id=w7a9 style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG style="WIDTH: 755px; HEIGHT: 469px" src="http://docs.google.com/File?id=dhmngsxp_20hdhm4vfv"&gt;&lt;/DIV&gt;&lt;B&gt;Note:&lt;/B&gt; Essentially I am relying on two roles viewers and admins, and if role is viewers and not admins, then I start doing filtering. As we know, bpeladmin can have both viewers and admins role.&lt;BR&gt;&lt;BR&gt;d) Final change would be to create these roles in console's web.xml file and and assign those roles to OC4J roles. Here is how "soasuite/j2ee/oc4j_soa/applications/orabpel/console/WEB-INF/web.xml" file looks like:&lt;BR&gt;&lt;BR&gt; &lt;DIV id=ijz1 style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG style="WIDTH: 873px; HEIGHT: 579px" src="http://docs.google.com/File?id=dhmngsxp_219fmwbg5"&gt;&lt;/DIV&gt;&lt;BR&gt;And to associate these roles with OC4J roles, we need to change /soasuite/j2ee/oc4j_soa/application-deployments/orabpel/console/orien-web.xml file. Here is how orien-web.xml file looks like:&lt;BR&gt;&lt;BR&gt; &lt;DIV id=b5pl style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG style="WIDTH: 858px; HEIGHT: 397px" src="http://docs.google.com/File?id=dhmngsxp_22ch8fgzhh"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;Cool. Now if I login as bpeladmin, everything works great, and when I login as guest it is all read only.&lt;BR&gt;&lt;BR&gt; &lt;HR style="WIDTH: 100%; HEIGHT: 2px"&gt; &lt;BR&gt;Source code along with Read-Me document can be downloaded from this &lt;A id=rzv2 title=link href="http://chintanjshah.googlepages.com/BPELReadOnly.zip"&gt;link&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1459511178626634251-712290623458896322?l=chintanblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chintanblog.blogspot.com/feeds/712290623458896322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1459511178626634251&amp;postID=712290623458896322' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/712290623458896322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1459511178626634251/posts/default/712290623458896322'/><link rel='alternate' type='text/html' href='http://chintanblog.blogspot.com/2007/12/i-saw-numerous-people-asking-about-bpel_290.html' title='BPEL Read Only Console - Role Based Security'/><author><name>Chintan Shah</name><uri>http://www.blogger.com/profile/02288969318164103126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry></feed>
