RSS

SOA Suite PS5 (11.1.1.6) available for download

Reblogged from SOA Community Blog:

Click to visit the original post

our latest Version of SOA Suite 11R1 PS5 (11.1.1.6) is available for download at OTN. Many new features include: Make sure you send us your feedback at http://twitter.com/soacommunity @soacommunity! The complete release of Oracle Fusion Middleware 11g R1 (11.1.1.6.x). includes the following products: Oracle WebLogic Server 11g R1 (10.3.6) Oracle SOA Suite 11g R1 (11.1.1.6.0) Oracle Business Process Management 11g R1 (11.1.1.6.0) Oracle Complex Event Processing 11g R1 (11.1.1.6.0) Oracle Service Bus 11g R1 …

Oracle SOA Suite 11gR1 PS5 (11.1.1.6) released and available for download on OTN. See the SOA Community blogpost for a list of new features.
 
Leave a comment

Posted by on 02/23/2012 in OSB, SOA Suite

 

Tags: ,

BPM Suite PS5 1(1.1.1.6) available for download

Reblogged from SOA Community Blog:

Click to visit the original post

our latest Version of BPM Suite 11R1 PS5 (11.1.1.6) is available for download at OTN: New features include: BPM Workspace  Enhancements BPM Workspace Audit trail table enhancements Business user friendly rendering of audit trail table Additional columns to show inputs, outputs, business status, task outcome, task assignees, links to Comments & Attachments Attributes to show time spent, time remaining, SLA violation etc Composer Enhancements Hide Data Association and Deployment options based on …

Oracle BPM Suite 11gR1 PS5 (11.1.1.6) released and available for download on OTN. See the SOA Community blogpost for a list of new features.
 
Leave a comment

Posted by on 02/23/2012 in BPM

 

Tags:

Weblogic EJB security roles

In my earlier blog I showed an example for a Oracle Service Bus custom reporting provider EJB. During deployment you might run into the next error/warning:

<Warning> <EJB> <BEA-010061> <The Message-Driven EJB: QueueMessageDrivenEJBBean is unable to  connect to the JMS destination: wli/reporting/jmsprovider/queue. The Error was: javax.naming.NoPermissionException: User <anonymous> does not have permission on wli.reporting to perform lookup operation.

The reason for this is the fact that your EJB wants to connect to the queue wli/reporting/jmsprovider/queue where unauthorised access is prohibited. If we check the queues security policy (select queue -> security -> policies) we can see that only 2 roles have authorisation:

So we can change the policy on the queue (not to be advised) or make sure our EJB uses proper authentication. The most basic version could be:

basic weblogic-ejb-jar.xml


<?xml version="1.0" encoding="UTF-8"?>
<!--weblogic-version:10.3.5-->
<wls:weblogic-ejb-jar xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.2/weblogic-ejb-jar.xsd">

<!-- this 1st segment is not necessary, if no run-as-principal-name is specified in
 run-as-role-assignment or in bean specific run-as-principal-name tag, then EJB container
 chooses first principal-name in the security-role-assignment below and uses that
 principal-name as run-as-principal-name -->
 <wls:weblogic-enterprise-bean>
 <wls:ejb-name>CustomOsbReportProvider</wls:ejb-name>
 <wls:run-as-principal-name>weblogic</wls:run-as-principal-name>
 </wls:weblogic-enterprise-bean>

<wls:security-role-assignment>
 <wls:role-name>adminsEJB</wls:role-name>
 <wls:principal-name>weblogic</wls:principal-name>
 </wls:security-role-assignment>
</wls:weblogic-ejb-jar>

basic ejb-jar.xml


<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
<display-name>CustomOsbReportProvider </display-name>

<enterprise-beans>
 <message-driven>
 <ejb-name>CustomOsbReportProvider</ejb-name>
 <ejb-class>nl.rubix.CustomOsbReportHandler</ejb-class>
 <transaction-type>Container</transaction-type>
 <security-identity>
 <run-as>
 <description>EJB role used</description>
 <role-name>adminsEJB</role-name>
 </run-as>
 </security-identity>
 </message-driven>
 </enterprise-beans>

<ejb-client-jar>CustomOsbReportProviderClient.jar</ejb-client-jar>
</ejb-jar>

However with the help of the original JMSReportingProvider.jar it’s fairly easy to create a more elegant version:

deluxe weblogic-ejb-jar.xml

