Fundamentally if you read the docs, you will see that both the now Oracle products have similar orchestration capabilities. This blog is written in the intention to clarify the question.
I will cover the one line answer and provide some references I found in the web.
Use of BPEL: State-full, high involvement of Data Manipulation.
Use of OSB: Stateless, Low involvement of Data Manipulation.
For a briefer differentiation, I found another blog in the web space which made my job easier. I have copied the content across to this blog.
Note: the copyright of the below content belongs to the author of the blog page.
Use OSB for:
- Endpoint routing (providing location transparency) so that we do not care about the physical location of the endpoint.
- Endpoint abstraction (interface transparency) so that we do not care about the exact data formats required by the endpoint because the OSB will take care of transformations.
- Load balancing so that we do not care about which of multiple service implementations will actually service a request.
- Throttling so that we do not care about how use of services is restricted.
- Enrichment so that we do not care about how additional data is provided to the request to match the expected request and response formats.
- Simple synchronous composition so that we do not care if our abstract service call is actually made up of two or more physical service calls.
- Protocol conversion so that we do not care what physical transports are being used.
- Sync/async abstraction so that we can treat services as fire and forget or query response according to the needs of the client.
Use BPEL for:
- Complex composition of parallel flows that involve more than a couple of services.
- Long running compositions that may run for minutes, hours or days.
- Asynchronous compositions that require correlation of requests and responses.
- Process abstraction that enables us to track processes and their interactions with multiple services.
- Human workflow