I was researching Event structure in SOA and the idea behind it. Then I found that Observer pattern is the origin of the solution. Briefly, Observer pattern stands for that there are partners interact with a same unit involved in overall structure and that’s why they are registered for any event relevant to that unit. To make the problem clearer, I think it would be better using a real-life case. Assume that you want to travel to a destination. It means that potentially you will buy flight tickets and accommodation. So, once the teller in the agency registers you for a traveling, the flight ticket system and accommodation system should suggest you the best option regarding the specified traveling information. In this case the registration system, flight ticket system and accommodation system are the partners; traveling registration is the event. By applying Observer patterns, you need to implement this workflow manually that at the end of the traveling registration process, you need to interact with partners one by one to suggest the best options. The disadvantage of this implementation is that once new partners join to the system, you will need to add them to the registration process manually as well.
From SOA viewpoint, such coupling between partners is unacceptable. To overcome this problem there is Event structure in SOA, and Event is a data type defined in Data Model which is presented in overall architecture. Processes share Data Model including particular events and publish-subscribe mechanism is handled by the system automatically. It means that any process can publish any event to inform its subscribers without knowing them; similarly, any process can be subscribed to an event without knowing its producer. It also means that there is no need to change any implementation once a new partner joins to that event no matter that it is a producer or subscriber.
There are many SOA solution environments including business event structure as well. For discovering the product, I tried to implement publish-subscribe event scenario in Adobe’s LiveCycle Enterprise Suite. Firstly, I created publisher process named as Translation Process that gets the inputs from the user and throws an event about translation. Then I created subscriber process named as Subscriber Process that is got started once it receives an event produced for translation. Briefly the scenario is that once the user enters inputs for translation, which are input text, source language, target language; and then a human task created for reviewing the inputs. CreasisBA user group is assigned to execute review task; and once the task gets approved by them, then the Task Completed event is thrown otherwise the process is halted. Task Completed event is a built-in event definition in LiveCycle ES2; and Subscriber Process has a start point that listens that type of events. Once any of such an event is received, then another human task is created by assigning to Creasis Developer user group. That’s why I wanted to keep the implementation as basic one, after the human task is completed in the subscriber process then it gets finished. I mean it will be an external web service call to complete translation process.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation xml:lang="en">
Adobe LiveCycle Workbench ES2 Translation XSD
</xsd:documentation>
</xsd:annotation>
<xsd:element name="Translation">
<xsd:complexType name="TranslationInfo">
<xsd:sequence>
<xsd:element name="SourceLanguage" type="xsd:string" />
<xsd:element name="TargetLanguage" type="xsd:string" />
<xsd:element name="TranslationText" type="xsd:string" />
<xsd:element name="TranslationResult" type="xsd:string" />
<xsd:element name="TaskStatus" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Figure 1 shows the resources of EventPublisherApp and graphical representation of TranslationProcess. I started development with generating data model presented in translation.xsd, which is given above. Then I created user form named as TranslationForm by binding to XSD resource. Finally, I develop the process by binding the form as a variable. Figure2 shows shows the resources of EventSubscriberApp and graphical representation of SubscriberProcess. I reused form and XSD assets generated at EventPublisherApp, which help development of process very easy.
As it can be easily seen from the figures above that Adobe’s LiveCycle ES provides creative and easy-to-manage environment for enterprise-level business process development. First of all, it takes almost only 2 hours to install the product, which has too many useful built-in features. The most important ones are that Adobe LiveCycle ES2 Designer can use data model to generate a user form, which is converted to an editable PDF document during the execution; Adobe LiveCycle ES2 Workbench can deploy, undeploy the applications and check-in, check-out the resources during the development. Once comparing with other SOA environment during the exploration the product, I felt that it brings effective solutions to improve development of complex systems and it has built-in functionalities, which are mostly required even in medium-scale systems. I think it can make complex-system development exciting, and I hope the product will get rightful attention in the market.
Relevant Posts:


Nice site, nice and easy on the eyes and great content too.
Well, that is certainly excellent, however think about additional options we’ve got here? Would you mind making one more article about all of them as well? Appreciate it!