Dynamic Routing in OSB 10gR3

Hello All,
I am trying to do a POC of our use-case and wanted to use the Dynamic Routing feature of OSB 10gR3 -
- Create a Proxy which will accept service_id, version, operation and generic input request
- Proxy should do lookup in the Routing Table (XQuery Resource) and based on the service_id as key will provide the service endpoint as -
<ctx:route>
<ctx:service isProxy="true"> {$routingtable/row[logical/text()=$body/ServiceRequest/ServiceId/text()]/physical/text()}</ctx:service>
<ctx:operation>{$body/ServiceRequest/OperationName/text()}</ctx:operation>
</ctx:route>
- Proxy should also carry out the transformation from generic input request to specific as per the operation.
- Proxy should then be able to call the other proxy services (as per endpoint in the routing table) and the specified operation.
Questions -
Is this possible in OSB 10gR3? What service type (WSDL, AnySOAP, AnyXML, messaging) should the generic proxy be? Any alternative to this approach.
So far, I have used ALSB/OSB for simple use-cases and this is more complex so I am seeking information and feedback on this use-case and how to move forward with this use-case.
Thanks,

Thanks mneelapu.
I started this use-case on baby-steps and I tried use the dynamic routing to call the operation on a proxy services
Generic Proxy (using dynamic routing) -----> Proxy ---> Business <----WSDL (Target Service)
Here are the steps in my code -
(1) Created the Proxy ---> Business <----WSDL (Target Service) and tested using the test console.. all works fine.
(2) Created Generic proxy (Messaging Type with xml as input) and I am passing the xml as
<ServiceRequest>
<ServiceId>TestWS</ServiceId>
<OperationName>getStatus</OperationName>
</ServiceRequest>
(3) Created the pipeline pair and in the request pipeline added the stage and -
- assign the Routing Table (as XQuery Resource) to the $routingtable varible
(Routing Table XML looks like - <routing><row><logical>TestWS</logical><physical>/TestSB/TestPS_1</physical></row></routing>)
- assign the XQuery expression
<ctx:route>
<ctx:service isProxy="true"> {$routingtable/row[logical/text()=$body/ServiceRequest/ServiceId]/physical/text()}</ctx:service>
<ctx:operation>{$body/ServiceRequest/OperationName}</ctx:operation>
</ctx:route>
to $routeresult variable
(4) Added the Route Node with dyanmic routing action added the $routeresult in the expression.
I am getting BEA-382612 (Error preparing message for dispatch). I followed the steps as mentioned on e-docs, what am I missing here?
-J
Thanks,

