Saturday 3 December 2016

SOA Interview Q&A 2

BPEL Related Interview Question & Answer


Q. What is choreography? How does it differ from orchestration?

Orchestration == Executable Process
Web Service Orchestration relates to the execution of specific business processes. WS-BPEL is a language for defining processes that can be executed on an orchestration engine.

In this case we have a central controller process which controls and co-ordinates all the Web Services involved in the application. How the participating Web Services will be called, what will be the control flow, what all transformation will take place ... these all things are known only to the central controller process.



Choreography == Multi-party Collaboration
Web Service Choreography relates to describing externally observable interactions between web services. WS-CDL is a language for describing multi-party contracts and is somewhat like an extension of WSDL: WSDL describes web services interfaces; WS-CDL describes collaborations between web services.




Here we don't have any central controller process and hence all the participating Web Services know when to call, whom to interact, when to execute operations, etc.

Orchestration has a central controller process and all other participating Web Services don't know about the actual business process. They are called only by the controller process and they don't know anything about other Web Services involved in the application.
Whereas Choreography doesn't have any controller process/service and all the participating Web Services know the actual business process and they are well aware of which all Web Services they need to interact with, when to execute the operations, etc.

Fault handling is easier in Orchestration as the execution is controlled which is not the case with Choreography. Web Services can be easily and transparently replaced in case of Orchestration as the involved Web Services don't know the actual business process whereas it'll be difficult in case of Choreography.

Thus, we see that Orchestration is having quite a few advantages over Choreography and hence Orchestration is normally preferred for business process implementations, but Choreography may certainly have its own usage in some selected scenarios.

Q. What is BPEL?
Web Services Business Process Execution Language (WS-BPEL) is an XML based programming language to describe high level business processes. A 'business process' is a term used to describe the interaction between two businesses or two elements in some business. An example of this might be company A purchasing something from company B. BPEL allows this interaction to be described easily and thoroughly such that company B can provide a Web Service and company A can use it with a minimum of compatibility issues.

The BPEL language enables you to define how to:
1. Send XML messages to, and asynchronously receive XML messages from, remote services
2. Manipulate XML data structures
3. Manage events and exceptions
4. Design parallel flows of process execution
5. Undo portions of processes when exceptions occur



Q. What is Web-Service?
In terms of BPEL, the term 'Web Service' means something with which you can interact. For example, you could have a web service which you can interact with to get the time of day, or a web service you can interact with to buy a fridge. The web service can have any purpose.
A Web Service is typically described using Web Service Description Language (WSDL). This is another XML based language which allows you to describe the interface to the web service.
WSDL tells you exactly how you can interact with the web service but says nothing about how the web service works.

Q. What is a pick activity? Can I have a pick activity with no onMessage branch?
This activity waits for the occurrence of one event in a set of events and performs the activity associated with that event. The occurrence of the events is often mutually exclusive (the process either receives an acceptance or rejection message, but not both). If more than one of the events occurs, then the selection of the activity to perform depends on which event occurred first. If the events occur nearly simultaneously, there is a race and the choice of activity to be performed is dependent on both timing and implementation.

onMessage branch is mandatory.

The pick activity provides two branches, each one with a condition. When you double-click the Pick icon, the pick activity appears and displays these two branches: onMessage and onAlarm. The onMessage branch contains the code for receiving a reply, for example, from a loan service. The onAlarm branch contains the code for a timeout, for example, after one minute. Whichever branch completes first is executed; the other branch is not. The branch that has its condition satisfied first is executed.

Q. What are the different message exchange patterns in BPEL?
The port type name attribute provides a unique name among all port types defined within in the enclosing WSDL document. WSDL has four transmission primitives that an endpoint can support:

One-way
The operation can receive a message but will not return a response
Request-response
The operation can receive a request and will return a response
Solicit-response
The operation can send a request and will wait for a response
Notification
The operation can send a message but will not wait for a response

The most important message exchange patterns are one-way, request/response, and request/callback (asynchronous request/response).
For example, the request/response MEP defines that a consumer sends a request message and waits for the answer, which is sent by the provider as a response message.

What is portType?
The <portType> element combines multiple message elements to form a complete oneway or round-trip operation.
<portType name="Hello_PortType">
      <operation name="sayHello">
         <input message="tns:SayHelloRequest"/>
         <output message="tns:SayHelloResponse"/>
      </operation>
   </portType>
An abstract set of operations supported by one or more endpoints (commonly known as an interface); operations are defined by an exchange of messages. A portType is a named set of abstract operations and the abstract messages involved.

What is port?
port number is part of the addressing information used to identify the senders and receivers of messages.

Q. What is the difference between Sync and Async activity on wsdl level and BPEL Process as well?
The synchronous process defines one two way operation port to receive the request and send the response.
On the BPEL process side, the Synchronous BPEL process gets instantiated on receiving the client request and sends back the reply using the reply activity on the same port on which the Client is waiting.
Synchronous process using only one port for request and reply operation.

