Oracle SOA Tips & Tricks - DOAG Deutsche ORACLE ... · Oracle SOA Tips & Tricks . raastech.com ©...
Transcript of Oracle SOA Tips & Tricks - DOAG Deutsche ORACLE ... · Oracle SOA Tips & Tricks . raastech.com ©...
Ahmed Aboulnaga Technical Director Raastech
Oracle SOA Tips & Tricks
© Raastech, Inc. 2013 | All rights reserved. Slide 2 of 52 raastech.com
About Raastech
Systems integrator founded in 2009
Headquartered in the Washington DC area
Specializes in Oracle Fusion Middleware
Oracle Gold Partner & Reseller
Certified staff in multiple disciplines
OCE, OCA, ITIL, CISSP, PMP, etc.
Continued contributions to the technology community
Sponsor and volunteer of numerous users groups
Ongoing publishing of books, articles, whitepapers, and blogs
Regular presenters at major conferences
© Raastech, Inc. 2013 | All rights reserved. Slide 3 of 52 raastech.com
About Me
Ahmed Aboulnaga
15+ years of Oracle middleware experience
Focus on Oracle Fusion Middleware, with emphasis on SOA, identity management, and portal technologies
Oracle ACE, OCE, OCA
Author / Presenter / Blogger
President of WMOUG / EGOUG
© Raastech, Inc. 2013 | All rights reserved. Slide 4 of 52 raastech.com
What is this presentation about?
For the experienced Oracle SOA technologist
Random tips and tricks surrounding the following product sets:
SOA Suite 11g
BAM 11g
OSB 11g
OWSM 11g
OSR 11g
Goal is to share things you may never have heard about or come across
© Raastech, Inc. 2013 | All rights reserved. Slide 5 of 52 raastech.com
Agenda
1. A lot of random stuff
© Raastech, Inc. 2013 | All rights reserved. Slide 6 of 52 raastech.com
Agenda
1. BAM stuff
2. OSB stuff
3. SOA Suite stuff
4. WebLogic stuff
5. Integration stuff
6. OSR stuff
© Raastech, Inc. 2013 | All rights reserved. Slide 7 of 52 raastech.com
Agenda
1. BAM stuff
2. OSB stuff
3. SOA Suite stuff
4. WebLogic stuff
5. Integration stuff
6. OSR stuff
© Raastech, Inc. 2013 | All rights reserved. Slide 8 of 52 raastech.com
Understand what BAM is designed for
Not a data repository… use OBIEE instead
Not intended for large amounts of data (think millions of records per data object)
Our mistake:
Instead of composite sensors, dumped huge amount of sensor data into BAM
Why is this a problem?
BAM unable to handle extremely large loads effectively
BAM reports are exceptionally weak
Who nowadays develops web apps that run only in IE?
Best used for aggregated data that needs to be reported against in near real-time
© Raastech, Inc. 2013 | All rights reserved. Slide 9 of 52 raastech.com
Weak BAM reporting capabilities
No user sorting
No field expansion
Cumbersome navigation
Weak search capabilities
© Raastech, Inc. 2013 | All rights reserved. Slide 10 of 52 raastech.com
BAM runs only on IE
Yes, I know the history of BAM… but still unacceptable
© Raastech, Inc. 2013 | All rights reserved. Slide 11 of 52 raastech.com
Don’t forget about BAM purging
People tend to forget about purging BAM Data Objects
If data object is based on a database table:
Simply create a scheduled PL/SQL package to purge the data
Otherwise:
Use BAM Alerts
© Raastech, Inc. 2013 | All rights reserved. Slide 12 of 52 raastech.com
Avoid BAM RMI Adapter
BAM Adapter comes in 2 flavors; RMI and SOAP
© Raastech, Inc. 2013 | All rights reserved. Slide 13 of 52 raastech.com
Avoid BAM RMI Adapter
BAM Adapter comes in 2 flavors; RMI and SOAP
In your code:
eis/bam/rmi
eis/bam/soap
Avoid RMI because:
It is not as efficient as SOAP
Bug in BAM Adapter leads to BPEL threads not being released
© Raastech, Inc. 2013 | All rights reserved. Slide 14 of 52 raastech.com
Understanding BAM inBatch=‘Y’
The BAM Adapter property inBatch batches requests into batches (Could this sentence sound any more messed up?)
© Raastech, Inc. 2013 | All rights reserved. Slide 15 of 52 raastech.com
Understanding BAM inBatch=‘Y’
BAM Adapter reports ‘success’ 100% of the time, but
pushes the data as predetermined intervals
Works great, but if there is an error in a single BAM
record:
The entire batch fails
Unknown which record failed
Failure not always in SOA logs but sometimes in BAM logs
© Raastech, Inc. 2013 | All rights reserved. Slide 16 of 52 raastech.com
Understanding BAM inBatch=‘Y’
BAM UP
BAM Goes DOWN
SOA Suite UP
SOA Suite Goes DOWN
• Requests are batched in SOA • Invocations always success
• Requests are batched in SOA • Invocations always success • Limit to how much can be
batched
• Batched requests are lost • Both are down idiot!
© Raastech, Inc. 2013 | All rights reserved. Slide 17 of 52 raastech.com
Agenda
1. BAM stuff
2. OSB stuff
3. SOA Suite stuff
4. WebLogic stuff
5. Integration stuff
6. OSR stuff
© Raastech, Inc. 2013 | All rights reserved. Slide 18 of 52 raastech.com
OSB Summary
Pros
Stateless, so performance is superior
Caching, throttling, service virtualization
Can search indexes in payloads (if enabled)
Cons
Cannot reference MDS
Shared custom code required for DVM support
But cannot support multi-input DVMs
Severe limitations in transactional visibility, tracing, and metrics
WSDLs/XSDs must be copied locally
© Raastech, Inc. 2013 | All rights reserved. Slide 19 of 52 raastech.com
OSB vs. BPEL Performance
1000 transactions (OSB) = 3:32 minutes
1000 transactions (BPEL) = 10:19 minutes
OSB is superior in performance to BPEL (68% better)
Service
OSB Med OSB OSB Med
Service
BPEL Med Med BPEL Med
© Raastech, Inc. 2013 | All rights reserved. Slide 20 of 52 raastech.com
OSB vs. Composite Tracing
© Raastech, Inc. 2013 | All rights reserved. Slide 21 of 52 raastech.com
OSB Report Action
OSB performs 2x to 4x faster than BPEL (great!)
OSB sucks in terms of transactional visibility
Consider using the Report Action to capture SOAP
headers and SOAP bodies
Consider creating a web service to log key metadata
(e.g., think BPEL sensors)
© Raastech, Inc. 2013 | All rights reserved. Slide 22 of 52 raastech.com
OSB Report Action
Can filter by index
Header and body are displayed separately
Enabling header/body on both request/response is 4x slower
This is the only OSB functionality that is persisted
© Raastech, Inc. 2013 | All rights reserved. Slide 23 of 52 raastech.com
OSB Report Action
For all Proxy Services, in the request stage:
1. Add a Report action for $header
2. Add a Report action for $body
3. Specify at least one “Key Name” for both
4. Add the “…Request” string to the name and use the same
value from the body
© Raastech, Inc. 2013 | All rights reserved. Slide 24 of 52 raastech.com
Using JCA Adapters in OSB
OSB provides native adapters
JCA Adapters must be created in JDeveloper 11g
.JCA and .WSDL manually imported to OSB project
Not supported for all adapters (DB Adapter yes, FTP Adapter no)
© Raastech, Inc. 2013 | All rights reserved. Slide 25 of 52 raastech.com
OSB Caching
Result Caching (Coherence) on Business Service
To be used with data that is not frequently updated (e.g., product info)
Will not re-query backend until it has expired
15% to 25% performance improvement with DB Adapter
© Raastech, Inc. 2013 | All rights reserved. Slide 26 of 52 raastech.com
OSB on Exalogic – Problems
On OSB installations on Exalogic, the following problems
were experienced:
Client requests get a read time out error
The BEA-380000 error “Request Entity Too Large” appears in
the logs
OSB invocations retry multiple times every 5 minutes
OSB invocations invoke target service twice
© Raastech, Inc. 2013 | All rights reserved. Slide 27 of 52 raastech.com
OSB on Exalogic – Solution
For all Business Services
1. Under HTTP Transport Configuration
2. Set “Use Chunked Streaming Mode” to “Disabled”
For all Proxy Services
1. View Message Flow
2. Edit Route Node(s)
3. Check on “Quality of Service” and set it to “Exactly Once”
© Raastech, Inc. 2013 | All rights reserved. Slide 28 of 52 raastech.com
OSB Access to AIA Foundation Pack XPath Functions
1. Copy the AIA JAR from the SOA home to the OSB
server:
cp $MW_HOME/aia5/lib/aia.jar
$MW_HOME/Oracle_OSB1/config/xpath-functions
© Raastech, Inc. 2013 | All rights reserved. Slide 29 of 52 raastech.com
Securing OSB Services with OWSM
1. Click on the Proxy Service
2. Click on the “Policies” tab
3. Select “From OWSM Policy Store” and click “Add”
4. Select the policy “oracle/wss_username_token_service_policy”
5. Update, activate, and submit the changes
© Raastech, Inc. 2013 | All rights reserved. Slide 30 of 52 raastech.com
Securing OSB services with OWSM
6. When testing, add the following SOAP header to the envelope:
<soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://
docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-tk6qMWkQ5hl3Md2INvp16Q22"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>oratest</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-
profile-1.0#PasswordText">password123</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
© Raastech, Inc. 2013 | All rights reserved. Slide 31 of 52 raastech.com
Agenda
1. BAM stuff
2. OSB stuff
3. SOA Suite stuff
4. WebLogic stuff
5. Integration stuff
6. OSR stuff
© Raastech, Inc. 2013 | All rights reserved. Slide 32 of 52 raastech.com
Securing SOA services with OWSM
1. Navigate to the composite, scroll down, and click on the reference
2. Click on the “Policies” tab
3. Attach the policy “oracle/wss_username_token_service_policy”
© Raastech, Inc. 2013 | All rights reserved. Slide 33 of 52 raastech.com
Optimized calls if using ServiceURL
Ensure that URLs used for composite-to-composite invocations are
identical to the setting in ServerURL
SOA Suite optimizes these calls (uses RMI internally)
© Raastech, Inc. 2013 | All rights reserved. Slide 34 of 52 raastech.com
Avoid Mediator Parallel Routing Rules
See this presentation for details why:
http://www.raastech.com/raastech/library/ Raastech_2013_Collaborate_SOASuite11gPerformance.pdf
Edit all “*.mplan” files for your asynchronous Mediator
operations and change the executionType as follows:
OLD: executionType="direct"
NEW: executionType="queued"
© Raastech, Inc. 2013 | All rights reserved. Slide 35 of 52 raastech.com
Consider 1-way BPEL Instead of Queues
Queues are great ways to
force asynchronicity of
your integration
But using 1-way BPEL
async invocations
achieves the same thing
No need to maintain a
queue; BPEL recovery
tables are used internally
BPEL
BPEL
© Raastech, Inc. 2013 | All rights reserved. Slide 36 of 52 raastech.com
Use MDS for all WSDLs
Consider ORAMDS instead of HTTP for composite-to-
composite invocations
Removes the composite loading dependency
(It’s still translated to an optimized call behind the scenes)
<reference name="AsyncStatus" ui:wsdlLocation="oramds:/apps/WSDLs/AsyncStatus.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/AsyncStatus#wsdl.interface(execute_ptt)"/>
<binding.ws location="oramds:/apps/WSDLs/AsyncStatus.wsdl"
port="http://xmlns.oracle.com/AsynStatus#wsdl.endpoint(AsyncStatus_ep/execute_pt)"
soapVersion="1.1“/>
</reference>
© Raastech, Inc. 2013 | All rights reserved. Slide 37 of 52 raastech.com
Agenda
1. BAM stuff
2. OSB stuff
3. SOA Suite stuff
4. WebLogic stuff
5. Integration stuff
6. OSR stuff
© Raastech, Inc. 2013 | All rights reserved. Slide 38 of 52 raastech.com
Singleton property with JMS Topics
For inbound JMS Adapter from a topic, use the
“singleton” property to avoid consumption of multiple
messages in a cluster
For more information:
<service name="JMSConsume" ui:wsdlLocation="JMSConsume.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/jms/JMS#wsdl.interface(Consume_ptt)"/>
<binding.jca config="JMSConsume_jms.jca">
<property name="singleton">true</property>
</binding.jca>
</service>
Single message consumption from distributed topic in WebLogic Server 11g http://blog.raastech.com/2012/04/single-message-consumption-from.html
Understanding the "singleton" property with WebLogic JMS topics http://blog.raastech.com/2012/07/understanding-singleton-property-with.html
© Raastech, Inc. 2013 | All rights reserved. Slide 39 of 52 raastech.com
Avoid Distributed Topics
Not possible to have truly highly available JMS destinations
Expectation:
1. With 1 consumer, if code is deployed to all 4 nodes of the cluster, the message is
consumed only once
2. Message is equally available to all nodes of the cluster, so if any node fails, the
message is still available and can be consumed without manual intervention
Reality:
Point #1 is not possible if you set the forwarding policy to “Replicated”
Point #2 is not possible if the destination's forwarding policy is set to “Partitioned”
Since these are the only two options available, unable to satisfy both
requirements
See http://blog.raastech.com/2012/07/5-reasons-why-oracle-weblogic-server.html
© Raastech, Inc. 2013 | All rights reserved. Slide 40 of 52 raastech.com
Agenda
1. BAM stuff
2. OSB stuff
3. SOA Suite stuff
4. WebLogic stuff
5. Integration stuff
6. OSR stuff
© Raastech, Inc. 2013 | All rights reserved. Slide 41 of 52 raastech.com
Direct Binding in OSB? Yes or No?
1. Edit the business service
2. For Protocol, select “soa-direct”
3. For Load Balancing Algorithm, select “round-robin”
4. For Endpoint URI, use the format shown in the screenshot
© Raastech, Inc. 2013 | All rights reserved. Slide 42 of 52 raastech.com
Direct Binding in SOA? Yes or No?
1. Edit the proxy service
2. Under Transport Configuration, modify Protocol to “sb”
3. In the OSB proxy service, Export WSDL via the icon and save it to your local file system
4. Extract the contents of the JAR file to your local file system
5. Create a Direct Binding reference
Enter a name
Ensure that Type is a “Reference”
Ensure that Reference Target is “Oracle Service Bus”
Manually import the WSDL and all referenced WSDLs/XSDs into the project
The Reference Binding Details will be automatically populated
© Raastech, Inc. 2013 | All rights reserved. Slide 43 of 52 raastech.com
Direct Binding in SOA? Yes or No?
© Raastech, Inc. 2013 | All rights reserved. Slide 44 of 52 raastech.com
Direct Binding? Yes or No?
No
Avoid direct binding between SOA Suite and OSB
SOAP is a better performant protocol than RMI
© Raastech, Inc. 2013 | All rights reserved. Slide 45 of 52 raastech.com
PassThroughHeader Property
Do you need to use the “passThroughHeader” property?
Allows elements in the header to pass from one
composite to another
Otherwise, elements in the header that are not explicitly
referenced will be dropped before they are passed to the
next composite.
<component name="UpdateCustomer">
<implementation.mediator src="UpdateCustomer.mplan"/>
<property name="passThroughHeader">true</property>
</component>
© Raastech, Inc. 2013 | All rights reserved. Slide 46 of 52 raastech.com
Agenda
1. BAM stuff
2. OSB stuff
3. SOA Suite stuff
4. WebLogic stuff
5. Integration stuff
6. OSR stuff
© Raastech, Inc. 2013 | All rights reserved. Slide 47 of 52 raastech.com
Why consider a service registry?
Over time, most organizations encounter the following
problems:
No central service registry
Creation of duplicate/redundant services
Difficult to obtain interface specifics on existing services
© Raastech, Inc. 2013 | All rights reserved. Slide 48 of 52 raastech.com
Oracle Service Registry
© Raastech, Inc. 2013 | All rights reserved. Slide 49 of 52 raastech.com
Avoid Oracle Service Registry
Do not use at all
Was a hot topic 10 years ago, not so much nowadays
Consider Oracle Enterprise Repository (OER)
© Raastech, Inc. 2013 | All rights reserved. Slide 50 of 52 raastech.com
Agenda
1. BAM stuff
2. OSB stuff
3. SOA Suite stuff
4. WebLogic stuff
5. Integration stuff
6. OSR stuff
7. Summary
© Raastech, Inc. 2013 | All rights reserved. Slide 51 of 52 raastech.com
Summary
BAM: Use it for what it is intended for
OSB: Superior performance, poor visibility
SOA Suite: A lot of things to consider; learning about all
aspects of the products takes time and experience
WebLogic Server: Avoid JMS topics
Integration: Avoid direct binding
OSR: Avoid altogether
© Raastech, Inc. 2013 | All rights reserved. Slide 52 of 52 raastech.com
Contact Information
Ahmed Aboulnaga
Technical Director