Using SnagIt Screen Capture Plug-In for Windows Live Writer

Screen captures are important when blogging and having an easy way to capture images from the screen and embedding them into a blog entry is a key feature. SnagIt from Techsmith Corporation is a popular and very usable utility for taking such snapshots of screens.

When using Windows Live Writer blogging client software there are different plug-ins which integrates SnagIt with Live Writer. I first installed various versions from the “official” Plug-in website, but they all did not work for me and the version of SnagIt I have installed on my machine (SnagIt 8.0.1). After some Google searches I have found this plug-in which works for me!

Posting Source Code with Microsoft Live Writer and WordPress

Today I searched for a solution to post source code using Microsoft Live Writer to my blog hosted on WordPress.com.

WordPress itself has an integrated Syntax Highlighter supporting most popular languages. Details of how to use it can be found here.

But how do you use the WordPress Syntax Highlighter when using Microsoft’s Live Writer (which I really find a good tool for offline writing) for posting? There are syntax highlighting Plug-ins available for Live Writer, but they are all not compatible with the WordPress way of syntax highlighting. After doing some Google searches, I’ve found a special Live Writer Plug-in supporting WordPress written by Rich Hewlett. It can be downloaded here.

After that inserting nicely formatted source code is just a matter of a few mouse clicks:

 public static BusinessEvent buildEvent(String input)
        throws Exception
    {
        QName eventName =
            new QName ("http://schemas.oracle.com/events/edl/HelloWorldEvents",
                       "InitiateHelloWorldEvent");
        BusinessEventBuilder beb = BusinessEventBuilder.newInstance();
            // set the event name (that matches the QName of the EDL)
            beb.setEventName(eventName);
            // payload element as dom
            beb.setBody(createElementFromInput(input));
            UUID uuid = UUID.randomUUID();
            beb.setProperty(BusinessEvent.EVENT_ID, uuid);
            // the conversation id can help to find the composite instance later via conv id.
            beb.setProperty(BusinessEvent.PROPERTY_CONVERSATION_ID, uuid);
        return beb.createEvent();
    }

Thanks Rich for developing this really usable Live Writer Plug-in for WordPress!

Implement Domain Value Maps (DVM) with Oracle Service Bus (OSB) 10R3

Domain Value Maps (DVM) are an interesting feature of Oracle SOA Suite for supporting Canonical Data Models. They help to map from one vocabulary, used in a given domain, to another vocabulary used in a different domain. For example, one domain might represent a country with a numeric code while another domain may represent a country with the ISO-standard alphanumeric country code. In SOA Suite 10g there were part of the “old” Oracle ESB and in SOA Suite 11g they can be used from a Mediator component.

Unfortunately this feature is not yet available in Oracle Service Bus (OSB). It will be added in the future, as the statement of direction states.

This might be less of a problem when using both the Oracle SOA Suite together with the Oracle Service Bus in a larger architecture. In this case, the responsibility for mapping these values can be delegated to the SOA Suite 11g Mediator component, where the DVM functionality is available.

But if only the OSB is used standalone, then such value mappings would be nice in the OSB as well. With the help of XQuery the DVM functionality can be implemented in a similar way, so that if the feature is later available in a new version of OSB, it can be replaced by that with minimal work involved. This blog entry shows the custom DVM functionality implemented for the Oracle Service Bus.

Custom DVM functionality implemented using XQuery function in OSB

In order to show the custom DVM functionality a simple OSB service has been implemented. It only consists of a simple Proxy Service, which accepts a request message with two static code values (country and currency), translates the message into the canonical format and returns (echo) it to the caller. A sample request and the corresponding response can be seen in the window below taken from soapUI.

soapui-call 

The message flow of the Proxy Service below uses a stage (TransformationToCanonicalState), which is responsible to map from the source to the canonical format. First the value maps are assigned to variables (Assign 1 for country map and Assign 2 for currency amp) and then the message is transformed using an XQuery function (Assign 3).

pipeline

For the definition of the Domain Value Maps the same format known from the SOA Suite is used. The picture below shows the map for the currency code mapping. The <columns> element defines the number of value domains and assigns a name to each domain, in our case Source and Canonical. The <rows> element defines the value mappings, i.e. the value 10 in the Source domain should be mapped to to the value CHF in the Canonical domain.

currency-dvm

The format is based on a XML Schema which can be found in the Oracle SOA Suite documentation here. An XSD file with the schema is also part of the example OSB project which can be downloaded from here.

