November 16, 2009

SCA Spring C&I component - a small tutorial ..

This is the "follow up" post from Preview feature: SCA Spring C&I support, this time with a tutorial.

You can find it at
http://www.oracle.com/technology/products/soa/soasuite/demos/scalight/springcomponentbasedemo.html

Enjoy. I am curious about your comments & ideas for enhancements.

November 14, 2009

"Inside the soa manifesto" - podcast

Our Rob Rhubart from the Oracle Technology Network invited Dave Chappel and me to shed some light and insights from coming up with the manifesto.

The first part of the podcast, can be found here.

Read the whole story on Robert's archbeat

Enjoy

November 12, 2009

PS1: JDeveloper SOA designer bug - hanging expression builder

Unfortunately we have found a (meanwhile confirmed) bug, that manifests itself in completely blocking your jdeveloper UI due to a race condition between two threads).

This happens if you use the expression builder inside a bpel process, and type a part of an expression, and then use ctrl+space to complete it. Once you start filling in the needed info (e.g. partname), jdev will suddenly block (completely).

Bug 9099332 was filed for this.
Workaround: in jdeveloper -> Tools / preferences / SOA -> uncheck validate expression

November 10, 2009

Preview feature: SCA Spring C&I support

As part of the new release, we also added support for Spring components.

The idea is to give the developer full Java support, and a powerful IOC container. Only thing needed, annotate your beans, and wire them on composite level.

This presents a few interesting challenges, especially around xml -> java and back serialization. As most SOA Suite users know, most the things you can do, are based on xml, via WSDL (e.g. BPEL & Mediator). With the spring support we also added the notion of <interface.java> for binding.ejb and implementation.spring

<?xml version="1.0" encoding="windows-1252" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca">
       
  <!--
    The below sca:service(s) corresponds to the services exposed by the 
    component type file: SpringPartnerSupplierMediator.componentType
  -->  
       
  <sca:service name="IInternalPartnerSupplier"
        target="InternalPartnerSupplierMediator"
        type="com.otn.sample.fod.soa.internalsupplier.IInternalPartnerSupplier"/>

<!-- the partner supplier mediator bean with the ejb -->
<bean id="InternalPartnerSupplierMediator"
class="com.otn.sample.fod.soa.internalsupplier.InternalSupplierMediator"
scope="prototype">
<!-- inject the external partner supplier bean -->
<property name="externalPartnerSupplier"
ref="IExternalPartnerSupplierService"/>
<!-- inject the quoteWriter -->
<property name="quoteWriter" ref="WriteQuoteRequest"/>
</bean>

<!-- declare local reference, that are wired outside -->
<sca:reference name="IExternalPartnerSupplierService"
type="com.otn.sample.fod.soa.externalps.IExternalPartnerSupplierService"/>

<sca:reference type="com.oracle.xmlns.Write_ptt"
name="WriteQuoteRequest"/>

</beans>

Here is how it looks like in the composite editor

11g_spring_component.jpg

Note:
In order to get the spring designer, and component - go to $JDeveloper_HOME/integration/seed/soa/configuration and open soa-config.xml. Search for ${SPRING_COMPONENT_NAME_L} and remove the xml comments (<!-- -->) around it. Restart JDeveloper :-).

Happy bean hunting .. I'll post a quick how-to shortly, trying to find space for my viewlet ..

Oracle SOA Suite 11g R1 Patchset 1 (aka 11.1.1.2.0) has been released

You can get it at http://www.oracle.com/technology/software/products/middleware/index.html

Amongst many bug-, and performance-related fixes - we also added quite a few significant preview features (e.g resequencing, spring support, and others).

Please note that the role of preview features is to elicit user feedback on product directions. Preview features cannot be used in production and Oracle will not provide any support for them. In addition there is no commitment that a preview feature will ever get productized and supported in a later release.

However we will do our best to help via OTN SOA forums when people run into issues with those.

October 25, 2009

Thoughts on the SOA Manifesto

During the 2nd international SOA Symposium in Rotterdam, I was invited to participate in a working group to define what would become known as the SOA Manifesto. Certainly a big honor to be part of this group, but with the little time we had - a lot work would lay ahead.