</pre>
<wls:weblogic-ejb-jar xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.2/weblogic-ejb-jar.xsd">
 <!--weblogic-version:10.3.5-->

<wls:weblogic-enterprise-bean>
 <wls:ejb-name>CustomOsbReportProvider</wls:ejb-name>
 <wls:message-driven-descriptor>
 <wls:pool>
 <wls:max-beans-in-free-pool>100</wls:max-beans-in-free-pool>
 <wls:initial-beans-in-free-pool>3</wls:initial-beans-in-free-pool>
 </wls:pool>
 <wls:destination-jndi-name>wli.reporting.jmsprovider.queue</wls:destination-jndi-name>
 <wls:max-messages-in-transaction>5</wls:max-messages-in-transaction>
 </wls:message-driven-descriptor>
 <wls:transaction-descriptor>
 <wls:trans-timeout-seconds>600</wls:trans-timeout-seconds>
 </wls:transaction-descriptor>
 <wls:run-as-principal-name>alsb-system-user</wls:run-as-principal-name>
 </wls:weblogic-enterprise-bean>

<wls:transaction-isolation>
 <wls:isolation-level>TransactionReadCommitted</wls:isolation-level>
 <wls:method>
 <wls:description>Ensure the container starts a ReadCommitted transaction</wls:description>
 <wls:ejb-name>CustomOsbReportProvider</wls:ejb-name>
 <wls:method-name>*</wls:method-name>
 </wls:method>
 </wls:transaction-isolation>
 <wls:disable-warning>BEA-010001</wls:disable-warning>

</wls:weblogic-ejb-jar>
<pre>

deluxe ejb-jar.xml


</pre>
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
 <display-name>CustomOsbReportProvider </display-name>
 <enterprise-beans>
 <message-driven>
 <description>Custom Reporting Provider for OSB</description>
 <ejb-name>CustomOsbReportProvider</ejb-name>
 <ejb-class>nl.rubix.CustomOsbReportHandler</ejb-class>
 <transaction-type>Container</transaction-type>
 <message-destination-type>javax.jms.Queue</message-destination-type>
 <activation-config>
 <activation-config-property>
 <activation-config-property-name>acknowledgeMode</activation-config-property-name>
 <activation-config-property-value>Auto-acknowledge</activation-config-property-value>
 </activation-config-property>
 </activation-config>
 <security-identity>
 <run-as>
 <description>EJB role used</description>
 <role-name>ALSBSystem</role-name>
 </run-as>
 </security-identity>
 </message-driven>
 </enterprise-beans>

 <assembly-descriptor>
 <container-transaction>
 <method>
 <ejb-name>CustomOsbReportProvider</ejb-name>
 <method-name>*</method-name>
 </method>
 <trans-attribute>Required</trans-attribute>
 </container-transaction>
 </assembly-descriptor>

 <ejb-client-jar>CustomOsbReportProviderClient.jar</ejb-client-jar>
</ejb-jar>
<pre>

References:

 
Leave a comment

Posted by on 02/22/2012 in Weblogic

 

Tags: , ,

Service Bus 11g Development Cookbook

Reblogged from SOA Community Blog:

  • Click to visit the original post

The Oracle Service Bus Development Cookbook is a book which contains more than 80 practical recipes to develop service- and message-oriented solutions on the Oracle Service Bus 11g. This cookbook is full of immediately usable recipes showing how to efficiently develop on the Oracle Service Bus. In addition to its cookbook style, which ensures the solutions are presented in a clear step-by-step manner, the explanations go into great detail, which makes it good learning material for everyone who has …

The Oracle Service Bus Development Cookbook as published on the Oracle SOA Community blog.
 
Leave a comment

Posted by on 02/20/2012 in Oracle, OSB

 

Tags: ,

The making of the Oracle Service Bus 11g Development Cookbook

Reblogged from Enjoy IT – SOA, Java, Event-Driven Computing and Integration:

Click to visit the original post

  • Click to visit the original post

Almost a year ago I started to think about writing a cookbook for the Oracle Service Bus (OSB). I first discussed it with Mischa Kölliker, a colleague at Trivadis and he was happy to join the team. Next I have used the Oracle SOA and E2.0 Partner Community Forum in March 2011 to talk to Edwin Biemond and Eric Elzinga, two well-known OSB experts and Oracle ACE colleagues. Gladly they were as enthusiastic as me about putting together a book with lot’s of recipes of how to use the Oracle Service Bus in …

Nice background story from Guido Schmutz, the mastermind behind the Oracle Service Bus development cookbook. :-)
 
