XPath expression test possibilities in Fault Policy file
Hi All,
It would be a great help if someone can show me a way to implement the next case:
I have the next scenario, in a fault policies file I have different actions to execute for the same fault andI have to choose what action will be executed checking a value that has not relation with the $fault variable. The value indicates the number of retries that I have to try the invocation. This is the code, but this code is not working. Anybody knows how to declare the variable to be accesible in the fault policy?
Thanks in advance,
<Conditions>
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:remoteFault">
<condition>
<test>$Var=1</test>
<action ref="ora-retry-one"/>
</condition>
<condition>
<test>$Var=2</test>
<action ref="ora-retry-two"/>
</condition>
<condition>
<test>$Var=3</test>
<action ref="ora-retry-three"/>
</condition>
</faultName>
<Conditions>
<Actions>
<Action id="ora-retry-one">
<retry>
<retryCount>5</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff>1</exponentialBackoff>
</retry>
</Action>
<Action id="ora-retry-two">
<retry>
<retryCount>7</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff>1</exponentialBackoff>
</retry>
</Action>
<Action id="ora-retry-three">
<retry>
<retryCount>9</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff>1</exponentialBackoff>
</retry>
</Action>
</Actions>
</faultPolicy>
</faultPolicies>
Hi,
Here is an example of the possible solution:
In fault policy file:
<Conditions>
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:remoteFault">
<condition>
<test>"my_xpath:getRetryCount()=number(1)"</test> (getRetryCount is a custom XPath that returns the number of retries)
<action ref="ora-retry_1"/>
</condition>
<condition>
<test>"my_xpath:getRetryCount()=number(2)"</test>
<action ref="ora-retry_2"/>
</condition>
<condition>
<test>"my_xpath:getRetryCount()=number(3)"</test>
<action ref="ora-retry_3"/>
</condition>
<Actions>
<Action id="ora-retry_1">
<retry>
<retryCount>1</retryCount>
<retryInterval>1</retryInterval>
<exponentialBackoff>1</exponentialBackoff>
</retry>
</Action>
<Action id="ora-retry_2">
<retry>
<retryCount>2</retryCount>
<retryInterval>1</retryInterval>
<exponentialBackoff>1</exponentialBackoff>
</retry>
</Action>
<Action id="ora-retry_3">
<retry>
<retryCount>3</retryCount>
<retryInterval>1</retryInterval>
<exponentialBackoff>1</exponentialBackoff>
</retry>
</Action>
The problem of this solution is that the number of retries is finite but I don't know other way to do it.
Cheers
Similar Messages
-
Fault policy files in MDS repository is not working..
Hi All,
I have created my fault policy and fault bindings file and tested in my local project. It worked fine.
To make it available in MDS,
I added the files under JDeveloperHome/jdeveloper/integration/seed/apps/faulthandling
I deployed this MDS repository to my server by the below method.
I created a new generic application, then a generic project, to which I added a new Deployment Profile of type JAR file.
To the JAR file, I added my folder in which the policy files exist. I created a SOA bundle from the ‘Applications’
Then I deployed the project to my server finally.
For all these things I refferred to
http://www.orafmwschool.com/soa-11g-mds/
Now in my adf-config.xml I have made changes as follows.
<metadata-store-usage id="mstore-usage_2">
<metadata-store class-name="oracle.mds.persistence.stores.file.FileMetadataStore">
<property value="D:\StudyForInstalling\SOA11gHome\jdeveloper\integration" name="metadata-path"/>
<property value="seed" name="partition-name"/>
</metadata-store>
</metadata-store-usage>
Then in my composite.xml I have,
<property name="oracle.composite.faultPolicyFile">oramds:/apps/faulthandling/fault-policies.xml</property>
<property name="oracle.composite.faultBindingFile">oramds:/apps/faulthandling/fault-bindings.xml</property>
I hav shutdown the partnerlink service.
Now, I can see remote exception while executing. My fault policy files are not executing.
In the same apps/ I have my PurchaseOrder.xsd file. When I tried importing the schema to my project from the mds, it is working fine.
I used like this in my wsdl.
<import namespace="http://www.order.org" schemaLocation="oramds:/apps/faulthandling/PurchaseOrder.xsd" />
Why is my faultpolicy file not working?
Kindly help me
Thanks,
Sabarisri .NI am not sure if we can use oramds references as properties values in composite.xml. Did you try with preferences ??
-
Fault policy files in MDS repository is not working 11g
Hi All,
I have created my fault policy and fault bindings file and tested in my local project. It worked fine.
To make it available in MDS,
I added the files under JDeveloperHome/jdeveloper/integration/seed/apps/faulthandling
I deployed this MDS repository to my server by the below method.
I created a new generic application, then a generic project, to which I added a new Deployment Profile of type JAR file.
To the JAR file, I added my folder in which the policy files exist. I created a SOA bundle from the ‘Applications’
Then I deployed the project to my server finally.
For all these things I refferred to
http://www.orafmwschool.com/soa-11g-mds/
Now in my adf-config.xml I have made changes as follows.
<metadata-store-usage id="mstore-usage_2">
<metadata-store class-name="oracle.mds.persistence.stores.file.FileMetadataStore">
<property value="D:\StudyForInstalling\SOA11gHome\jdeveloper\integration" name="metadata-path"/>
<property value="seed" name="partition-name"/>
</metadata-store>
</metadata-store-usage>
Then in my composite.xml I have,
<property name="oracle.composite.faultPolicyFile">oramds:/apps/faulthandling/fault-policies.xml</property>
<property name="oracle.composite.faultBindingFile">oramds:/apps/faulthandling/fault-bindings.xml</property>
I hav shutdown the partnerlink service.
Now, I can see remote exception while executing. My fault policy files are not executing.
In the same apps/ I have my PurchaseOrder.xsd file. When I tried importing the schema to my project from the mds, it is working fine.
I used like this in my wsdl.
<import namespace="http://www.order.org" schemaLocation="oramds:/apps/faulthandling/PurchaseOrder.xsd" />
Why is my faultpolicy file not working on MDS? But, if pput the file on the source code this working fine, but get the policy to source not from MDS?
Help meIt could mean that the location for MDS in the code isn't correct.
Can you re-verify the path provided for MDS? -
Hi,
We are using oracle SOA suite 11g (11.1.1.3.0)
I'm trying to configure a fault-policy file so that it first retries 20 times every 20 secs, then reties 20 times every 10 minutes, then retries 23 times every hour, then retries 24 times every 6 hours and if the fault persists call a java action to send an email and then go to human-intervention. It seems however that only the first retry is executed. The rest ones are ignored and the action following the first retry failure is the Java Action. The fault-policy is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy">
<faultPolicy version="0.0.1" id="TransferResponsibilityRequestProcessFaults"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Conditions>
<faultName xmlns:freeze="http://rom/cosmote/bpel/webservice/util" name="freeze:BpelWSFault">
<condition>
<action ref="ora-human-intervention"/>
</condition>
</faultName>
<faultName xmlns:retry="http://rom/cosmote/bpel/webservice" name="retry:PendingRequestsFault">
<condition>
<action ref="ora-retry-20sec"/>
</condition>
</faultName>
</Conditions>
<Actions>
<Action id="ora-retry-20sec">
<retry>
<retryCount>10</retryCount>
<retryInterval>20</retryInterval>
<retryFailureAction ref="ora-retry-10min"/>
</retry>
</Action>
<Action id="ora-retry-10min">
<retry>
<retryCount>10</retryCount>
<retryInterval>600</retryInterval>
<retryFailureAction ref="ora-retry-1hour"/>
</retry>
</Action>
<Action id="ora-retry-1hour">
<retry>
<retryCount>23</retryCount>
<retryInterval>3600</retryInterval>
<retryFailureAction ref="ora-retry-6hour"/>
</retry>
</Action>
<Action id="ora-retry-6hour">
<retry>
<retryCount>24</retryCount>
<retryInterval>21600</retryInterval>
<retryFailureAction ref="ora-java"/>
</retry>
</Action>
<Action id="ora-java">
<javaAction className="gr.cosmote.bpel.util.JavaActionInCaseOfRetryFails"
defaultAction="ora-human-intervention">
<returnValue value="RETURNED" ref="ora-human-intervention"/>
</javaAction>
</Action>
<Action id="ora-human-intervention">
<humanIntervention/>
</Action>
</Actions>
</faultPolicy>
</faultPolicies>
Is retrying with various intervals only done by using the tag <exponentialBackoff/>?
Thanks for any response.I had a similar requirement, although not as elaborate as yours. After I failed to figure it out myself I filed a SR. Basically, you cannot restart a retry block after the first execution to avoid an infinite loop.
If you need to send the e-mail after the 23rd hour, why not just retry until the 23rd hour and send an e-mail? -
Xpath expression is empty for input XML file - Help!!!
Hi,
I am desperate by now!!! :-(
I am not able to read an XML file using the File Adapter
when trying to assign the input I get the following error:
06/06/08 09:15:10 at com.collaxa.cube.engine.ext.wmp.BPELAssignWMP.evalFromValue(BPELAssignWMP.java:490)
06/06/08 09:15:10 at com.collaxa.cube.engine.ext.wmp.BPELAssignWMP.__executeStatements(BPELAssignWMP.java:122)
06/06/08 09:15:10 at com.collaxa.cube.engine.ext.wmp.BPELActivityWMP.perform(BPELActivityWMP.java:188)
06/06/08 09:15:10 at com.collaxa.cube.engine.CubeEngine.performActivity(CubeEngine.java:3408)
06/06/08 09:15:10 at com.collaxa.cube.engine.CubeEngine.handleWorkItem(CubeEngine.java:1836)
06/06/08 09:15:10 at com.collaxa.cube.engine.dispatch.message.instance.PerformMessageHandler.handleLocal(PerformMessageHandler.java:75)
06/06/08 09:15:10 at com.collaxa.cube.engine.dispatch.DispatchHelper.handleLocalMessage(DispatchHelper.java:166)
06/06/08 09:15:10 at com.collaxa.cube.engine.dispatch.DispatchHelper.sendMemory(DispatchHelper.java:252)
06/06/08 09:15:10 at com.collaxa.cube.engine.CubeEngine.endRequest(CubeEngine.java:5438)
06/06/08 09:15:10 at com.collaxa.cube.engine.CubeEngine.createAndInvoke(CubeEngine.java:1217)
06/06/08 09:15:10 at com.collaxa.cube.engine.delivery.DeliveryService.handleInvoke(DeliveryService.java:511)
06/06/08 09:15:10 at com.collaxa.cube.engine.ejb.impl.CubeDeliveryBean.handleInvoke(CubeDeliveryBean.java:335)
06/06/08 09:15:10 at ICubeDeliveryLocalBean_StatelessSessionBeanWrapper16.handleInvoke(ICubeDeliveryLocalBean_StatelessSessionBeanWrapper16.java:1796)
06/06/08 09:15:10 at com.collaxa.cube.engine.dispatch.message.invoke.InvokeInstanceMessageHandler.handle(InvokeInstanceMessageHandler.java:37)
06/06/08 09:15:10 at com.collaxa.cube.engine.dispatch.DispatchHelper.handleMessage(DispatchHelper.java:125)
06/06/08 09:15:10 at com.collaxa.cube.engine.dispatch.BaseScheduledWorker.process(BaseScheduledWorker.java:70)
06/06/08 09:15:10 at com.collaxa.cube.engine.ejb.impl.WorkerBean.onMessage(WorkerBean.java:86)
06/06/08 09:15:10 at com.evermind.server.ejb.MessageDrivenBeanInvocation.run(MessageDrivenBeanInvocation.java:123)
06/06/08 09:15:10 at com.evermind.server.ejb.MessageDrivenHome.onMessage(MessageDrivenHome.java:755)
06/06/08 09:15:10 at com.evermind.server.ejb.MessageDrivenHome.run(MessageDrivenHome.java:928)
06/06/08 09:15:10 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:186)
06/06/08 09:15:10 at java.lang.Thread.run(Thread.java:534)
<2006-06-08 09:15:10,384> <ERROR> <default.collaxa.cube.xml> com.oracle.bpel.client.BPELFault: faultName: {{http://schemas.xmlsoap.org/ws/2003/03/business-process/}selectionFailure}
messageType: {null}
parts: {{summary=<summary>empty variable/expression result.
[b]xpath variable/expression expression "/ns6:SUPPLIERS_ORDER_NUMBER" is empty at line 23, when attempting reading/copying it.
Please make sure the variable/expression result "/ns6:SUPPLIERS_ORDER_NUMBER" is not empty.
</summary>}}
this is my XML file:
<?xml version="1.0" encoding="utf-8"?>
<SUPPLIERS_ORDER_NUMBER>"XX"</SUPPLIERS_ORDER_NUMBER>
this is my xsd file:
<xs:schema
targetNamespace="http://schemas.oracle.com/service/bpel/common"
xmlns:common = "http://schemas.oracle.com/service/bpel/common"
xmlns:xs = "http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="SUPPLIERS_ORDER_NUMBER" type="xs:string"/>
</xs:schema>
Please help me
thanks
AmitHi,
This is my file adapter wsdl file:
<definitions
name="fileAdapter"
targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/file/"
xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/file/"
xmlns="http://schemas.xmlsoap.org/wsdl/" >
<types>
<schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/file/"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:FILEAPP="http://xmlns.oracle.com/pcbpel/adapter/file/">
<element name="InboundFileHeaderType">
<complexType>
<sequence>
<element name="fileName" type="string"/>
<element name="directory" type="string"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<!-- Header Message -->
<message name="InboundHeader_msg">
<part element="tns:InboundFileHeaderType" name="inboundHeader"/>
</message>
</definitions>
So , should I use http://xmlns.oracle.com/pcbpel/adapter/file/ as my targetNamespace?
for example:
<xs:schema targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/file/"
xmlns="http://xmlns.oracle.com/pcbpel/adapter/file/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
Thanks
Amit -
Calling more than one action at a time in fault policy file
hi
can any one tell me how to refer two actions at a time in faultpoicies.xml file . To make it clear to you i want to call both rethrow action and human intervention action after retry . please refer below faultpolicy file
<?xml version="1.0" encoding="windows-1252" ?>
<faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy">
<faultPolicy version="2.0.1" id="BpelFaultMechanism"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Conditions>
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:bindingFault">
<condition>
<action ref="retry-action"/>
</condition>
</faultName>
</Conditions>
<Actions>
<Action id="retry-action">
<retry>
<retryCount>4</retryCount>
<retryInterval>2</retryInterval>
<retryFailureAction ref="rethrow-action"/>
</retry>
</Action>
<Action id="human-intervention-action">
<humanIntervention/>
</Action>
<Action id="rethrow-action">
<rethrowFault/>
</Action>
</Actions>
</faultPolicy>
</faultPolicies>
please reply asap
Regards
sivaHi FRNzzz!! wrote:
hi i am using oracle 10g database.
can it be possible ?
in if condition we can have more than one variable in one condition
if a=100 then
b:=200;
c:=300;
end if; how it will be in case statement ? i have searched lot on internet but didnt get
case
when a=100 then 200, 300 ... ???
thanksnot sure if I got your question correctly, is this what you are looking for?
SQL> ed
Wrote file afiedt.buf
1 declare
2 a number := 100;
3 b number;
4 c number;
5 begin
6 case
7 when a = 100 then
8 b := 200;
9 c := 300;
10 when a = 0 then
11 b := 300;
12 c := 400;
13 else
14 b := 0;
15 c := 0;
16 end case;
17 dbms_output.put_line('a :'||a||' b :'||b||' c :'||c);
18* end;
SQL> /
a :100 b :200 c :300
PL/SQL procedure successfully completed. -
BPEL 10.1.3.5 Fault Management - Using Xpath in Fault Policy conditions
Hi all.
I have a requirement to use the xpath functions "contais" and "upper-case" inside a condition in a fault policy file. I've done some tests and didn't get successful results so far.
My first test using the policy file was the following:
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
xmlns:ebsv1="http://www.claro.com.br/EBS/Claro/v1"
xmlns:ebov1="http://www.claro.com.br/EBO/Claro/v1"
name="ebsv1:TechnicalFault">
<condition>
*<test>$fault.TechnicalFault/ebsv1:TechnicalFault/ebov1:message = 'TE-0001'</test>*
<action ref="ora-human-intervention" />
</condition>
In this first test I used a simple expression just to test the overall namespace declarations and xpath navigation. It worked as expected.
Second, I modified the test to use the "contais" function. I need to use this function because my message will eventually contain the value 'TE-0001' mixed with other string:
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
xmlns:ebsv1="http://www.claro.com.br/EBS/Claro/v1"
xmlns:ebov1="http://www.claro.com.br/EBO/Claro/v1"
name="ebsv1:TechnicalFault">
<condition>
*<test>contains($fault.TechnicalFault/ebsv1:TechnicalFault/ebov1:message, 'TE-0001')</test>*
<action ref="ora-human-intervention" />
</condition>
In this second test I allways get FALSE results, meaning that this expression may not be correct. I'm certain that this should be evaluated to TRUE as the test scenario is the same as the first test. Is there something missing?? I turned on debug level log in the domain but didn't find any hint about the fault management processing.
Besides the use of the contains function, it would be nice if I'm able use the function upper-case. Something like this:
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
xmlns:ebsv1="http://www.claro.com.br/EBS/Claro/v1"
xmlns:ebov1="http://www.claro.com.br/EBO/Claro/v1"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
name="ebsv1:TechnicalFault">
<condition>
*<test>contains(xp20:upper-case($fault.TechnicalFault/ebsv1:TechnicalFault/ebov1:message), 'TE-0001')</test>*
<action ref="ora-human-intervention" />
</condition>
Any ideas???
Thanks
DenisHi again.
Has anyone been able to use any kind of Xpath function inside a policy file? If so, could you please share the code fragment including the namespace declarations and the conditions?
Does anyone know if Fault Management Framework at least support the use of Xpath functions?
Thanks.
Denis -
Registering External Fault Policy(s) with a Composite in SOA 11g
Hi
I was wondering whether it is possible to register more than one external fault policy with a composite. I have loaded some fault policies into my database backed MDS store. I have added a fault-bindings.xml file locally to teh composite to indicate which components I want to use which policy. this file resembles:
<composite faultPolicy="bpelSynchronousProcessingFaults"/>
<component faultPolicy="mediatorSynchronousProcessingFaults">
<name>MediatorRouting</name>
</component>
I have also added to the composite.xml file the respective imports / properties to identify the location of the fault policy files and the fault bindings. These resemble:
</service>
<property name="oracle.composite.faultPolicyFile">oramds:/apps/fault-policies/fault-policies-med-sync.xml</property>
<property name="oracle.composite.faultPolicyFile">oramds:/apps/fault-policies/fault-policies-bpel-sync.xml</property>
<property name="oracle.composite.faultBindingFile">fault-bindings.xml</property>
<component name="MediatorRouting">
For a test I have the BPEL component using one and the mediator component using another, both within the same composite. Depending on the order of the 2 properties shown above, only one is registered. This being the second one.
Is it possible to register more than one policy in this way? I have been unable to get both working at the same time. Each works independently if I only register one of them. I want keep the fault policies external to the composites to allow them to be re-used appropriately across composites within an SOA project
My thinking is, in order to be able to have differing policies effecting different components within a composite i'd have thought it would have been possible to define more than one external policy for a composite. However it appears this is not the case as it only registers or atleast works with the last policy in an import. Also placing the files locally within the composite with differing names has no impact.
Therefore i'm assuming (unless I have configured these incoorectly) there is no option to have multiple fault policies for a composite. Therefore there is no ability to define a different policy per component within a composite
Kind Regards
DaveUsing the fault binding attach your fault policy to particular component. See example below.Use the tag <component faultPolicy="ServiceFaults">
<?xml version="1.0" encoding="UTF-8"?>
<faultPolicyBindings version="2.0.1"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<component faultPolicy="ServiceFaults">
<name>Component1</name>
<name>Component2</name>
</component>
<!-- Below listed component names use polic CRM_SeriveFaults -->
<component faultPolicy="CRM_ServiceFaults">
<name>HelloWorld</name>
<name>ShippingComponent</name>
<name>AnotherComponent"</name>
</component>
<!-- Below listed reference names and port types use polic CRM_ServiceFaults
-->
<reference faultPolicy="CRM_ServiceFaults">
<name>creditRatingService</name>
<name>anotherReference</name>
<portType
xmlns:credit="http://services.otn.com">credit:CreditRatingService</portType>
<portType
xmlns:db="http://xmlns.oracle.com/pcbpel/adapter/db/insert/">db:insert_
plt</portType>
</reference>
<reference faultPolicy="test1">
<name>CreditRating3</name>
</reference>
</faultPolicyBindings> -
BPEL 11g fault policy action java class not sending email
Hi All,
I am trying to attach fault policy to my bpel process. The fault conditions are working fine but the email part from the action class is not able to send email. The code execute properly , i can't see any error message in the log but I cant access the email in my inbox.
I am able to send email from using email bpel activity and also test work flow notification from em console.
I have used both the java options for sending email like javax.mail and oracle.sdp.messaging .
JAVA CODE FOR EMAIL javax.mail
public String handleFault(IFaultRecoveryContext iFaultRecoveryContext){
//Print Fault Meta Data to Console
System.out.println("****************Fault Metadata********************************");
System.out.println("Fault policy id: " + iFaultRecoveryContext.getPolicyId());
System.out.println("Fault type: " + iFaultRecoveryContext.getType());
System.out.println("Partnerlink: " + iFaultRecoveryContext.getReferenceName());
System.out.println("Port type: " + iFaultRecoveryContext.getPortType());
System.out.println("**************************************************************");
//print all properties defined in the fault-policy file
System.out.println("Properties Set for the Fault");
//Print Fault Details to Console if it exists
System.out.println("****************Fault Details********************************");
// if(iFaultRecoveryContext instanceof BPELFaultRecoveryContextImpl)
BPELFaultRecoveryContextImpl bpelCtx = (BPELFaultRecoveryContextImpl)iFaultRecoveryContext;
System.out.println("Fault: " + bpelCtx.getFault());
System.out.println("Activity: " + bpelCtx.getActivityName());
System.out.println("Composite Instance: " + bpelCtx.getCompositeInstanceId());
System.out.println("Composite Name: " + bpelCtx.getCompositeName());
System.out.println("***********************************************************");
try {
bpelCtx.addAuditTrailEntry("Sending Email...");
Map props = iFaultRecoveryContext.getProperties();
if (props != null && props.size() > 0) {
setFrom(getParameterValue((ArrayList)props.get("from")));
setTo(getParameterValue((ArrayList)props.get("to")));
setSubject(getParameterValue((ArrayList)props.get("subject")) + bpelCtx.getTitle());
setText(getParameterValue((ArrayList)props.get("text")) + "\n" + "BPEL Process Instance: " + bpelCtx.getInstanceId() + " needs intervention to recover from a technical exception: " + bpelCtx.getFault().getMessage() + ".\n" + "Check the Activities tab in the BPEL Management Console in order to resolve the error as soon as possible.\n" + "This message was automatically generated, please do not reply to it.");
setHost(getParameterValue((ArrayList)props.get("host")));
setPort(getParameterValue((ArrayList)props.get("port")));
bpelCtx.addAuditTrailEntry("to Email getFrom..."+getFrom());
bpelCtx.addAuditTrailEntry("to Email getTo..."+getTo());
bpelCtx.addAuditTrailEntry("to Email getText..."+getText());
bpelCtx.addAuditTrailEntry("to Email getHost..."+getHost());
bpelCtx.addAuditTrailEntry("to Email getPort..."+getPort());
Session mailSession = Session.getDefaultInstance(properties);
Message simpleMessage = new MimeMessage(mailSession);
bpelCtx.addAuditTrailEntry("to Email toAddresses2...");
InternetAddress fromAddress = new InternetAddress(from);
bpelCtx.addAuditTrailEntry("to Email fromAddress..."+fromAddress);
simpleMessage.setFrom(fromAddress);
String[] toAddresses = to.split(";");
if (toAddresses != null && toAddresses.length > 0)
bpelCtx.addAuditTrailEntry("to Email toAddresses3...");
InternetAddress[] toInternetAddresses =new InternetAddress[toAddresses.length];
for (int i = 0; i < toAddresses.length; i++)
bpelCtx.addAuditTrailEntry("to Email toAddresses4444..."+ toAddresses);
toInternetAddresses[i] = new InternetAddress(toAddresses[i]);
bpelCtx.addAuditTrailEntry("to Email toInternetAddresses..."+ toInternetAddresses[i]);
simpleMessage.setRecipients(RecipientType.TO,toInternetAddresses);
simpleMessage.setSubject(subject);
simpleMessage.setText(text);
Transport.send(simpleMessage);
bpelCtx.addAuditTrailEntry("After Email...");
} catch (Exception e) {
bpelCtx.addAuditTrailEntry("fault Message:" + e.getMessage());
//Custom Code to Log Fault to File/DB/JMS or send Emails etc.
return "Manual";
private String getParameterValue(ArrayList parameterList) {
String value = null;
if (parameterList != null && parameterList.size() > 0)
value = (String)parameterList.get(0);
return value;
JAVA CODE FOR EMAIL oracle.sdp.messaging
private void sendMail(IFaultRecoveryContext iFaultRecoveryContext) {
BPELFaultRecoveryContextImpl bpelCtx = (BPELFaultRecoveryContextImpl)iFaultRecoveryContext;
bpelCtx.addAuditTrailEntry("In sendMail...");
Map<String, Object> params = new HashMap<String, Object>();
// params.put(key, value); // if optional parameters need to be specified.
MessagingClient messagingClient;
try {
bpelCtx.addAuditTrailEntry("In sendMail111...");
messagingClient =
MessagingClientFactory.createMessagingClient(params);
Message newMessage = MessagingFactory.createMessage();
// newMessage.setContent(createEventPayload(iFaultRecoveryContext),"text/plain");
newMessage.setContent("Component Name :"+bpelCtx.getComponentName()+ "\n Instacne Id :"+bpelCtx.getComponentInstanceId()+
"\n Composite Instance Id :"+bpelCtx.getCompositeInstanceId()+ "\n Composite Name :" bpelCtx.getCompositeName()
"\n Activity name :"+bpelCtx.getActivityName() + "\n Activity Id :" bpelCtx.getActivityId() "\n ECID :" bpelCtx.getECID()
"\n Reference Name :"+bpelCtx.getReferenceName()+ "\n Title :" bpelCtx.getTitle()
"\n Fault :" + bpelCtx.getFault()+ "\n Port Name :"+bpelCtx.getPortType(), "text/plain");
bpelCtx.addAuditTrailEntry("In sendMail222...");
Address sender = MessagingFactory.createAddress(getFrom());
bpelCtx.addAuditTrailEntry("In sendMail sender..."+sender.toString());
bpelCtx.addAuditTrailEntry("from Email..."+getFrom());
String recipientsStr[] = to.split(";");
bpelCtx.addAuditTrailEntry("to Email..."+getTo());
bpelCtx.addAuditTrailEntry("In sendMail333...");
Address[] recipients = MessagingFactory.createAddress(recipientsStr);
bpelCtx.addAuditTrailEntry("In sendMail444...");
newMessage.addSender(sender);
messagingClient.registerAccessPoint(MessagingFactory.createAccessPoint(sender));
newMessage.addAllRecipients(recipients);
bpelCtx.addAuditTrailEntry("In sendMail5555...");
newMessage.getMessageInfo().setSession(MessageSessionType.INBOUND_SESSION);
newMessage.setSubject(getSubject());
bpelCtx.addAuditTrailEntry("Subject..."+getSubject());
String messageId = "";
bpelCtx.addAuditTrailEntry("In sendMail666...");
synchronized (this) {
bpelCtx.addAuditTrailEntry("In sendMail777...");
messageId = messagingClient.send(newMessage);
bpelCtx.addAuditTrailEntry("In sendMail888...");
Status[] statuses = messagingClient.getStatus(messageId);
bpelCtx.addAuditTrailEntry("In sendMail999...");
} catch (MessagingException e) {
bpelCtx.addAuditTrailEntry("inside exception email fault Message:" + e.getMessage());
//e.printStackTrace();
MESSAGES FROM SOA SERVER OUT LOG after test the bpel process:
===========================================
****************Fault?Metadata********************************
Fault?policy?id:?SimpleFaultPolicy
Fault?type:?bpel
Partnerlink:?Service1
Port?type:?{http://kacst.edu.sa/process/nstip/coPINotifyProcess}kacst_process_nstipCoPIMotifyProcess
Properties?Set?for?the?Fault
****************Fault?Details********************************
Fault:?com.oracle.bpel.client.BPELFault: faultName: {{http://schemas.oracle.com/bpel/extension}remoteFault}
messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage}
parts: {{
summary=<summary>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.</summary>
,detail=<detail><exception>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.</exception>
</detail>
,code=<code>env:Server</code>}
Activity:?Invoke1
Composite?Instance:?740332
Composite?Name:?TestBPELFaultPolicy
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "localhost", port 25, isSSL false
220 taisirsit.kacst.edu.sa ESMTP Sendmail 8.14.4+Sun/8.14.4; Fri, 12 Oct 2012 13:00:45 +0300 (AST)
DEBUG SMTP: connected to host "localhost", port: 25
EHLO taisirsit.kacst.edu.sa
250-taisirsit.kacst.edu.sa Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-DELIVERBY
250 HELP
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "EXPN", arg ""
DEBUG SMTP: Found extension "VERB", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "SIZE", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "DELIVERBY", arg ""
DEBUG SMTP: Found extension "HELP", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:<[email protected]>
250 2.1.0 <[email protected]>... Sender ok
RCPT TO:<[email protected]>
250 2.1.5 <[email protected]>... Recipient ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP: [email protected]
DATA
354 Enter mail, end with "." on a line by itself
From: [email protected]
To: [email protected]
Message-ID: <[email protected].sa>
Subject: SOA EXCEPTIONInstance #890381 of BPELProcess1
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Testing Email From Fault
BPEL Process Instance: 890381 needs intervention to recover from a technical exception: faultName: {{http://schemas.oracle.com/bpel/extension}remoteFault}
messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage}
parts: {{
summary=<summary>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.</summary>
,detail=<detail><exception>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.</exception>
</detail>
,code=<code>env:Server</code>}
Check the Activities tab in the BPEL Management Console in order to resolve the error as soon as possible.
This message was automatically generated, please do not reply to it.
250 2.0.0 q9CA0j30012424 Message accepted for delivery
QUIT
221 2.0.0 taisirsit.kacst.edu.sa closing connection
Details from Instance of BPEL PROCESS :
Started invocation of operation "process" on partner "Service1".
Oct 12, 2012 10:00:45 AM [FAULT RECOVERY] Invoked handleBPELFault on custom java action class "com.kacst.fault.CustomFaultHandler".
Oct 12, 2012 10:00:45 AM Sending Email...
Oct 12, 2012 10:00:45 AM to Email [email protected]
Oct 12, 2012 10:00:45 AM to Email [email protected]
Oct 12, 2012 10:00:45 AM to Email getText...Testing Email From Fault BPEL Process Instance: 890381 needs intervention to recover from a technical exception: faultName: {{http://schemas.oracle.com/bpel/extension}remoteFault} messageType: {{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage} parts: {{ summary=<summary>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.</summary> ,detail=<detail><exception>Message Router for nstip/nstip_Pro_CoPiNotificationProcess!1.0*soa_084da522-a825-4aa6-9d1c-ca1d50b4595b is not able to process messages. The composite state is set to "off". The composite can be turned "on" by using the administrative consoles.</exception> </detail> ,code=<code>env:Server</code>} . Check the Activities tab in the BPEL Management Console in order to resolve the error as soon as possible. This message was automatically generated, please do not reply to it.
Oct 12, 2012 10:00:45 AM to Email getHost...smtp.kacst.edu.sa
Oct 12, 2012 10:00:45 AM to Email getPort...25
Oct 12, 2012 10:00:45 AM to Email toAddresses2...
Oct 12, 2012 10:00:45 AM to Email [email protected]
Oct 12, 2012 10:00:45 AM to Email toAddresses3...
Oct 12, 2012 10:00:45 AM to Email [email protected]
Oct 12, 2012 10:00:45 AM to Email [email protected]
Oct 12, 2012 10:00:45 AM After Email...
Oct 12, 2012 10:00:45 AM [FAULT RECOVERY] Marked Invoke activity as "pending manual recovery".
Oct 12, 2012 10:00:45 AM Faulted while invoking operation "process" on provider "Service1".
Please suggest.
ThanksHi,
I got the solution. our email server is sending email to the mail accounts those are in the same domain but for different domains its not able to send the email.
you can try with the email those are created on the same email server.
Thanks
Tuku -
Fault Policy framework doesnt work - SOA 11g
Hi All,
I am trying to excute a composite in which i had a business fault and i had the swicth condition based on reply.
If reply is other than success or failure i will throw a fault Invalid data and the fault is catched by teh fault handler. but the fault policy doesn't work.
these is my fault ploicy
<?xml version="1.0" encoding="UTF-8"?>
<faultPolicies xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<faultPolicy version="0.0.1" id="FusionMidFaults"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Conditions>
<faultName xmlns:medns="http://schemas.oracle.com/mediator/faults"
name="medns:mediatorFault">
<condition>
<action ref="MediatorJavaAction"/>
</condition>
</faultName>
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:remoteFault">
<condition>
<action ref="java-fault-handler"/>
</condition>
</faultName>
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:bindingFault">
<condition>
<action ref="ora-retry"/>
</condition>
</faultName>
<faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
name="bpelx:runtimeFault">
<condition>
<action ref="ora-retry"/>
</condition>
</faultName>
<faultName xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
name="bpws:selectionFailure">
<condition>
<action ref="ora-retry"/>
</condition>
</faultName>
<faultName xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
name="bpws:InvalidData">
<condition>
<action ref="java-fault-handler"/>
</condition>
</faultName>
<!-- <fault name="test" type="bpws:InvalidData" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/" >
<condition>
<action ref="ora-retry"/>
</condition>
</fault> -->
</Conditions>
<Actions>
<!-- Generics -->
Note: The preseeded recovery action tag names (ora-retry, ora-human-intervention, ora-terminate, and so on) are only samples.
You can substitute these names with ones appropriate to your environment.
Notes: ¦ Fault policy file names are not restricted to one specific name.However, they must conform to the fault-policy.xsd schema file. ¦ Example
12–5 provides an example of catching faults based on fault names. You can also catch faults based on message types, or on both:
<Action id="ora-retry">
<retry>
<retryCount>3</retryCount>
<retryInterval>2</retryInterval>
<exponentialBackoff/>
<retryFailureAction ref="java-fault-handler"/>
<retrySuccessAction ref="ora-terminate"/>
</retry>
</Action>
<Action id="ora-rethrow-fault">
<rethrowFault/>
</Action>
<Action id="java-fault-handler">
<javaAction className="in.ibm.com.FAPErrorHandler"
defaultAction="ora-human-intervention" propertySet="properties">
<returnValue value="OK" ref="ora-human-intervention"/>
</javaAction>
</Action>
<Action id="ora-human-intervention">
<humanIntervention/>
</Action>
<Action id="ora-terminate">
<abort/>
</Action>
<Action id="default-replay-scope">
<replayScope/>
</Action>
</Actions>
</faultPolicy>
</faultPolicies>
And my fault bindings.xml file
<?xml version="1.0" encoding="UTF-8" ?>
<faultPolicyBindings version="0.0.1"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<composite faultPolicy="FusionMidFaults"/>
<!--<composite faultPolicy="ServiceExceptionFaults"/>-->
<!--<composite faultPolicy="GenericSystemFaults"/>-->
</faultPolicyBindings>
In 10g we used a default fauly policy and we used to register it used to work fine. Here there is soem thing wrong with the java class.?????
my compsoite execution gives the following error
<bpelFault>
<faultType>
<message>0</message>
</faultType>
<InvalidData>
<part name="summary">
<summary xsi:type="def:string">Invalid status from HOL</summary>
</part>
<part name="detail">
<detail xsi:type="def:string">HOL Sends Invalid Status</detail>
</part>
<part name="code">
<code xsi:type="def:string">Error</code>
</part>
</InvalidData>
</bpelFault>
as per my fault value but not calling my java class... how do i know my fault policy is working or not ?????This is teh errored fault
Error Message: {http://schemas.xmlsoap.org/ws/2003/03/business-process/}InvalidData
Fault ID default/FAPCustomerInitiatedBarUnbar!1.0*374a445a-1396-438e-a7c4-76bf5c6404a8/FAPCustomerInitiatedBarUnbarProcess/210005-BpThw0-BpSeq30.11-3
Fault Time Oct 25, 2010 4:26:49 PM
Non Recoverable System Fault :
<bpelFault><faultType> <message>0</message></faultType><InvalidData xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"><part name="summary"><summary xmlns:def="http://www.w3.org/2001/XMLSchema" xsi:type="def:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Invalid status from HOL</summary></part><part name="detail"><detail xmlns:def="http://www.w3.org/2001/XMLSchema" xsi:type="def:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">HOL Sends Invalid Status</detail></part><part name="code"><code xmlns:def="http://www.w3.org/2001/XMLSchema" xsi:type="def:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Error</code></part></InvalidData></bpelFault>
I verified the serverlog and diagonostic log file..
the java class is not called what is wrong with my java class call in fault policy.
Venugopal Raja
Edited by: user12893766 on Oct 25, 2010 3:57 AM
Edited by: user12893766 on Oct 25, 2010 5:35 AMMany Thanks.
I had misinteprted the documentation I had read which stipulated the pattern of the test should be $fault.<PartName>/<LocationPath>.
What I didnt realise was the $fault.<PartName> e.g. $fault.code returned the root node which in this case is <code>. Therefore no further location path is required as this is a simple type / string field rather than a complex type -
Fault policy and jca.retry.count in 11g
I have a composite which has the architecture as follows :
Adapter (File) -- Mediator -- Adapter (FTP)
The mediator follows sequential routing pattern
I have configured jta.retry.count = 3 for the FTP adapter.
Also the composite refers to the fault policy file from the MDS
In the fault policy file the ora retry action is defined as follows :
< Action id="ora-retry">
<retry>
<retryCount>1</retryCount>
<retryInterval>5</retryInterval>
<retryFailureAction ref="ora-rethrow-fault"/>
</retry>
</Action>
We have configured the following rejection handler for the file adapter :
<faultName xmlns:rjm="http://schemas.oracle.com/sca/rejectedmessages"
name="rjm:FILE_RD_B2BOutFolder_Files">
<condition>
<action ref="ora-ws"/>
</condition>
</faultName>
We get the following message as part of rejection message email notification :
The adapter has exceeded maximum configured retries. The adapter has exceeded maximum configured retries. The adapter was unable to process "{0}" after having retried for {1} times, now the adapter will reject the message. This exception usually comes due to errors in downstream systems. Please increase the value for "jca.retry.maxRetries" in composite.xml for the inbound service and redeploy.
I have the following doubts:
1. When the FTP adapter fails because of a remote fault, which retry will be executed fault policy or jta.retry.count ?
2. If the jta.retry.count is executed then can I see 3 instances on the EM console or any other entry in the Log file.
3. where can i configure jca.retry.maxretries property. this property is not available on emconsole.Hi,
Section 12.4.4 and 12.4.5 should answer your questions.
http://docs.oracle.com/cd/E12839_01/integration.1111/e10224/bp_faults.htm#BABICJAD
Regards,
Neeraj Sehgal -
Fault Policy Management Framework in 10.1.3.3
Hi,
According to the Oracle Documentation, 10133technote. It says
1) "A fault policy can be associated at the following levels:
Partner link,Port type, Process & Domain."
- Here can you through a light on "Process" n what "Process" means
- Is it Refering to a BPEL Process or a "Process" in <faultPolicyBindings>
- Can we have multiple "Process" for a <faultPolicyBindings>
2) "The framework looks for fault policy bindings in the following files (in order of priority):
- In the bpel.xml file at the process level
- In the domain level file "
- what entry should go in bpel.xml (are we really have to edit bpel.xml, created by JDEV)
- what does it mean Process Level & Domain Level
- where we can have a thin line between "Process Level" & "Domain Level"
and How they differ-in while at Implemenation level
Lastly what are the files that we need to modify/edit to make faultPolicy work.
Thanx in advHello,
See comments below:
Hi user568921,
Thanx for an immediate reply.
Apologize for the long list of questions.
1) Already we can have expentional Handling in BPEL,
then why this
Fault Management Framework be used on top of this
[ irrespective of your BPEL Process has Expectional
Handling or not (pl. correct me if im wrong)]
more over i have to restart the server for each
modification,
this is not that recommended when it goes to
Production.
1a) if i have both BPEL Expectional Handling and
Fault Management Framework applied to my Process
which one preceedes.
Fault Management Framework is used for generic fault
handling on a deployed server.
Since the change affects all deployed processes, we do
not recommend changing policy or bindings in production.
We are providing a client api in 10.1.3.4.0 to reload fault
policy and binding files.
Fault Management Framework precedes BPEL "catch". You can
attempt retry actions, if this fails, invoke java code to
email an administrator and mark the activity for human
recovery or do a rethrowFault to pass to BPEL exception
handling.
2) This is what my bpel.xml files contains
<?xml version = '1.0' encoding = 'UTF-8'?>
<BPELSuitcase>
<BPELProcess id="FaultPolicyManagement"
src="FaultPolicyManagement.bpel">
<partnerLinkBindings>
<partnerLinkBinding name="client">
<property
name="wsdlLocation">FaultPolicyManagement.wsdl</prope
ty>
</partnerLinkBinding>
<partnerLinkBinding name="sayHelloService">
<property
name="wsdlLocation">sayHelloService3.wsdl</property>
</partnerLinkBinding>
<partnerLinkBinding
name="FaultPolicyManagementSync">
<property
name="wsdlLocation">url?wsdl</property>
</partnerLinkBinding>
artnerLinkBindings>
</BPELProcess>
<faultPolicyBindings>
process faultPolicy="defaultPolicy"/>
<process faultPolicy="anvvPolicy"/>
<partnerLink
k faultPolicy="DefaultPolicy"></partnerLink>
<partnerLink faultPolicy="anvvPolicy">
<name>FaultPolicyManagementSync</name>
<portType
tType
xmlns:db="http://FaultPolicyManagementSync">db:FaultPo
licyManagementSync_plt</portType>
</partnerLink>
</faultPolicyBindings>
/BPELSuitcase>
when i edit the bpel.xml with
<faultPolicyBindings></faultPolicyBindings> and
deploy it
all the <faultPolicyBindings></faultPolicyBindings>
is resetting back to original bpel.xml
( The Content between
<faultPolicyBindings></faultPolicyBindings> is taken
from fault-bindings.xml file )
why it is so ?
and my fault-bindings.xml is
<?xml version="1.0" encoding="UTF-8"?>
<faultPolicyBindings version="2.0.1"
xmlns="http://schemas.oracle.com/bpel/faultpolicy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<process faultPolicy="DefaultPolicy"/>
<process faultPolicy="anvvPolicy"/>
<partnerLink
k faultPolicy="DefaultPolicy"></partnerLink>
<partnerLink faultPolicy="DefaultPolicy2">
<name>FaultPolicyManagementSync</name>
<portType
tType
xmlns:db="http://FaultPolicyManagementSync">db:FaultPo
licyManagementSync_plt</portType>
</partnerLink>
</faultPolicyBindings>
and DefaultPolicy.xml & DefaultPolicy2.xml is same as
what is there in the server.
Is the file contents correct in Implementation.
Only one process tag is allowed.
2a) if Fault Management Framework applied and NO
<faultPolicyBindings></faultPolicyBindings> is added
to bpel.xml
and if it is left as it is (i.e., default bpel.xml
generated by JDEV) then what is the policy it is
applied.
Once the system detects an invoke has faulted, it tries
to check if there is a fault policy attached to this faulted
partner link (or port type, or the process), if no policy
binding is detected, it will flow bubble up the fault. By
default there is no policy applied.
3) Can you please let me know
- how many ( fault-binding.xml &) fault-policy's can
n i have per domain.
- how many ( fault-binding.xml &) fault-policy's can
n i have per process.
many to one or many to many relationship.
We can have only one policy
[config/DefaultPolicy.xml] at a Domain Level
To create a Fault Policy File for Automated Fault Recovery
Create directories named fault-policies under the config directory for
every domain in which you want to use the fault management framework.
SOA_ORACLE_HOME\bpel\domains\domain_name\config\fault-policies
You can have n fault policies per domain.
To provide a fault policy applicable to an entire domain in the
fault-bindings.xml file in the SOA_ORACLE_
HOME\bpel\domains\domain_name\config directory.
You can have 1 fault-bindings.xml per domain.
3a) how can i make sure/ensure that Fault Management
Framework is applied at each process level and/or at
Domain level.Provide a fault-binding: with
<process faultPolicy="YourPolicy"/>
>
4) Is there any Advantages, limitations / contrains
that we have if we are opting Fault Management
Framework (have to consider, before going to
production).
The framework is applicable for faults in "invoke" activity
only.
5) can i have any samples / URL for samples for Fault
Management Framework in OTN or else where.
so that i can work around.
>
>
Other than 10133technotes.pdf do you have any other
documentation which has an eloberative description
about
Fault Management Framework and its samples
please guide me accordingly.Let me know if you need more information. -
Hi,
Can we use BPEL Console/Admin to edit fault policy file? I didn't find a way though.. I assume it should be possible using Console/Admin ...
Please let me know ..
RanjithI believe it is not possible atleast in 10.1.3.3 version, Oracle might support this in later version.
Have you seen the demo of Oracle CAB, I believe they wrote some JSP to view/edit these policies. (Not sure it may be just for ESB).
Regards,
Chintan -
Fault Policy Resolution in Fault Framework
Hello Gurus,
A simple doubt regarding fault-policy file resolution:
There are two places where you can specify a policy file:
1) In composite.xml file. E.g.
<property name="oracle.composite.faultPolicyFile">oramds://apps/faultpolicyfiles/fault-policies.xml</property>
2) In fault-bindings.xml file. E.g.
<faultPolicyBindings ...>
<composite faultPolicy="FusionMidFaults"/>
</faultPolicyBindings>
When both are specified at same level, let's say at composite level as above, which one will take precedence over the other?
Thanks-
AshishHi,
I don't know the answer but in 11g they should be in MDS. Second option was used in 10g. I guess it's still there just for backwards compatibility.
Regards,
Milan -
Test Conditions in BPEL Fault Policy
Per the ORacle 10.1.3.3 SOA Suite techical document, under the Fault Policy Framework section you can use an XPath expression in the <test> section of a fault policy. The example provided is +<test>$fault.code/code="WSDLReadingError"</test>+
Instead of using an equals sign, I am trying to figure out the syntax to use a "contains" or "starts-with" expression. I want to filter out a particular remoteFault using the "summary".
I have tried:
+<Conditions>+
+ <faultName xmlns:bpelx="http://schemas.oracle.com/bpel/extension" name="bpelx:remoteFault">+
+ <condition>+
+*<test>contains($fault.summary/summary,"exception on JaxRpc")</test>*+
+<action ref="ora-retry"/>+
+ </condition>+
+ </faultName>+
+ </Conditions>+
+ <Actions>...+
but this does not seem to work.
Anyone know what "tests" are possible, and\or have used a "contains" expression in their Fault Policy?
Thanks in advance,
Eric
Example of the fault that I am trying to "catch".
+<remoteFault xmlns="http://schemas.oracle.com/bpel/extension">+
+<part name="code">+
+<code>ESBMessageProcessingFailed</code>+
+</part><part name="summary"><summary>exception on JaxRpc invoke:+
start fault message:
+801 Error validating amount. Must be numerical and greater than 0 [000]+
+:end fault message</summary>+
+</part><part name="detail"><detail>null</detail>+
+</part></remoteFault>+I did try to add namespace but it still didn't catch the fault.
I contacted Oracle support and they indicated that the syntax is: $fault.part/<xpath expression>
So for my purposes I needed to put: <test>$fault.summary/contains(summary, "xyz")</test>
HOWEVER this did not work. We recontacted Oracle and this time they admitted there is a bug that they will document. Only = or != can be used at this time.
Thanks for all who responded. I'm closing this question.
For reference, here's a list of what I tried:
The following did NOT catch my fault
<test>$fault.summary/contains(summary, "JaxRpc invoke")</test>
<test>$fault.summary/contains(summary, 'start fault message:')</test>
<test>$fault.code/contains(code, "ProcessingFail")</test>
<test>$fault.code/contains(code, "ESBMessageProcessingFailed")</test>
<test>$fault.code/contains(code/code, "ESBMessageProcessingFailed")</test>
<test>$fault.code/contains($fault.code, "ESBMessageProcessingFailed")</test>
<test>$fault.code/contains($fault.code/code, "ESBMessageProcessingFailed")</test>
<test>$fault.code/code/contains(code, "ESBMessageProcessingFailed")</test>
<test>$fault.code/code/contains($fault.code/code/, "ESBMessageProcessingFailed")</test>
<test>$fault.code/code/contains(code/code/, "ESBMessageProcessingFailed")</test>
<test>$fault.code/contains(/remoteFault/part[1]/code/, "ESBMessageProcessingFailed")</test>
<test>contains($fault.code/code,"ESB")</test>
<test>contains($fault.summary/summary,"ESB")</test>
<test>contains($fault.summary, "ESB")</test>
<test>contains($fault.summary/summary, 
)</test>
<test>xp20:matches($fault.summary/summary,'.*fault message.*')</test>
<test>xp20:matches($fault.summary/summary,'*fault message*')</test>
<test>not(xp20:matches($fault.summary/summary,'.*xyz.*'))</test>
<test>true()</test>
Maybe you are looking for
-
Game doesn't fit the screen, iPod menu sideways
I have a 4th generation iPod Nano. The problem here comes from the game Brain Challenge. This is probably a very confusing and complicated explanation of the problem, so I've provided photos of the problem at the bottom of this post. When I start Bra
-
Need Help on ItemCondValidity of BAPI_SAG_GETDETAIL
Hi Gurus, I am trying to fetch data from SAP on to a Excel sheet using BAPI object PurchSchedAgreement in VBA. I am able to fetch data in Item and Header for a particular Scheduling Agreement, but not able to fetch data in HeadCondition, HeadCondVali
-
Code insight and possible side effects
Hi, I'm using SQL Developer 1.2 on MacOSX 10.4.9 (MacBook Pro) and noticed the following problems: In SQL Worksheet, start typing a query and use the shortcut for code insight ie: "SELECT * FROM SCHEMA.EMPL": Nothing happens, no completion popup is d
-
How to configure Java Plug-In to use Firefox keystore
Does any one know how to configure Java Plugin 1.5.0 to use the Firefox kesystore either in Windows or in Linux environments? I installed and configured 'JSS' based on the information available at http://java.sun.com/j2se/1.5.0/docs/guide/deployment/
-
Need Zen XTRA software.......my CD was damaged
Where can I download the needed software to be able to use my computer to manage my player. My computer crashed and I lost everything. Now my install cd was damaged and I have no way to work with my player. Someone help me please? I have 5 years of s