Reflecting on the last days - it was an experience, a lot of heated up discussions, extremely strong & powerful arguments, the 'fresh air breaks [Kudos Steve]', and what was most impressive, an immediate common understanding of what service orientation and SOA is about - the business, everything else is second.

On a side note: All the people involved in this have spent massive amounts of time with customers, and helped implementing strategic, sustainable SOAs all over the world. Hence the last thing one can expect is to read terms likeESB / one can buy SOA / and what not in there. If you waited for that you will be disappointed.

The whole manifesto can be found at http://www.soa-manifesto.org/.

Here is the value system we came up with, which stands at the center of our beliefs when it comes to SOA.

Business value over technical strategy
Strategic goals over project-specific benefits
Intrinsic interoperability over custom integration
Shared services over specific-purpose implementations
Flexibility over optimization
Evolutionary refinement over pursuit of initial perfection

That is, while we value the items on the right, we value the items on the left more.

I plan to add commentary over time, but here is the first set.

a) Generating sustainable business value: The notion of service is derived from capability, which should be directly linkable to a business requirement. Implementing fancy technology is cool, and solid technical strategy important. But if one stands against the other, pick what generates business value

b) Strategic goals: While for many initiatives a quick win is key to get them started, commonly referred to as guerrilla SOA - we should never loose the focus on the strategy and the long term goals set to make it happen. A tactical quick win results way to often in throw away code.

c) Intrinsic interoperability: I remember Anne and me having interesting arguments over this one, likely English not being my mother tongue helped this. The key is to create services that allow for integration by their very nature. This can be accomplished through exposed protocols that everyone can understand, yet driven much further by a common data format. At that point reassembling does not require changes to the underlying communication architecture, and only new services are added.

d) Shared services: While we value (custom) specific purpose implementation, the creation of shared (that is [re]usable) services takes precedence. We know that this is a journey, and it introduces a need for governance, service ownership and a thought through concept of versioning.

e) Flexibility: While we value the need and push for optimization, flexibility comes first, but is a carefully weighted trade-off. With loose-coupling on the implementation / communication protocols - speed in fact might go down, while the ability to recompose / switch implementation will go up.

f) Evolutionary refinement : Two many people strive for initial perfection, very much waterfall centric rather than allowing for continuous refinement. This value compared with adapting / refining based on real world usage is targeted towards start small (yet wisely) rather than with a big bang.

Now what do these values mean for you? They, including the guiding principles, should help you to make the hard decisions and serve as reminder, guiding path throughout the implementation.

Stefan has added a much longer list of thoughts and commentary, which you can read here.

We look forward to comments and thoughts. If you want to become a signatory, you can do this here.

October 16, 2009

Getting started with Oracle SOA Suite 11g - a review..

Lately a few folks from our team have published an edited version of the internal SOA Suite 11g foundation training which was rolled out all over the world, in more than 30 locations, and covers the major pieces and technologies we are shipping as a unified platform.

http://www.packtpub.com/getting-started-with-oracle-soa-suite-11g-r1/book

Heidi and her team have done a tremendous job to structure the labs and hands-on exercises in a didactic, explanatory way - with solutions all the way through. This way the book serves not just as a tutorial, but also as a reference bible when it comes to implementation of specific features and concepts.

Certainly worth reading.

October 15, 2009

OOW 2009 - review ..

After four days (and nights) of Open World, talking, demoing and talking more - it's the first day back at the office, and time for a resume.

Of all the sessions I did this year with various colleagues the one I enjoyed most was the talk about SOA Suite 11g's architecture together with Greg, who heads our SOA engineering teams.

In case you missed it, two ACE directors (Hajo and Torsten) blogged about it
here and here.

In case you missed us at the demo grounds, or questions are still not answered, just post them here, I promise fast help.

October 10, 2009

Oracle Open World 2009 - Meet the SOA team ..

More products, more demos, more wows, more everything - welcome to Open World 2009.

The SOA team will be all around, for example


  • at the demo pods (2628) - where you can meet Product Management and Engineering.

  • doing hands on labs (S311683, HOL: Build, Test, and Manage your own Oracle SOA Suite 11g composite application) - where you can discover the power of the platform yourself

  • and in many focused sessions

