Showing posts with label SOASuite11G. Show all posts
Showing posts with label SOASuite11G. Show all posts

Saturday, August 17, 2013

Book review- Oracle SOA Suite 11g Performance Tuning Cookbook



This book covers almost all aspects of the performance tuning starting from the weblogic server to different SOA components. The highlight being detailed steps on different options available to analyze and troubleshoot the issues.
The modularization of the book is really good. The book starts with the soa infrastructure, listing the different options of monitoring the JVM’s, SOA suite and different components like bpel, rules, mediator which are actually really good. BPEL and BPMN tuning tips are already available as part of the performance guides/blogs ,but the authors have captured that as well in this book, which is good in one way so as it helps to bring all the performance tuning options together. Monitoring SOA suite, JVM Garbage collections, Platform tuning are very well covered in the book.  It was good to learn we could leverage multiple available options mentioned in the book  to monitor/troubleshoot different JVM/server issues.

          The book also covers the tuning aspects from process perspective as well as at environment level with equal importance. I recommend this book as a must read for SOA server Administrators as well as SOA Consultants, this book will help you to get most out of the SOA infrastructure. The book will make an interesting read for those people who love to take it the next level.

Link to the book @ http://bit.ly/12lrajU

Thursday, August 1, 2013

Cook book on Oracle SOA Suite 11g Performance Tuning


Currently reading a cook book on Oracle SOA Suite 11g Performance Tuning by Matt Brasier, Nicholas Wright. Interesting read as it brings together all the performance tuning/monitoring options under one roof. You can get it @ http://bit.ly/12lrajU

Thursday, April 11, 2013

Runtime invocation failing with .__OAUX_GENXSD_.TOP.XSD Error /duplicate elements in XSD