Asynchronous BPEL process is having two Port Types and each of them supports single operation. That means the asynchronous BPEL process receives the request on one of the ports and sends back the reply from another port (callback port). To send the response the asynchronous BPEL process invokes the client on the callback port using the callback activity.

Synchronous BPEL process has one reply activity instead of callback. Synchronous BPEL process WSDL is having singlepartnerLinkType instead of two.

Q. How does pick activity differ from a receive activity?
Pick activity can act as a multiple receive activity in some business scenarios. If we have two inbound operations and both can trigger the bpel process then we will go with pick activity as we can’t have two receive activity with create Instance box checked.

Q. What is a flow activity? Is it sequential or parallel? 
This activity enables you to specify one or more activities to be performed concurrently. A flow activity completes when all activities in the flow have finished processing. Completion of a flow activity includes the possibility that it can be skipped if its enabling condition is false.
It is parallel.

This property is used when you have more than one invoke activity in parallel like in a typical flow activity.
By default, Oracle BPEL Process Manager executes in a single thread by executing the branches sequentially instead of in parallel. When this property is set to True, the process manager creates a new thread to perform each branch's invoke activity in parallel. This property is applicable to both durable and transient processes.
Consider setting this property to True if you have invoke activities in multiple flow or flow n branches. This is especially effective if the parallel invoke activities are two-way, but some benefits can be realized for parallel one-way invokes as well.
This property enables you to execute a synchronous BPEL process calling multiple synchronous Web services in flow in real parallel mode. If you set the nonBlockingInvoke property to false, Oracle BPEL Server blocks the Web service call until the other is finished.

What is a flowN activity and how does it leverages the flow activity?
This activity enables you to create activities within a flow. You specify the number of branches of these activities to create.

Q. How does sync and async request run in the backend?
Synchronous Process Execution:



The following steps are performed:
1.       The client calls a request on the delivery service (this can also be a BPEL process).
2.       The synchronous flow starts. In this case, the first activity is received.
3.       The flow executes some activities, and then encounters a checkpoint, which is a breakpoint activity (other breakpoint activities are received, onMessage, wait, and onAlarm). Once the flow encounters this activity, the instance must be dehydrated. The assign following the checkpoint is processed by another thread in the background.
4.       The thread (the one from the client) goes back to the delivery service and waits for the reply from the reply queue. This waiting is subject to the syncMaxWaitTime value. If this time is exceeded, then the client thread returns to the caller with a timeout exception.
5.       Another new background asynchronous thread picks up where the other thread left off. It rehydrates the instance from the database, and executes the remaining activities.
6.       When the reply activity is executed, it puts the reply message in the reply queue.
7.       The reply queue now notifies any waiters that the reply message is available. If the waiter has not timed out, it gets the message. If it has timed out, the message is not picked up (note that the flow has completed normally).
8.       If the waiter has not timed out, it now has the reply message and returns to the client with the message.

If the flow did not have a checkpoint, then step 2 processes all the activities, including the reply (which added the reply message to the queue). When the thread returns to the delivery service, it waits for the reply. However, since the reply is already there, it returns immediately and is not subject to the syncMaxWaitTime value.
In addition, the synchronous process saves itself when it is finished.

Asynchronous Process Execution:
From JMS & DB operation perspective



The sequence of events involved in the delivery of invokes messages is as follows:
1.       The client posts the message to the delivery service.
2.       The delivery service saves the invocation message to the invoke_message table. The initial state of the message is 0 (undelivered).
3.       The delivery service schedules a dispatcher message to process the invocation message asynchronously.
4.       The dispatcher message is delivered to the dispatcher through the afterCompletion () call. Therefore, the message is not delivered if the JTA transaction fails.
5.       The dispatcher sends the JMS message to the queue. Places a very short JMS message in the in-memory queue (jms/collaxa/BPELWorkerQueue) in OC4J JMS. The small JMS message triggers the WorkerBean in the downstream step.
6.       This message is then picked up by a WorkerBean MDB, which requests the dispatcher for work to execute. If the number of WorkerBean MDBs currently processing activities for the domain is sufficient, the dispatcher module may decide not to request another MDB. The decision to request an DB is based on the following:
7.       Ã˜ The current number of active MDBs
8.       Ã˜ The current number pending (that is, where a JMS message has been sent, but an MDB has not picked up the message)
9.       Ã˜ The value of dspMaxThreads
10.    MDB fetches the invocation message from the dispatcher.
11.    MDB passes the invocation message to Oracle BPEL Server, which updates the invocation message state to 1 (delivered), creates the instance, and executes the activities in the flow until a breakpoint activity is reached.