Leave a comment

Posted by on 02/17/2012 in Oracle, OSB

 

Tags: ,

Oracle Service Bus logging & tracing III – Creating a Custom Reporting Provider

In my earlier blogpost explaining the Oracle Service Bus Report Action I already mentioned the fact that Oracle allows you to create a custom report provider. Quote:

If you do not wish to use the JMS Reporting Provider that is provided with your Oracle Service Bus installation, you can untarget it and create your own reporting provider using the Reporting Service Provider Interface (SPI). If you configure your own reporting provider for messages, no information is displayed in the Oracle Service Bus Administration Console. You must to create your own user interface.

Since the report action places a java object on an internal JMS queue named wli.reporting.jmsprovider.queue we can start building our own reporting provider from their.

I’ve created a simple EJB project as an example named it CustomOsbReportHandler:


package local.rubix;
import java.util.logging.Logger;

import javax.annotation.Resource;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.TextMessage;

import weblogic.logging.LoggingHelper;

import com.bea.wli.reporting.jmsprovider.runtime.ReportMessage;

@MessageDriven(mappedName = "wli.reporting.jmsprovider.queue",
 name = "CustomReportHandler")

public class CustomOsbReportHandler implements MessageListener
{

 @Resource private MessageDrivenContext mdc;

 public void onMessage(Message inMessage)
 {
 TextMessage msg = null;
 Logger logger = LoggingHelper.getServerLogger();
 logger.warning("=====================");
 logger.warning("MDB inMessage: " + inMessage);
 try
 {
 if (inMessage instanceof TextMessage)
 {
 msg = (TextMessage) inMessage;
 logger.info("MDB unexpected text message received: " + msg.getText());
 }
 else if (inMessage instanceof ObjectMessage)
 {
 ObjectMessage myObject = (ObjectMessage) inMessage;
 logger.warning("MDB ObjectClass: " + myObject.getObject().getClass());
 String str_inMessageClassName = myObject.getObject().getClass().getSimpleName();
 logger.warning("MDB ObjectName: " + str_inMessageClassName);
 if (str_inMessageClassName.equals("ReportMessage"))
 {
 logger.warning("MDB ReportMessage found");
 ReportMessage myReportMessage = (ReportMessage)myObject.getObject();
 logger.warning("MDB getMetadata: " + myReportMessage.getMetadata());
 logger.warning("MDB getStrPayload: " + myReportMessage.getStrPayload());
 logger.warning("MDB getXmlPayload: " + myReportMessage.getXmlPayload());
 logger.warning("MDB getBinPayload: " + myReportMessage.getBinPayload());
 }
 else
 {
 logger.warning("MDB NO ReportMessage");
 }
 }
 else
 {
 logger.info("MDB unknown message");
 }
 logger.warning("=====================");
 }
 catch (JMSException e)
 {
 e.printStackTrace();
 mdc.setRollbackOnly();
 }
 catch (Throwable te)
 {
 te.printStackTrace();
 }
 }

}

This project was build with WLS/OSB 11.1.1.5 and the project uses the following libs:

  • com.bea.alsb.reporting.impl.jar
  • com.bea.core.xml.xmlbeans_2.1.0.0_2-5-1.jar
  • org.eclipse.persistence_1.1.0.0_2-1.jar
When you deploy your project don’t forget to untarget the default JMS Reporting Provider in the Weblogic console.

Output (in this case the weblogic log files, but you really don’t want this in production):

#### .... <BEA-000000> <=====================>
#### .... <BEA-000000> <MDB inMessage: ObjectMessage[ID:<786041.1329324233629.0>,com.bea.wli.reporting.jmsprovider.runtime.ReportMessage@9f0e4f]>
#### .... <BEA-000000> <MDB ObjectClass: class com.bea.wli.reporting.jmsprovider.runtime.ReportMessage>
#### .... <BEA-000000> <MDB ObjectName: ReportMessage>
#### .... <BEA-000000> <MDB ReportMessage found>
#### .... <BEA-000000> <MDB getMetadata: <rep:messagecontext xmlns:rep="http://www.bea.com/wli/reporting">
 <rep:content-encoding>UTF-8</rep:content-encoding>
 <rep:labels>CorrelationID=1234567890</rep:labels>
 <rep:inbound-endpoint name="ProxyService$LocalTest$services$ProxyService">
 <rep:service>
 <rep:operation>getEmployeeDetails</rep:operation>
 </rep:service>
 <rep:transport>
 <rep:uri>/service/employeedetails/v1</rep:uri>
 <rep:mode>request-response</rep:mode>
 <rep:qualityOfService>best-effort</rep:qualityOfService>
 </rep:transport>
 </rep:inbound-endpoint>
 <rep:origin>
 <rep:state>REQUEST</rep:state>
 <rep:node>PipelinePairNode1</rep:node>
 <rep:pipeline>PipelinePairNode1_request</rep:pipeline>
 <rep:stage>stageValidate</rep:stage>
 </rep:origin>
 <rep:timestamp>2012-01-11T16:20:08.874+01:00</rep:timestamp>
