IBM BPM, V8.0.1, All platforms > Programming IBM BPM > Service Component Architecture programming > SCA programming model fundamentals > Invocation styles

Exception handling for synchronous invocation

When a service component is invoked synchronously, both the client and the service provider run in the same thread. The target can return a response message, an exception, or nothing (in a one-way operation) to the client. If the result is an exception, it can be either a business exception or a system exception. The client in this case can be either application code or some form of system code.

Here is a sample client that invokes a Java™ component declared with a Java interface. The interface has one method declared as follows:

public interface StockQuote {
	float getQuote(String symbol) throws InvalidSymbolException;}

The client code looks like this:

try {
	float quote = StockQuoteService.getQuote(symbol);
	} catch (InvalidSymbolException s) {
	System.out.println(This is business exception declared in the Java interface.);
	} catch (ServiceRuntimeException e) {
	System.out.println("Unchecked system exception detected");}

In the scenario, the first exception InvalidSymbolException indicates that the request has reached the service provider, which does not recognize the client input. The service provider then throws a business exception stating that the symbol supplied is invalid. This business exception is the only one declared by the method signature.

exceptions like InvalidSymbolException are only caught with clients using a reference.

In addition to the business exception declared, the client can receive system exceptions.

For example, if the stock exchange system runs into a problem, the service might fail to obtain the quote with some unchecked exceptions. When such an exception is thrown by the service, a ServiceRuntimeException is returned to the client, and the client might then want to determine the underlying cause. The following code snippet shows how it can obtain this information:

try {
	float quote = StockQuoteService.getQuote(String symbol);
	} catch (ServiceRuntimeException e) {
	Throwable t = e.getCause();
	if (t instanceof RemoteException) {
	System.out.println("System ran into RemoteException. Details as follows: " + e.toString());}

Invocation styles