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

Similar Messages

  • 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 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 JMS Proxy XA Transaction Rollback not occuring to queue

    Hi All
    We are dequeuing a message from JMS queue via an XA connection factory and then calling a web service. If any error occurs in the web service we catch the error handler, log and notify it and want to send this message back to the queue for retrial (The retry settings are defined at the Queue Level from weblogic console).
    Problem is rollback is not occurring, we have tried the below:
    1) There is no OSB reply with either success or failure in the error handler (This should have done the trick)
    2) We have also tried addiing an explicit Raise Error (Uncaught Error) to roll the message back, but its not working.
    This rollback is not occurring because JMS Resource is XA and web service call is NON XA, hence the entire message flow becomes NON XA. Is this understanding correct?
    How can we fix this? Please help

    Hi atheek1
    Thanks for the reply, it worked. Before I mark this question as answered, pls. answer the below queries (Thanks a lot!)
    1) Well, i just ticked transaction required and same transaction for response and it started working. I did not add routing options like you mentioned to QOS Exactly Once. Its working without it fine. So, my questions is what is the use of adding this QOS to exactly once. Is it mandatory?
    2) I have a couple of OSB services in which rollback is working automatically (XA JMS to JCA FTP Adapter) and (XA JMS to JCA DB adapter XA data source), here rollback works automatically. I dont have to tick transaction required. So my question is, when an XA based connection factory picks a message from the queue, a transaction is started at the container level. So why tick transaction required at the message flow level, when the weblogic has already initiated a transaction. Since you said that HTTP transport commits a transaction even if 500 or 404 occurs, it makes sense to tick is transaction required and same transaction for response in OSB proxy service. But the remaining scenarios work without these options. Hence will it be wise to say that these settings are only required for HTTP transport coz of the way it behaves (commits 404 and 500).
    Thanks

  • 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

  • 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"

  • 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

  • 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

  • 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,

  • 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.

  • Dynamic Routing with VPN and multiple Peers

    I have several sites that connect to my primary host site (ASA5525-X) via LAN to LAN tunnels and currently all internal host routing is static. I need to implement a backup host site (ASA5520) for the remote sites to connect to. I know that I can add additional peers on each remote site for the host sites. However, I need to be able to do dynamic routing, so that if does not matter which site they are connected to the internal networks will learn where to route the traffic. I am running OSPF on my internal networks at both Primary and Backup host sites and they have an internal connection between the two sites.
    Is there a way to accomplish this on the ASAs?
    Thanks,
    Doug

    To make perhaps my question a little more clear, this is an example of how I would the result to look like
    http://www.latitudes.co.uk/dept_search_pages/search_provence.php
    where the labels with the checkboxes are retrieved from the 'category' table and when one or more boxes are ticked, the corresponding values are used to make the selection in the WHERE statement in the MySQL query.
    Hope someone can help me out.
    Erik

  • Dynamic routing alternative between ASA and edge routers?

    This is the current setup between two edge routers and an ASA 5580.  The edge routers carry approximately 9200 BGP routes with ISP A also supplying the default route.  Is there a good, i.e. has been successfully implemented, dynamic routing situation between the edge routers and ASA such that the ASA can send traffic to the particular edge router that carries the best specific route?

    Hello,
    Let's remember that the ASA was built as a High-Level Next Generation Firewall.
    That does not mean it's not useful for routing but here we are talking about thousands of routes, I do not think there will be a performance issue on the FW because of that. I mean you have one of the greatest Cisco Firewalls (functionality and power speaking).
    So if that's the case and you really want to do that you will need to implement either RIP,EIGRP,OSPF on the link and then do the redistribution on the routers.
    Makes sense?
    Regards,
    Jcarvaja
    CCIE 42930

  • Dynamic Routing Gateway and ASA

    Greetings,
    We have a requirement to configure a multisite gateway and have run into an issue. According to http://msdn.microsoft.com/en-us/library/azure/dn133793.aspx, dynamic routing gateways are not supported on the ASA platform. Does this simply mean that MS does
    not support this configuration or that this configuration is not possible? I cannot negotiate an ikev2 proposal with a dynamic gateway so I fear that it isn't possible.
    Has anyone here made this work?
    Thanks in advance.

    Hello
    In the link you provided, the combination of ASA with dynamic routing says it is not compatible (it does not say not supported).
    From that I understand that it will not work.
    We have tried a few Juniper combinations in the past with static and dynamic routing that were not on the list you mention - only to find out that they indeed did not work.
    My recommendation is to stick to the supported setup.

  • 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

Maybe you are looking for