</rep:messagecontext>>
 <BEA-000000> <MDB getStrPayload: null>
#### .... <BEA-000000> <MDB getXmlPayload: <head:myHeader xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sr01="http://rubix.nl/schemas/cdm/sr01" xmlns:head="http://rubix.nl/schemas/cdm/header">
 <head:CurrentDateTime>2012-01-11T14:44:29.857Z</head:CurrentDateTime>
 <head:CorrelationID>1234567890</head:CorrelationID>
 <head:MessageID>1234567890.1</head:MessageID>
</head:myHeader>>
#### .... <BEA-000000> <MDB getBinPayload: null>
#### .... <BEA-000000> <=====================>

Which shows us that:

As expected the getXmlPayload & getBinPayload return either the expression you selected in the report action or null. Depending on what kind of input data you decided to use in your mapping. Much more interesting is the getMetadata method which returns the message reporting context, which is an XML type defined in the Oracle Service Bus MessageReporting.xsd. The coolest part here is the fact that it always contains the origin segment with variables you normally don’t have at your disposal in your OEPE mapper. This origin segment contains information as the state (REQUEST/RESPONSE/ERROR), node, pipeline and stage of the running process.

<rep:origin>
  <rep:state>REQUEST</rep:state>
  <rep:node>PipelinePairNode1</rep:node>
  <rep:pipeline>PipelinePairNode1_request</rep:pipeline>
  <rep:stage>stageValidate</rep:stage>
</rep:origin>

Why … 

From here you can decide on multiple solutions like storing the messagecontext and/or expression in a Oracle database (either relational or XML Type) and by doing so creating your own event tracing specific for your organization needs. Two of the biggest problems I have with the default reporting provider is the fact the messagecontext contains interesting data as a timestamp but the record is stored containing only the message date. Besides that the default version dumps the full expression in a BLOB field. Both result in a limitation regarding querying for specific events.

Report actions + Custom Report provider + a custom SOAP Header definition + proper correlation through your services + good database model = very nice audit and tracing capabilities.

 
2 Comments

Posted by on 02/15/2012 in Oracle, OSB

 

Tags: ,

Oracle SOA Suite Database Growth Management Strategy (whitepaper)

Oracle released a white paper regarding a Oracle SOA Suite 11g Database Growth Management Strategy as part of it’s Oracle Maximum Availability Architecture. Which is great news looking at the questions clients have about disk space planning, growth management and purging strategies for their SOA Suite implementation.

Looking at the document we can see that Chapter 1 shows interesting metrics to estimate the growth of your SOA database to get a good first estimate on the appropriate growth management strategy. It also allows you to determine if your soa database is labeled by Oracle as a small, medium or large database profile. Chapter 2 discusses Growth Management Strategy and advised a recommended strategie based on the database profile explained in chapter 1 (the small, medium or large). Chapter 3 focuses on tooling and scripts to help you troubleshoot your SOA suite database. The document end with 3 appendixes. Appendix A + B are probably interesting for your DBA, but for Middleware people without  the Oracle database background (like me) very valuable to get a good understanding about space management and purging posibilities of the Oracle database. Appendix C finally discusses some of the enhancements in SOA Suite 11g PS5 (like the row migration procedure).

I really like this white paper, it’s technical and gives you a good headstart for any SOA Suite installation / project. So I decided to create this post for 2 reasons: remember the URL and especially to be able to link this to whomever is going to ask me questions about a SOA Suite database growth and purge strategie. :)

References:

The 11g white paper is available on Oracle Technology Network (click here) and has been written by Michael Bousamra with contributions from Deepak Arora & Sai Sudarsan Pogar of Oracle SOA Development.

 
Leave a comment

Posted by on 02/08/2012 in SOA Suite

 

Tags:

 
Follow

Get every new post delivered to your Inbox.