Personally I'll do four sessions together with fellow colleagues (from engineering, pm and the famous A-Team), and will be around at the demo pod

  • S308034, An Architect's View of the New Features of Oracle SOA Suite 11g Release 1, 12-OCT-09, 10:15-11:15 Hilton Hotel Imperial Ballroom B;
    Greg Pavlik and me will talk about underlying concepts of the 11g SOA platform, power user features highlight advanced techniques, and an outlook of where we want to go with the platform
  • S309684, Monitoring, Administering, and Troubleshooting Oracle SOA Suite 11g, 12-OCT-09, 14:30 - 15:30 Hilton Hotel Yosemite A,
    Most popular over the last years have the troubleshooting sessions bean, and this year it's back with 11g - Samrat, performance / HA guru (formerly BEA), Deepak from the A-Team and me will walk you through the nitty gritty details, explain threading models, and showcase the most important tuning knobs for SOA Suite
  • S309408, Best Practices for the BAM-BPEL Sensor Framework in Oracle SOA Suite, 12-OCT-09, 16:00-17:00 Hilton Hotel Yosemite A;
    Payal Srivastava from our team and me will talk about best practices and new features when it comes to SOA / BAM integration, and Ned from Ross, will tell the story of what Ross Stores did with BAM
  • S308618, The Service-Result-Cache Pattern: Using a Data Grid in the SOA Tier, 13-OCT-09, 14:30-15:30 Hilton Hotel Yosemite A;
    Our famous David Chappell, and me will talk about Service result caching, what it is, and what you can do with it - and lastly, where you find it in the platform. Not to forget, a very compelling use-case of SRC told by one of our customers

If you want to search for all the soa sessions - go to http://www.eventreg.com/cc221_new/newCatalog.jsp and put SOA as tag.

If you are around, come by and say hello..

August 24, 2009

SOA Suite 11g - Transaction(s) & boundaries; Part Two

Here is the second post - this time on one-way invocations:

Usually a one way invocation (with a possible callback) is exposed in a wsdl as below


<wsdl:operation name="process">
<wsdl:input message="client:OrderProcessorRequestMessage"/>
</wsdl:operation>

This will cause the bpel engine to split the execution into two parts. First, and always inside the caller transaction, the insert into the dlv_message table (in 10.1.3.x that is into the inv_message), and secondly the transaction & new thread that executes the workitems, and creates a new instance.

This has several advantages in terms of scalability - because the engine's threadpool (invoker threads) will execute when a thread is available. However, the disadvantage is that there is no guarantee that it will execute immediately.

If one needs to have a sync-type call based on a one way operation - then they can use onewayDeliveryPolicy, which is a forward port of deliveryPersistPolicy in 10.1.3.

This property can be set by specifying bpel.config.oneWayDeliveryPolicy in a bpel component of composite.xml. Possible values are "async.persist", "async.cache" and "sync". If this value is not set in composite.xml, engine uses the oneWayDeliveryPolicy setting in bpel-config.xml

async.persist => persist in the db
async.cache => store in an in-memory hashmap
sync => direct invocation on the same thread

Below is the matrix based on the usecase described in my last post (here).

onewayDeliveryPolicy!=sync (default, callee runs in separate thread/treansation)

throw any fault
caller doesn't get response because message is saved in delivery service. The callee's transaction will rollback if the fault is not handled.

throw bpelx:rollback
caller doesn't get response because message is saved in delivery service. It will rollback on unhandled fault.

-------
onewayDeliveryPolicy=sync, txn=requriesNew (callee runs in the same thread, but different transaction)

throw any fault
caller gets FabricInvocationException. Callee transaction rolls back if the fault is not handled.

throw bpelx:rollback
caller gets FabricInvocationException. Callee transaction rolls back.

-------
onewayDeliveryPolicy=sync, txn=required (callee runs in the same thread and the same transaction)

throw any fault
Callee faulted. Caller gets FabricInvocationException. Caller has a chance to handle the fault.

throw bpelx:rollback
whole transaction rollback.