I read a document from Oracle which explains what is idempotent in BPEL.
13.3.2 Partner Link Property
You can dynamically configure a partner link at runtime in BPEL. This is useful for scenarios in which the target service that BPEL wants to invoke is not known until runtime. The following Partner Link properties can be tuned for performance: 13.3.2.1 idempotent
An idempotent activity is an activity that can be retried (for example, an assign activity or an invoke activity). Oracle BPEL Server saves the instance after a nonidempotent activity. This property is applicable to both durable and transient processes.
Values:
This property has the following values:
False: Activity is dehydrated immediately after execution and recorded in the dehydration store. When idempotent is set to False, it
provides better failover protection, but may impact performance if the BPEL process accesses the dehydration store frequently.
True (default): If Oracle BPEL Server fails, it performs the activity again after restarting. This is because the server does not
dehydrate immediately after the invoke and no record exists that the activity executed. Some examples of where this property can be set to True are: read-only services (for example, CreditRatingService) or local EJB/WSIF invocations that share the instance's transaction.
But I wonder is there anyway to set an activity as non-idempotent or idempotent in design time and runtime?