The next window shows the definition of the 3rd Assign action in the XQuery Expression Editor. The first parameter holds the source message to be translated and the next two parameters hold the content of the two value maps for country and currency mapping.

xquery-editor

The XQuery script (transform.xq) implements the transformation. The next figure shows it in the graphical (design) view. The translation of the countryCode to isoCountry and from currencyCode to isoCountry are both using the corresponding parameters holding the content of the domain value maps. 

transform-xq

The source of the transform() function is shown below

transform-source-xq

The custom DVM functionality is wrapped by the lookupValue() function, matching the DVM implementation of the Oracle SOA Suite, where a function with the same name is available.  The only difference is the first parameter, which in our case is an element holding the contents of the domain value map, whereas in the SOA Suite version the first parameter only holds the name (reference) of the DVM file.

The source of the lookupValue() function can be seen below

lookupValue-function

The function looks up the necessary source value and translates it to corresponding target value.

Unfortunately the Oracle Service Bus does not support the XQuery Modules feature, which would allow the creation of function libraries to be reused. Therefore the lookupValue() function needs to be copied into the transform.xq script. This copy-paste reuse is not optimal, I hope that OSB will fully support XQuery 1.0 and especially the Module functionality in the future.

This finishes the custom implementation of the DVM functionality in Oracle Service Bus. It closely matches the DVM functionality of the Oracle SOA Suite, which Oracle will offer in a future version of OSB as well. The solution shown in this blog can help in the meantime and will allow for an easy migration to the built-in function in the future. It’s only a proof-of-concept and has not yet been used in production!

The example project can be downloaded form here.

Use comments on actions to increase maintainability of your Oracle Service Bus (OSB) flows

Ever wondered how you can increase the understandability and the maintainability of your OSB message flows in a Proxy Service?

As you know, a message flow in OSB consists of different actions. Unfortunately these actions are just labeled according to the action type, so for example you can have many Assign, Validate, Service Callout, … actions, like shown in the flow below when using Oracle Workshop for WebLogic:

message-flow

These actions can be wrapped inside the Stage, to show a group of actions belonging together. Unfortunately the actions itself can not have custom labels. This is different in BPEL, where the readability of a BPEL flow can be easily increased by using some good names for the different BPEL activities.

OSB does not allow that. But each OSB action can have a comment, which is then shown as a tooltip in the Oracle Workshop for WebLogic, like shown below:

message-flow-with-comment

By just hovering with the mouse over the icon of one action, the comment is shown in the tooltip and can help to better understand about the responsibility of each single action in the flow.

A comment can be added via the Properties tab of each action, like shown below:

message-flow-properties

The comments are also visible when viewing the message flow in the OSB console

message-flow-in-console. 

I just found out about that “feature” a couple of weeks ago and will now definitely use more comments in my message flows!

ODTUG Kaleidoscope 2010 – Abstract Accepted

Good news for me today! I received an email telling that my abstract on Testing SOA Suite 11g Systems has been accepted. I’m honoured and looking forward to present at the ODTUG Kaleidoscope 2010 conference.

Here is the abstract I submitted:

Best Practices for testing SOA Suite 11g based systems
The purpose of testing in general is to assess applications quality. Many approaches existing for traditional software systems can be adapted or even reused for service-oriented systems. Service-oriented testing has many similarities with component-based testing.
Oracle SOA Suite 11g offers out of the box support for testing BPEL and Mediator services. But is this enough? How can we test services which are dependent on external services not available at testing time? Is there an efficient way to mock these services? This session we will present solutions and best practices for testing service-oriented systems based on SOA Suite 11g platform and demonstrate how testing can be improved by adding some 3rd party products to Oracle SOA Suite, like soapUI.

See you in Washington D.C. next year!

 

My two DOAG presentations now available in English

I got asked for a translated version of the DOAG presentations (which are in german) announced here couple of days ago. Today I finished the translation and uploaded both of them to my slideshare profile:

I will upload some more presentations to slideshare in the future.

I’m in hospital

Last Sunday I had an accident playing icehockey. Now I’m in hospital with a broken foot 😦  Because of that, I had to cancel the SOA bootcamp in Geneva of next week. A new date will be announced soon.

My injury also means, that I have to stay at home for the coming weeks. So I will have some time to do what I always had in mind but never had the time, like reading some books, writing articles or blog entries :-). So stay tuned!