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.

Figure 1 : TranslationProcess in EventPublisherApp

Figure 1 : TranslationProcess in EventPublisherApp

<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 2 : SubscriberProcess in SubscriberApp

Figure 2 : SubscriberProcess in SubscriberApp

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.

As I have finished writing my previous post on Spark Form Components and Android Keyboard Problem, I started making a number of inquiries to both Adobe and Google evangelists about the subject.

Chet Haase from Google, working on Android SDK and previously on Flex SDK at Adobe, was kind enough to take issue as “big enough” to forward to his folks at Adobe. Again thank you Chet for your prompt response to my mail.

A soothing answer to our surprising discovery during our development efforts came from Ryan Frishberg of Adobe’s Flex SDK development team.

Apparently, and as expected, Adobe is aware of the issue with Spark components. Adobe has a plan in place to address this issue in their next release, of which is concentrated on mobile development.

“The underlying issue is what text component we use from the Flash Player (TextField vs. Flash Text Engine/Text Layout Framework).

The most up-to-date info I can share is what’s on our website about Hero development.  http://opensource.adobe.com/wiki/display/flexsdk/Hero

So there it is… Glad if this may be of any help to whom are in the development area of flex applications on current SDK release to work on mobile devices.