Similar Messages

  • Dynamic routing in OSB

    Environment: OSB 10.3.1
    To avoid manual configuring all published services one-by-one (eg. alter logging), I'd like to implement a generic proxy pattern in OSB. Assume that I have business services at /bs1, /bs2, etc, proxy services at /ps1, /ps2, etc.
    What I'd like to achieve is to publish proxy services which routes to the generic proxy first and then reroute to the original proxy service. For this I published eg. /pps1, /pps2, etc all with an Insert action which saves $inbound/ctx:transport/ctx:uri to . in $header and then route to the genericproxy proxy service.
    Generic proxy starts by executing common logic in the pipeline (log, etc), then should fetch the original routing information from the header and use dynamic routing to direct the message to the right proxy service (/ps1, /ps2, etc).
    Now the questions:
    1. is this the right approach to solve the problem of generic configuration of multiple published services in OSB?
    2. appearently the uri itself is not enough for dynamic routing - what else do I need to save from the original message?
    3. can I construct a <ctx:route><ctx:service..><ctx:operation..> construct with only Insert actions? I'd need a concrete example here accomplishing this.
    Thanks.

    Well you have to add Route Node to your proxy pipeline and inside it add a Dynamic Routing action.
    If you select the Dynamic Routing action you'll see in the Properties view something like:
    Service: <Expression>
    Here is where you have to define the <ctx:route> element. You can basically paste the text here.
    You could also create an XQuery transformation (so you can reuse it later) and invoke it here (with the XQuery Resources tab). But if you're not very familiar with XQuery I'd advise to start with the first option just to see it working.
    At first you could also omit the {$proxy} variable and statically specify the service you want to route to. Or you could use an Assign action to define the $proxy (or any name you want to give it) variable. And then once that's working see if you can get the service path from the headers.
    Hope that helps

  • Error in dynamic Routing in OSB

    I am doing dynamic routing in the proxy service by setting the URL in the Routing Options component in OSB. It's throwing Null Pointer Exception when I am using a URL like this:
    http://hqcsas095:8080/ShowImage/servlet/DisplayImage?dlNumber=1114
    The desination machine is even not getting a request.
    If I remove ?dlNumber=1114 from the URL, then destination machine is getting request. Looks like something is wrong with ? character in the URL but I cannot avoid that. I have to pass paramters.
    Thanks for your help.

    As Hisaak mentioned, try routing option if you want to set URI dynamically. To use the dynamic route action, you need the fully qualified name of the service in Oracle Service Bus as described in http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/userguide/modelingmessageflow.html#wp1081507
    Thanks
    Manoj

  • Issue in Dynamic routing (OSB)

    Hi,
    I implemented dynamic routing in OSB,using xQuery:-
    +<tradingPartnerList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\bea910\user_projects\eclipse\TradingPartners.xsd">+
    +     <tp>+
    +          <Name>Platinum</Name>+
    +          <URL>DynamicDispatch/p1</URL>+
    +     </tp>+
    +<tp>+
    +          <Name>Gold</Name>+
    +          <URL>DynamicDispatch/p2</URL>+
    +     </tp>+
    +</tradingPartnerList>+
    I am routing it on to another proxy using following xml:-
    <ctx:route>
    <ctx:service isProxy='true'>{$endpoint}</ctx:service>
    <ctx:operation>null</ctx:operation>
    </ctx:route>
    Where the Endpoint is from the above xQuery..
    All work fine but i have a one Issue:-
    In <ctx:service isProxy='true'>{$endpoint}</ctx:service> we specify the folder structure of the proxyservice. but what if i move my proxy in future,if i move some of my proxy to other folder the xquery need to be changed which i feel is vv poor design.
    Is there any way where is can specify URL or URI of the proxy service????

    Is there any way where is can specify URL or URI of the proxy service????First of all, you would not like to move your resources here and there frequently in production. Secondly, if you move the resources, definitely you have to change X-Query/Message flow. There is no alternative.
    If you want this feature to be enhanced, please raise a ER with Oracle Support and if they find it valid, will provide a patch for the same.
    Regards,
    Anuj

  • OSB Dynamic service call or dynamic route and transactions

    Hello,
    I've got the following problem in my OSB architecture for asynchronous incomming services.
    OSB version is 10.3.1
    ConnectionFactory is XA
    Problem domain:
    Dynamic service call or dynamic route within transaction boundary
    Elements within transaction:
    1.     JMS Queue ->
    2.     Upper Proxy Service (De-queue) ->
    3.     Lower Proxy Service (Canonical Service) ->
    4.     Business Service (Data Service) ->
    5.     Database Adapter->
    6.     Database
    Dynamic element
    Upper Proxy Service (De-Queue) must be able to determine which Lower Proxy Service (Canonical Service) has to be called on the basis of the message taken from the JMS Queue without losing the transaction (this doesn’t work yet).
    Already tried possible solutions:
    •     Make a service call dynamic by setting the $inbound name attribute. This results in a this property is read-only error.
    •     Use a Dynamic route instead of a service-call. This results in a loss of transaction. The message is deleted from the Queue without taking failure or success into account.
    •     Use a Dynamic route with a quality of service set to exactly once in the header. This seems to be ignored, results in a loss of transaction.
    •     Use a Dynamic route with an explicit reply with failure for errors. Results in a loss of transaction.
    •     Use a Dynamic Publish. This doesn’t fit the required flow because it has no response.
    I hope someone can shed some light on this because I'm at a total loss. I found some references in the forum to what seems to be the same problem but without definite answers. A work-around is also a viable answer.
    Regards,
    Bas Mul

    Hi,
    I'll try to clarify.
    Upper proxy dequeues a message.
    Depending on a value of a specific tag within the message a canonical proxy service (out of 5 at the moment but this numer could increase) has to be called (and be dynamic transform transformed to the format of the specific canonical).
    The canonical service must then pass the message to a database adaper's business service which is responsible for the database insert/update/read.
    If something in the chain from dequeue to database action goes wrong the message may not dissapear from the queue.
    Somehow a dynamic route in the message flow between dequeue proxy and canonical proxy breaks the transaction.
    Bas

  • OSB 11g Dynamic Routing issue

    Hi,
    I am going to insane for not being able to get DynamicRouting to work. I am using DynamicRouting option in RouteNode and in the *service variable panel of this action I have the following:
    <ctx:route>
         <ctx:service isProxy='false'>/MyProject/Services/BusinessServices/MyBizService.biz</ctx:service>
         <ctx:operation>{$operation}</ctx:operation>
    </ctx:route>
    The business service is there and the path is correct. $Operation is verified to have the correct value.
    The setup is I have a proxy service based on a WSDL and in the route node I am trying to dynamically route to a business service.
    I get the following error:
    The invocation resulted in an error:
    <soapenv:Envelope      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
         <soapenv:Body>
              <soapenv:Fault>
                   <faultcode>soapenv:Server</faultcode>
                   <faultstring>BEA-382612: Error preparing message for dispatch</faultstring>
                   <detail>
                        <con:fault      xmlns:con="http://www.bea.com/wli/sb/context">
                        <con:errorCode>BEA-382612</con:errorCode>
                        <con:reason>Error preparing message for dispatch</con:reason>
                             <con:location>
                                  <con:node>RoutingToDataServices</con:node>
                                  <con:path>request-pipeline</con:path>
                             </con:location>
                        </con:fault>
                   </detail>
              </soapenv:Fault>
         </soapenv:Body>
    </soapenv:Envelope>
    If just use Routing Table or Route action, there is no error and flow works fine.
    Has anyone else encountered issues with Dynamic Routing in this nature?
    Thanks in advance,
    Mani

    I use the web console for my OSB development and when I click on the business service The path appears like "CommonServices/BusinessService/CreditRatingTemplate" (based on the sample downloaded from the link given by me)
    I guess you are using the Eclipse/Workshop for development and hence you are getting the below:
    */* NGWS/Services/BusinessServices/NGWS_http.*biz*
    Can you replace it without the front / in the beginning of the URL and see if it works.
    Thanks,
    Patrick

  • OSB: Static Vs Dynamic Routing With "Get All Headers"

    Hi
    How Static and Dynamic Routing works when calling Business Service pointing to a service inside or out-side the domain with respect to carrying "Get All Headers".
    The scenario is
    I have two BIZ services of http protocol, B1 pointing to a serive with-in the same domain and B2 pointing to a serivce outside the domain.
    Now i am calling both BIZs throught Static and Dynamic Routing
    1. Proxy X calls BIZ1 using Static Routing
    2. Proxy X calls BIZ1 using Dynamic Routing
    3. Proxy X calls BIZ2 using Static Routing
    4. Proxy X calls BIZ2 using Dynamic Routing
    Question: In all 4 cases, does "Get All Headers" get passed to called service?. How is the behaviour?
    Thanks
    Venkata Madhu

    If you're getting errors like -
    ORA-12514: TNS:listener does not currently know of service requested in connect
    And you're database has been started you can -
    'alter system register'
    and that will register the database with the listener.
    If you are trying to start up databases remotely you need to have a static entry (listener.ora entry) otherwise you will not be able to connect to the database and will get the above error. I've seen people connect remotely, shutdown the database, try startup and they are not able to. Good way to shoot yourself in the foot.

  • OSB and dynamic routing

    we are trying to implement dynamic routing using xquery resource like in documentation http://edocs.bea.com/alsb/docs30/userguide/modelingmessageflow.html#wp1100135
    when configuring proxy service while adding the expresssion:
    <ctx: route><ctx: service isProxy=’false’>
    {$routingtable/row[logical/text()=$test_ess/proxy/mes:inventory/mes:inv-id/mes:mac]/physical/text()}
    </ctx: service>
    </ctx: route>
    get an error:
    line 1, column 5: {err}XP0003: Invalid expression: unexpected token: :
    Any suggestion?
    TIA

    Hello there....
    For this issue.. try to stuck the sentences together like this:
    <ctx:route>
         <ctx:service isProxy='false'></ctx:service>
    </ctx:route>
    Which means without the space between "ctx:" and "route"

  • OSB Dynamic Routing Downstream Error Handling.

    Hi
    I've written several services which implement dynamic routing proxys which route to other proxys who then talk to business services.
    My problem is that when the downstream service encounters an error the router seems to throw away that error message and replace it with BEA-380000.
    I've read several posts here and there about this and was wondering if there's a best practice way of dealing with this.
    Thanks,
    Nick

    Hi
    I've written several services which implement dynamic routing proxys which route to other proxys who then talk to business services.
    My problem is that when the downstream service encounters an error the router seems to throw away that error message and replace it with BEA-380000.
    I've read several posts here and there about this and was wondering if there's a best practice way of dealing with this.
    Thanks,
    Nick

  • OSB Dynamic Routing and Transaction Rollback

    Hi,
    I have implemented dynamic routing to different jms business services.
    That's the flow:
    1. I have a proxy service which is invoked via a message delivered to a jms queue(XA connection factory), this queue is configured with
    Error Destination, expiration policy redirect, redelivery limit 5 and redelivery delay override 100
    2. I use a dynamic routing action
    <ctx:route isProxy="false">
    <ctx:service>
    $businessServiceXXX
    </ctx:service>
    </ctx:route>
    where $businessServiceXXX is a variable to hold my target jms business service, its value depends on some incoming inbound headers.
    3. if the endpoint is not correct(business service endpoint is dynamic) I catch the error in a Error handler, I raise an Error but :
    THE MESSAGE IS NOT REDIRECTED TO THE ERROR QUEUE.
    I know I could solve the issue with another approach like an external table to capture(fix) the endpoints, but it won't be so flexible in terms of deployment capability.
    Any Ideas ?
    Thanks,
    T.

    Hi Tony,
    Tested this in ALSB 2.5 . Transaction rollbacks fine when error in dynamic routing. I am attaching the test JMS proxy we have used for this.
    We had XA enabled CF for JMS proxy service and target JMS BS. The dynamic route was configured in route node with no route error handler or service error handler. The test case was to pause the target JMS queue for production. We could see messages rolling back to the source queue and getting redelivered.
    Attaching the Sbconfig for this proxy. Proxy Name: Dynamic Routing
    <?xml version="1.0" encoding="UTF-8"?>
    <xml-fragment name="DynamicRouting">
    <ser:coreEntry isEnabled="true" isProxy="true" name="DynamicRouting" isAutoPublish="false" xmlns:ser="http://www.bea.com/wli/sb/services">
    <ser:description/>
    <ser:binding type="abstract XML"/>
    </ser:coreEntry>
    <ser:endpointConfig xmlns:ser="http://www.bea.com/wli/sb/services">
    <tran:provider-id xmlns:tran="http://www.bea.com/wli/sb/transports">jms</tran:provider-id>
    <tran:inbound xmlns:tran="http://www.bea.com/wli/sb/transports">true</tran:inbound>
    <tran:URI xmlns:tran="http://www.bea.com/wli/sb/transports">
    <env:value xmlns:env="http://www.bea.com/wli/config/env">jms://localhost:7001/XACF/InputQueue</env:value>
    </tran:URI>
    <tran:inbound-properties xmlns:tran="http://www.bea.com/wli/sb/transports"/>
    <tran:all-headers xmlns:tran="http://www.bea.com/wli/sb/transports">false</tran:all-headers>
    <tran:provider-specific xsi:type="jms:JmsEndPointConfiguration" xmlns:jms="http://www.bea.com/wli/sb/transports/jms" xmlns:tran="http://www.bea.com/wli/sb/transports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <jms:is-queue>true</jms:is-queue>
    <jms:is-secure>false</jms:is-secure>
    <jms:inbound-properties>
    <jms:response-required>false</jms:response-required>
    </jms:inbound-properties>
    <jms:request-encoding>UTF-8</jms:request-encoding>
    </tran:provider-specific>
    </ser:endpointConfig>
    <ser:router xmlns:ser="http://www.bea.com/wli/sb/services">
    <con:pipeline name="PipelinePairNode1_request" type="request" xmlns:con="http://www.bea.com/wli/sb/pipeline/config">
    <con:stage name="Configuration">
    <con:comment/>
    <con:context/>
    <con:actions>
    <con1:assign varName="input" xmlns:con1="http://www.bea.com/wli/sb/stages/transform/config">
    <con1:expr>
    <con:xqueryText xmlns:con="http://www.bea.com/wli/sb/stages/config"><![CDATA[<root>
    <type value="jms">
              <service>DynamicRouting/BusinessService/JMS</service>
         </type>
         <type value="http">
         <service>DynamicRouting/BusinessService/HTTP</service>
         <operation>Test</operation>
         </type>
    </root>]]></con:xqueryText>
    </con1:expr>
    </con1:assign>
    </con:actions>
    </con:stage>
    </con:pipeline>
    <con:pipeline name="PipelinePairNode1_response" type="response" xmlns:con="http://www.bea.com/wli/sb/pipeline/config"/>
    <con:flow xmlns:con="http://www.bea.com/wli/sb/pipeline/config">
    <con:pipeline-node name="PipelinePairNode1">
    <con:request>PipelinePairNode1_request</con:request>
    <con:response>PipelinePairNode1_response</con:response>
    </con:pipeline-node>
    <con:route-node name="DynamicRoute">
    <con:comment/>
    <con:context/>
    <con:actions>
    <con1:dynamic-route xmlns:con1="http://www.bea.com/wli/sb/stages/routing/config">
    <con1:service>
    <con:xqueryText xmlns:con="http://www.bea.com/wli/sb/stages/config">&lt;ctx:route>
         &lt;ctx:service isProxy="false">{data($input/*:type[@value=$body/*:body/*:type/text()]/*:service)}&lt;/ctx:service>
              if($input/*:type[@value=$body/*:body/*:type/text()]/*:operation) then
                   &lt;ctx:operation>{data($input/*:type[@value=$body/*:body/*:type/text()]/*:operation)}&lt;/ctx:operation>
    else()
    &lt;/ctx:route></con:xqueryText>
    </con1:service>
    <con1:outboundTransform>
    <con2:routing-options xmlns:con2="http://www.bea.com/wli/sb/stages/transform/config">
    <con2:uriExpr>
    <con:xqueryText xmlns:con="http://www.bea.com/wli/sb/stages/config">$body/*:body/*:url/text()</con:xqueryText>
    </con2:uriExpr>
    </con2:routing-options>
    </con1:outboundTransform>
    <con1:responseTransform/>
    </con1:dynamic-route>
    </con:actions>
    </con:route-node>
    </con:flow>
    </ser:router>
    </xml-fragment>
    Regards,
    Atheek
    Edited by: atheek1 on 27-Apr-2010 19:48

  • Dynamic timeout for OSB proxy or business services

    The scenario we got here is that we will have multiple synchronous webservices implemented as OSB proxy services. These proxies will then invoke a common "routing" proxy that will determine which other OSB proxy or business services (JMS Request/Response) to call and does the dynamic routing.
    I understand that you can set a timeout at the business service level how long to wait for a response (at least when using the JMS transport). The problem is we got the requirement that the timeout value would be dependent on the role of the caller invoking the frontend webservice (this is done via some kind of lookup to determine the appropriate timeout setting for the invocation).
    Is this possible? I can't seem to find anything exposed in the transport header that allows me to set a timeout value during runtime. This means that the frontend proxy will be waiting for a response depending on the business service timeout setting. Can we implement a timeout in this frontend proxy somehow?
    Stumped right now over this. Thanks in advance for helping out.

    >
    Are there other reasons why you say it's not the most ideal way of development ?
    >
    Versioning binary files is always a pain. You can't compare them, you can't merge them ... Another point, if you put your jar archive with OSB artifacts under version control, you will most probably face issue related to end of line styles (mac, unix, windows).
    However, the most important point is usability. I want to version .proxy and .biz services to see right in IDE that I changed something and I should check that in for the others. I don't want to risk that I forget something. And I also want to see what other users committed, what sources they work on ... You loose all of that by versioning jar file. I would never go this way.

  • How to use Xqueries in OSB 10gR3 ?

    Hi,
    I have some trouble with OSB 10gR3 Xqueries.
    I try to extract (in a "FLWOR" loop ) the indexed i = 2 or i = 3 corresponding customer.
    I used 2 Xqueries to achieve it but I'm stuck. Can anyone help ?
    Thanks
    Query 1
    $body/sdf:updateCustomersResponse/sdf:ResponseData/sdf:customer[$index]
    Query 2
    $body/sdf:updateCustomersResponse/sdf:ResponseData/sdf:customer[2]
    Here is the input body used:
    <SOAP-ENV:Body      
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <ns:updateCustomersResponse      
         xmlns:ns="http://www.example.org/abc">
         <ns:ResponseData>
         <ns:customer>
         <ns:fax>00990001</ns:fax>
         <ns:tel>00991001</ns:tel>
         </ns:customer>
         <ns:customer>
         <ns:fax>00990002</ns:fax>
         <ns:tel>0099100100</ns:tel>
         </ns:customer>
         <ns:customer>
         <ns:fax>00990003</ns:fax>
         <ns:tel>00991222</ns:tel>
         </ns:customer>
         </ns:ResponseData>
    </ns:updateCustomersResponse>
    </SOAP-ENV:Body>
    When I use Query2
    $body/sdf:updateCustomersResponse/sdf:ResponseData/sdf:customer[2]
    I get the 2nd customer. It's correct.
         <ns:customer      
         xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
         xmlns:ns="http://www.example.org/abc"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <ns:fax>00990002</ns:fax>
         <ns:tel>0099100100</ns:tel>
         </ns:customer>
    But I need to do parse all the customers (here 3)
    So I started to use such a query:     
    $body/sdf:updateCustomersResponse/sdf:ResponseData/sdf:customer[$index]
    In the OSB test console I define the value for $index as equal to 2 (no XML checked)
    But the Xquery returns all 3 customers and not the indexed one (e.g the first or the third)
    What is wrong ?
    Is there any clear example in the Oracle documentation to define the "Dynamic Xquery" ?(if this helps ?)
    <ns:customer      
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns="http://www.example.org/abc"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <ns:fax>00990001</ns:fax>
         <ns:tel>00991001</ns:tel>
         </ns:customer>
         <ns:customer      
         xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
         xmlns:ns="http://www.example.org/abc"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <ns:fax>00990002</ns:fax>
         <ns:tel>0099100100</ns:tel>
         </ns:customer>
         <ns:customer      
         xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
         xmlns:ns="http://www.example.org/abc"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <ns:fax>00990003</ns:fax>
         <ns:tel>00991222</ns:tel>
         </ns:customer>

    What do you want to do with each seperate customer record?
    Do you want to loop them in the osb flow itself, or from within a xquery (for each)
    if you want to do it from the flow itself youi use the flow control > for each
    For each variable 'mycustomer' in ./sdf:updateCustomersResponse/sdf:ResponseData/sdf:customer of variable 'body'
    indexed by variable 'mycustomer_i' with total count in variable 'customer_count'
    in an assign you can then use something like $mycustomer/ns:fax
    that's how it would look like in osb flow itself.
    Edited by: Eric Elzinga (IT-Eye) on Jan 12, 2010 9:05 AM

  • Query regarding the tutorial for Oracle Service Bus (OSB 10gR3)

    Hi,
    I am working on a tutorial of Oracle Service Bus (OSB 10gR3).
    I have created the proxy service and the Business Service, using Oracle Service Bus console.
    The details are as follows:
    Proxy service: LoanGateway
    Business service1: A value of 4.9 or less causes the message to be routed to the ManagerLoanReview business service.
    Business service2: A value of 5.0 or greater causes the message to be routed to the NormalLoan business service.
    When i send the request message, so that it gets routed from proxy service to one of the business service than it gives following error.
    Request Document
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    </soap:Header>
    <soapenv:Body>
    <exam:processLoanApp xmlns:exam="http://example.org">
    <loanRequest xsi:type="java:LoanStruct" xmlns:java="java:normal.client" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!--Optional:-->
    <java:Name>Smith</java:Name>
    <!--Optional:-->
    <java:SSN>1234567</java:SSN>
    <!--Optional:-->
    <java:Rate>4.1</java:Rate>
    <!--Optional:-->
    <java:Amount>9000000</java:Amount>
    <!--Optional:-->
    <java:NumOfYear>10</java:NumOfYear>
    <!--Optional:-->
    <java:Notes>Manager Loan Application Review Service</java:Notes>
    </loanRequest>
    </exam:processLoanApp>
    </soapenv:Body>
    </soapenv:Envelope>
    Response Document
    The invocation resulted in an error: .
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
    <soapenv:Fault>
    <faultcode>soapenv:Server</faultcode>
    <faultstring>
    BEA-380002: Tried all: '1' addresses, but could not connect over HTTP to server: 'localhost', port: '7021'
    </faultstring>
    <detail>
    <con:fault xmlns:con="http://www.bea.com/wli/sb/context">
    <con:errorCode>BEA-380002</con:errorCode>
    <con:reason>
    Tried all: '1' addresses, but could not connect over HTTP to server: 'localhost', port: '7021'
    </con:reason>
    <con:location>
    <con:node>RouteNode1</con:node>
    <con:path>request-pipeline</con:path>
    </con:location>
    </con:fault>
    </detail>
    </soapenv:Fault>
    </soapenv:Body>
    </soapenv:Envelope>
    Response Metadata
    <con:metadata xmlns:con="http://www.bea.com/wli/sb/test/config">
    <tran:headers xsi:type="http:HttpResponseHeaders" xmlns:http="http://www.bea.com/wli/sb/transports/http" xmlns:tran="http://www.bea.com/wli/sb/transports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <http:Content-Type>text/xml; charset=utf-8</http:Content-Type>
    </tran:headers>
    <tran:response-code xmlns:tran="http://www.bea.com/wli/sb/transports">1</tran:response-code>
    <tran:encoding xmlns:tran="http://www.bea.com/wli/sb/transports">utf-8</tran:encoding>
    </con:metadata>

    I have the same problem and I'm not able to telnet localhost on port 7021. How can I change this port number I think that port must be 7001, it is correct?Examples server domain is pre-configured for port 7021. The samples domain will have the examples properly deployed in this domain out of box. You dont need to change any thing in {BEA_HOME}\osb_10.3\samples\domains\servicebus\config.
    I doubt this has to do something with firewall . Check the last statement in the log after starting the domain.
    <May 19, 2009 8:50:09 AM IST> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 10.177.242.25:7001 for protocols iiop, t3, ldap, snmp, http.>
    <May 19, 2009 8:50:09 AM IST> <Notice> <Server> <BEA-002613> <Channel "Default[1]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, snmp, http.>
    <May 19, 2009 8:50:09 AM IST> <Notice> <WebLogicServer> <BEA-000331> <Started WebLogic Admin Server "AdminServer" for domain "base_domain" running in Development Mode>
    <May 19, 2009 8:50:09 AM IST> <Warning> <Server> <BEA-002611> <Hostname "mneelapu", maps to multiple IP addresses: 10.177.242.25, 127.0.0.1>
    <May 19, 2009 8:50:09 AM IST> <Warning> <Server> <BEA-002611> <Hostname "XYZ-v411-10-177-242-25.oracle.com", maps to multiple IP addresses: 10.177.242.25, 127.0.0.1>
    <May 19, 2009 8:50:09 AM IST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING>
    <May 19, 2009 8:50:09 AM IST> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>
    What are you seeing in your log file?
    Edited by: mneelapu on May 19, 2009 9:58 AM

  • OSB 10gR3 memory usage

    I have been experiencing "out of memory" type errors on several of our OSB development and certification boxes. We haven't even begun to drive real load through the OSB which is causing me more than a little concern. First a little background.
    We have about a dozen message flows. A few take REST requests (inbound) and turn them into SOAP requests (outbound) to talk to legacy apps. The majority are REST on both sides. All are what I would describe as simple. Straight copies of data from one side to the other. No orchestration or dynamic routing. We have java callouts that check the contents of a passed in string for a valid chksum value and return true or false. false causes the message flow to fail the request without calling a business service. No real data allocation is going on in the callouts. We are configured to start with a heap size of 512meg and have a max sizqe of 3gig. Cert is using the jrockit jvm. Dev is using Suns jdk. Only the OSB runs in this instance of WebLogic. Called services are standalone POJOs running on remote hosts.
    Looking at one managed servers in cert shows that it has handled about 500,000 requests, received 240meg and sent about 1gig of data. This copies heap size is stiCll sitting at the initial 512meg size after running 5 days. Last week one of these cert copies grew from 512meg to 3gig out of memory in 54 seconds according to the GC stats. So I'm assuming a single very large request or response took him out. We have 4 copies in the cluster and requests are round robin'd across the managed servers. So multiple request to a single copy seems unlikely. Most of the logging happens when a request is done, so nothing in the logs shows a huge transaction if there is one. Sampling the last 50,000 request on this copy shows that message response sizes range from 0 bytes to 9meg. Only about 30 requests have exceeded 1 meg and only 100 have exceeded 100k. The average response size is 3k.
    So far we have done the following:
    1) made sure all business proxies have a timeout 60 seconds or less. (We had stuck threads as the various called service developers release buggy new code)
    2) all message flows that return large data, (more than 1k) are set with Content Streaming Enabled (Memory Buffer, No Compression)
    Would paging attachments to disk or using compression on the Content Streaming make much difference? I assumed streaming was using a small memory buffer and passing the data out as fast as it got it. Perhaps that is not really the case.
    Any ideas on things I should be investigating?
    I have thought about turning on Terse Proxy Tracing for all calls to see if I could get the logs to tell me what was going on when it died. Assumption being it dies before the access log has a chance to report a massive response.
    Edited by: user10451772 on Jun 16, 2010 7:33 PM

    There could be many reasons behind an out-of-memory error.
    If you see anything related to OutOfMemory due to Number of Threads, then set -Xss memory option to a higher value.
    If OutOfMemoryError thrown for the reason of PermGen Space size exceed then set -XX:MaxPermSize memory option to a higher value.
    -sever option helps to deal faster in thread context switching.
    -Xms and -Xmx options set starting heap size and maximum heap size respectively. Make these two values equal to get best performance in server mode and minimize GC cycle.
    Regards,
    Anuj

  • Xquery expression in Dynamic Routing

    Hi All,
    I need a help.My requirement is as follows.
    1) I Have 2 nos of Proxy and Multiple Business Service.
    2) First Proxy calling 2nd Proxy and passing the BusinessService Name in user-define Header(only One Header) using Transport Header.
    3)2nd Proxy calls the required Business Service using Dynamic routing.
    The problem i am getting is when i am using the xpath expression of the header value($inbound/ctx:transport/ctx:request/tp:headers/tp:user-header/@value) in the Dynamic Routing expression
    (<ctx:route>
    <ctx:service isProxy="false">
    {$inbound/ctx:transport/ctx:request/tp:headers/tp:user-header/@value}
    </ctx:service>
    </ctx:route>) , I am getting some exception.
    But if i use Assign node before Dynamic Routing and mention the same xpath of header value to a variable and the variable in the Dynamic Routing expression,I am able to invoke business Service sucessfully.
    But my requirement is not to use any Assign Node.
    Does any one has any idea what would be the correct syntax of the expression in Dynamic Routing.
    Thanks in Advance ..
    Thanks
    Deba

    Well, interesting try. Oracle has suggested to keep a mapping (in a XML or in database) between logical and physical values of destinations, you are trying to route, in OSB itself and to query it at runtime to get the actual value of destination. Please refer -
    http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/userguide/modelingmessageflow.html#wp1081507
    What error do you get when you directly use the X-Path in Dynamic Routing expression?
    Regards,
    Anuj

Maybe you are looking for

  • About changes in PI 7.1

    Hi experts, I am not sure why few things keep changing all the time in PI in each version. Generally we add more options and enhance existing components. Collaboration profile, collaboration agreements were seen in 7.0, XI has become PI. service wito

  • ItemEditEnd not firing in DataGrid

    In one particular DataGrid it's not firing - all other in my app work fine. I've had another Flex developer to look at my code just in case I'm going mad or something, and he thinks it's a bug in Flex framework somewhere. I'm using Flex Builder 2.0.1

  • My touchpad is not working sometimes

    sometime my touch pad is not working i updated dirver also no use. and my computer in warranty period my smart center also showing error for last four months.

  • User not found in OAAM

    Hi all, I am trying to search user in OAAM using its customerId. For that I am using following code: VCryptAuth vCryptAuth = VCryptAuthUtil.getVCryptAuthInstance(); VCryptAuthUser authUser = vCryptAuth.getUser("kishorem"); But I am getting user as nu

  • How to identify and download missing add-ons in an offline environment?

    I am missing an add-on in an environment from which I am NOT connect to the Internet due to security reasons. How do I identify the add-on firefox is missing? It is not explicit mentioned. If once identified, where to download?