From Thread perspective 
1.       Caller thread T1 receives an incoming message and saves it to the internal delivery queue. Thread T1 is then released by Oracle BPEL Server and the caller can continue its own processing.
2.       Inside the server, a message driven bean called WorkerBean monitors the queue for invocation requests. The WorkerBean picks up the message from the delivery queue, spawns a new thread (T2), and starts a Java Transaction API (JTA) transaction (Txn1) to create and run the instance.
3.       Thread T2 encounters a midprocess breakpoint activity (receive) and decides to dehydrate the process instances.
4.       Thread T2 retrieves a database connection (C1) from the data source connection pool.
5.       Thread T2 saves the process instance to the dehydration database, which ends the transaction (Txn1).
6.       Caller thread T3 intercepts an invocation from the partner and saves the incoming message to the delivery queue (dehydration point).
7.       The Oracle BPEL Server WorkerBean picks up the message from the delivery queue, spawns a new thread (T4), and starts a JTA transaction (Txn2) to continue the instance.
8.       Thread T4 encounters the end of the process and must dehydrate the process instance.
9.       Thread T4 retrieves a database connection (C2) from the data source connection pool.
10.    Thread T4 saves the process instance.

Q. Explain error handling in BPEL and what is error handling framework?
A BPEL fault has a fault name called a Qname (name qualified with a namespace) and a possible messageType. There are two categories of BPEL faults:
Business faults
Runtime faults
12.3.1 Business Faults
Business faults are application-specific faults that are generated when there is a problem with the information being processed (for example, when a social security number is not found in the database). A business fault occurs when an application executes a throw activity or when an invoke activity receives a fault as a response. The fault name of a business fault is specified by the BPEL process service component. The messageType, if applicable, is defined in the WSDL. A business fault can be caught with a faultHandler using the faultName and a faultVariable.
<catch faultName="ns1:faultName" faultVariable="varName">
12.3.2 Runtime Faults
Runtime faults are the result of problems within the running of the BPEL process service component or web service (for example, data cannot be copied properly because the variable name is incorrect). These faults are not user-defined, and are thrown by the system. They are generated if the process tries to use a value incorrectly, a logic error occurs (such as an endless loop), a Simple Object Access Protocol (SOAP) fault occurs in a SOAP call, an exception is thrown by the server, and so on.

Synchronous Requests
When exceptions arise in synchronous requests, we will not get enough time to perform any corrective measures as response needs to be returned to the requestor immediately. In such cases, we can only return faults to the requestor. This is true for both BPEL and Mediator.

BPEL can catch, throw and compensate for exceptions. Mediator can catch multiple exceptions per operation and perform transformations before returning faults to the initial caller.

Asynchronous Requests
As the client of the service is not expecting an immediate response, asynchronous requests provide us with enough time to correct any issues arising in the request flow.

error handling framework
SOA Suite 11g offers an excellent tool to handle exceptions at framework level. Usually business faults are handled at component level and system faults at framework level.
Fault Management Framework lets us handle exceptions through simple XML directives. Fault policies can be defined in a file called fault-policies.xml. We can declaratively specify exceptions to be handled through human intervention, retried, terminated or a combination of any of these actions.







 Q. What do you mean by non-idempotent activity? Which all activities are non-idempotent by default?
All retriable activities are idempotent by default. If idempotent is set to be false then it is a start of new transaction and in other words a Dehydration point is created. recieve,pick,wait,checkpoint() are non-idempotent by default.

Transient Processes
Transient processes do not incur dehydration during their process execution. If an executing process experiences an unhandled fault or the server crashes, instances of a transient process do not leave a trace in the system. Thus, these instances cannot be saved in-flight regardless if they complete normally or abnormally. Transient processes are typically short-lived, request-response style processes. Synchronous processes are examples of transient processes.
Durable Processes
Durable processes incur one or more dehydration points in the database during execution. Dehydration is triggered by one of the following activities:
·         Receive activity
·         OnMessage branch in a pick activity
·         OnAlarm branch in a pick activity
·         Wait activity
·         Reply activity
·         checkPoint() within a <bpelx:exec> activity
Durable processes are typically long-living and initiated through a one-way invocation. Because of out-of-memory and system downtime issues, durable processes cannot be memory-optimized.

Q. Dehydration in Oracle BPEL?
Storing the current status of the BPEL process into the Database is known as dehydration. The Dehydration Store database is used to store BPEL process status data, especially for asynchronous BPEL processes. Also, all successfully executed BPEL process instances are stored in the dehydration store. The database schema is created for this as a part of SOA Suite installation is ORABPEL schema.


This property can only be set to True if it does not have dehydration points. Activities like wait, receive, onMessage, and onAlarm or a call to Async WSDL API create dehydration points in the process. During the execution if any dehydration point is reached the instance will get dehydrated irrespective of bpel process type (sync/async).

No comments:

Post a Comment