Wednesday, November 23, 2011

Siebel & SOA misscommunication.

Quite confusing situation had resolved couple minutes ago.

The history was started by Sibel implementation team, they have noticed strange hangs for 5-7 seconds while user  process orders. So they started  investigation and founded the reason (They think so). There were detected strange Siebel EAI behavior.
  1. EAI  receive request from a Siebel user
  2. Send it to our LBR-OHS and OSB cluster process it.
  3. Then OSB send response back to EAI
  4. EAI waits for a 5 second 
  5. And then send respond to user.
Siebel team points to wrong  OHS configuration particularly to keepAlive and keepAliveTimeout. It is enabled by default and timeout is 5 seconds. Ping !

The next step was mine. I've create the simplest WSDL for a echoing Proxy Service, and ran several tests with different scenarios, using soapUI.

Well there is no timeouts at all. Actually there were several really long responses, but the min response time was around 5-9 ms, and any average less 100 ms.

I've sent porject, report and explanation to Siebel team. Pong!

Guys  from other side reproduced the test and found the root of the issue.
soapUI uses header user-agent with a value Jakarta Commons-HttpClient/3.0.1, meanwhile Siebel EAI set user-agent to  Mozilla/4.0. Ping !


Hmm, quite strange. When I set user-agent to Mozilla/4.0 I get the same result, the client (soapUI in my case), waits for a keepAliveTimeout and only then responses.
So i don't know how the system behavior will be changed if I switch off keepAlive.

But what I know, that you can change only one parameter in Siebel Enterprise Application Integration and avoid such cumbersome cases.

Monday, November 21, 2011

Oracle Portal and WSRP Producer

If you are developing WSRP portlet provider with JDeveloper/Weblogic, and going to implement some security, you may have some issue like we had.
Or you have not if you wouldn't  use Oracle Portal.
The simplest thing you should  get user name and make some decision or just greet the user. 
So the standard way is:
 .....
PortletRenderRequest portletRequest = (PortletRenderRequest)
                            request.getAttribute("oracle.portal.PortletRenderRequest");
String name = portletRequest.getRemoteUser();
......
Most likely that name will be null. We wasted some time, trying to find the solution. Thanks Google, The Wonderful and Manoj we find it. Here you are:
Add this option to your portlet.xml and you will get user name from Oracle Portal or Webcenter application.
...
<container-runtime-option>
     <name>com.oracle.portlet.useWsrpUserContextForUserAuthenticationInfo</name> 
     <value>true</value>
</container-runtime-option>
.....

P.S. It definitively works with Oracle Portal  11.1.1.4 and WebCenter 11.1.1.5