Recently I was working with BPEL process which had multiple service invocations and my job was to enhance it by adding some OSB invocations. When I started modifying the code for new service invocations and WSDL modifications, the process stopped compiling due to the .__OAUX_GENXSD_.TOP.XSD. It looked bit odd, one of the main issues was due to some shared XSD’s and some services had included the XSD’s some were importing it, some had different XSD implementations for same namespace. So after consolidating the entire included schemas and existing schemas the process started working.
The biemond blog was helpful. 
The problem I faced was when I starting testing, I had the location replaced at runtime and it started failing with the same .__OAUX_GENXSD_.TOP.XSD error. This was new to me as I thought it will be going through since all the wsdls will be looked up at compilation time. Each invocation will be different. But it isn’t so, so finally I had to tweak the abstract wsdl to make it concrete (by adding service tags) composite.xml and config plan for deployment.
Error stacktrace
Exception: Can not build schema 'http://geo.com/commons/schema/type' locate
d at 'http://geo.com/commons/schema/type.__OAUX_GENXSD_.TOP.XSD' [Cause=Can
not build schema 'http://geo.com/commons/schema/type' located at 'http://geo
.com/ commons/schema/type.__OAUX_GENXSD_.TOP.XSD']

Reference WSDL (named in location of composite.xml)
Add service tags in wsdl definitions and have a dummy address, which can be updated during deployment.




composite.xml
Add the the property endpointURI which will hold the runtime URI (without the ?wsdl)
Depoyment Plan(soa config plan)
In the deployment plan ,don’t update the location attribute to the runtime location, keep it your local wsdl.Update the endpointURI property to the environment specific URI.
Add separate search replace for the wsdl and update the location value to the environment specific URI
Environment is 11g PS4
Hope it helps

Monday, February 18, 2013

Error handling using EDN-reuse code -Soa 11g


In my project we had used EDN event delivery network in SOA 11g for error handling.
We created an Error event and with a error message structure .
Eg: HelloPlatformErrorEvent, so I will be listing down the entries that you will need to implement error handling across the processes .The code is reusable and will take care skeletal common error handling.
The good thing with using EDN in errorhandling is we can have multiple consumers consuming the event and do different processing. Since EDN is fully supported in SOA 11g , the overheads of publish and subscribe /configurations will not be bothering us. We need to create an event and consumers can receive events .So if we can have multiple consumer bpel’s each doing different functionality ,one can write a file,one process writing to DB, once sending notifications. So we have plugged out the error handling/logging mechanism out of the processes. Consumers can be enables/disabled separately based on requirement.

Steps for reusing the event driven error event codes

Here for example the
event  :  HelloPlatformErrorEvent,
edl file : HelloPlatformErrorEvent
Message structure :HelloPlatformErrorEvent.xsd
Since it’s used across composites, the file will uploaded/accessed from MDS.

Composite.xml

·         Add to imports

<import namespace="http://schemas.oracle.com/events/edl/HelloPlatformErrorEvent"
          location="oramds:/apps/HelloPlatform/Events/edl/HelloPlatformErrorEvent.edl"
          importType="edl"/>

·         Add to component (bpel)
    <business-events>
      <publishes xmlns:pub1="http://schemas.oracle.com/events/edl/HelloPlatformErrorEvent"
                 name="pub1:HelloPlatformErrorEventMessage"/>
    </business-events>

. bpel file

·         Add to namespaces
         xmlns:bperrmsg="http://xmlns.oracle.com/HelloPlatform/ErrorMessage/V1"
         xmlns:errorEvent="http://schemas.oracle.com/events/edl/HelloPlatformErrorEvent"
·         Add to imports
<import namespace="http://xmlns.oracle.com/HelloPlatform/ErrorMessage/V1"
          location="oramds:/apps/HelloPlatform/Events/schema/HelloPlatformErrorEvent.xsd"
          importType="http://www.w3.org/2001/XMLSchema"/>

·          Add to Variables
<variable name="PublishHelloPlatformErrorEvent"
              element="bperrmsg:HelloPlatformErrorEventMessage"/>
·         Add inside catchall
The assign values will vary based on your message structure
       
<sequence name="ErrorSequence">
  <assign name="assignErrorEvent">
          <copy>
            <from>ora:getFaultName()</from>
            <to>$PublishHelloPlatformErrorEvent/bperrmsg:ErrorDetails/bperrmsg:ErrorCode</to>
          </copy>
          <copy>
            <from>ora:getConversationId()</from>
            <to>$PublishHelloPlatformErrorEvent/bperrmsg:InstanceDetails/bperrmsg:ConversationId</to>
          </copy>
          <copy>
            <from>ora:getInstanceId()</from>
            <to>$PublishHelloPlatformErrorEvent/bperrmsg:InstanceDetails/bperrmsg:InstanceId</to>
          </copy>
          <copy>
            <from>ora:getCompositeName()</from>
            <to>$PublishHelloPlatformErrorEvent/bperrmsg:InstanceDetails/bperrmsg:CompositeName</to>
          </copy>
          <copy>
            <from>ora:getProcessId()</from>
            <to>$PublishHelloPlatformErrorEvent/bperrmsg:InstanceDetails/bperrmsg:ProcessName</to>
          </copy>
          <copy>
            <from>ora:getFaultAsString()</from>
            <to>$PublishHelloPlatformErrorEvent/bperrmsg:ErrorDetails/bperrmsg:ErrorText</to>
          </copy>
          <copy>
            <from>'Error occured in TaskExecutionFetchPendingTasksProcess'</from>
            <to>$PublishHelloPlatformErrorEvent/bperrmsg:ErrorDetails/bperrmsg:ErrorMessage</to>
          </copy>
          <copy>
            <from>true()</from>
            <to>$PublishHelloPlatformErrorEvent/bperrmsg:ErrorHandlerOptions/bperrmsg:PersistMsgOnDB</to>
          </copy>
          <copy>
            <from>true()</from>
            <to>$PublishHelloPlatformErrorEvent/bperrmsg:ErrorHandlerOptions/bperrmsg:SendNotification</to>
          </copy>
        </assign>       
<invoke name="invokePublishHelloPlatformErrorEvent"
                bpelx:eventName="errorEvent:HelloPlatformErrorEventMessage"
                inputVariable="PublishHelloPlatformErrorEvent"
                bpelx:invokeAsDetail="no"/>
        <exit name="ProcessExit"/>
      </sequence>
   
That’s it for today. Thanks to Ram,Ravi for the coming up this model.