OMM for TREP

glr
glr Newcomer

Hi,

We are moving to a new TREP and need to publish structured product prices. For this I was told that I need to migrate to OMM (using Java). Looking into this and I am a bit confused, I found OMM examples in both RFA and UPA. The code I am having to migrate was written using RFA, how can I know if it is already using OMM or not? For example, both the RFA OMM example and our code uses com.reuters.rfa.common.EventQueue. I would like to have to change a minimum of the code because it is a legacy applicartion.

Thank you,

Gabriel

Best Answer

  • umer.nalla
    umer.nalla LSEG
    Answer ✓

    Hi @glr

    The examples I mentioned are part of the RFA and EMA APIs respectively.

    Elektron SDK - Java Downloads

    Robust Foundation API (RFA) · Java Downloads

    Please download and unpack/install the above APIs to access the previously mentioned examples.

    Please NOTE that the Elektron SDK consists of ETA and EMA - please drill down the EMA subfolder for the EMA examples.

    Regards your question about NIProvider - as explained earlier, you mention MarketDataContributor and MarketDataItemCont. These are Contribution related classes and the OMM equivalent is Posting.

    If you no longer wish to Contribute data and wish to write a provider / publisher type application instead then yes you could use the Interactive Provider or NIProvider - depending on your requirements.

    Please see this article to get an overview of Posting / Contributing data - posting functionality is whereby your application can send data to a contribution gateway which can then be sent onto Thomson Reuters or other third-party data vendor for incorporation into their feeds.

    For a high level view of Provider (Publisher) and the difference between IProvider and NIProvider please refer to this tutorial introduction. - Providers are server based applications use to publish your internally generated data onto your TREP

Answers

  • Does your code use any com.reuters.rfa.omm.* or com.reuters.rfa.RDM.* packages.

    The new OMM datamodel only changed the actual payload. RFA mechanisms like event queue etc are still valid in the OMM context. Look at the

    public void processEvent(Event event) {

    method in classes to see, if it is Marketfeed or OMM messages.

  • glr
    glr Newcomer

    Hi Gurpreet,

    thanks for the reply. Ah, I see. It effectively does not use those packages, the events are of type

    com.reuters.rfa.session.event.*

    So the actual messaging code/mechanisms are still valid it is just the payload that has changed. From what I see I still need to replace

    com.reuters.rfa.session.MarketDataContributor

    with

    com.reuters.rfa.session.omm.OMMProvider

    and instead of using

    com.reuters.rfa.session.MarketDataItemCont

    I assume I would use an

    com.reuters.rfa.omm.OMMMsg
    ?

    Thanks!

    Gabriel

  • Hi Gabriel, There will be other changes required throughout the code - like creating an OMMProvider and OMMListenerIntSpec etc. You should refer to a working example in the RFA SDK directory (Examples/com/reuters/rfa/example/omm) for how it should be done.

    In case there is a need to rewrite the application, please consider using EMA API, which is considerably easier to use and has a step by step tutorial to create a NI Provider.

  • glr
    glr Newcomer

    Hi Gurpreet,

    thanks for the info. Yes, I have done this already, thanks.

    What I am missing is some sort of document explaining how to migrate from MarketFeed/MarketData events to OMM events. I was not able to find such a document or something even remotely close. OMM is a very generic message format by design, which is good, but I need some sort of document telling me how to create messages that the MLIP Contrib understands using OMM. Do you know where I can find this?

    Rewriting the application is currently not possible but I will keep this in mind if at some point it becomes possible.

    Thank you,

    Gabriel

  • Hi @glr

    The other thing key point to note here is that you mention MarketDataContributor and MarketDataItemCont

    These are Contribution related classes and the OMM equivalent is Posting.

    For Posting you would use an OmmConsumer - rather than OmmProvider.

    Also, you say that rewriting the application is not currently possible, but the likelihood is that the amount of effort and code changes required in moving from MarketFeed to OMM in RFA will most likely be greater than if you were to switch to using EMA Java.

    Just to highlight this point, I would recommend you compare the RFA Java OMM example StarterConsumer_Post to the EMA Java equivalent of example340__MarketPrice__OnStreamPost or example341__MarketPrice__OffStreamPost.

    OnStream Posting is where you subscribe / consume an item before Posting (contributing) data to that item.
    OffStream Posting is where you are not interested in Consuming that item - only in Posting data to the item.

    When you compare the RFA StarterConsumer_Post example with example340 or 341, you will notice just how little code is require when using EMA.

  • Hi @glr

    In terms of creating your Message to Post (Contribute data) you can see the PostItemManager.doPost() method of the RFA StarterConsumer_Post example which demonstrates how to populate the Msg for posting including encoding each Field with its value.

    The EMA equivalent is demonstrated in the onRefreshMsg() method of the 340 and 341 examples I mentioned above.

    For example the following snippet Posts (contributes) to 4 fields - 2 Price fields (22+25), a time field(18) and an Enumerated type field(37) to an existing record:

    PostMsg postMsg = EmaFactory.createPostMsg();
    UpdateMsg nestedUpdateMsg = EmaFactory.createUpdateMsg();
    FieldList nestedFieldList = EmaFactory.createFieldList();

    nestedFieldList.add(EmaFactory.createFieldEntry().real(22, 34, OmmReal.MagnitudeType.EXPONENT_POS_1));
    nestedFieldList.add(EmaFactory.createFieldEntry().real(25, 35, OmmReal.MagnitudeType.EXPONENT_POS_1));
    nestedFieldList.add(EmaFactory.createFieldEntry().time(18, 11, 29, 30));
    nestedFieldList.add(EmaFactory.createFieldEntry().enumValue(37, 3));

    nestedUpdateMsg.payload(nestedFieldList );

    ((OmmConsumer)event.closure()).submit( postMsg.postId( 1 )
    .serviceName( "DIRECT_FEED" ) .name( "IBM.N" ).solicitAck( true ).complete(true)
    .payload(nestedUpdateMsg), event.handle() );

    I recommend you work through the first few steps EMA Java Consumer Tutorials for your understanding.

  • Hi Gabriel, Looks like existing application is a contributor to MLIP. As you might be aware, MLIP is end of life and the replacement is the TR Contributions Channel (TRCC). RFA API is not supported for TRCC; please talk to your account manager for roadmap for migration.

    Here is a EMA Java article and a tutorial on how to contribute to TRCC.

  • glr
    glr Newcomer

    Hi @umer.nalla,

    Thanks for this info. I though the producer was used when I want to produce data (post) and the consumer was when I want to receive data.

    May I ask where you found all these examples? I have the examples I downloaded from the RFA downloads page but they are very simple examples, for example there is no 340/341 examples nor the examples you mention in your 2nd message. I just have Tutorial_01 - Tutorial_11, there is no StarterConsumer_Post example inside. If you don't mind pointing me to the download locations for the RFA & EMA example you speak of I would greatly appreciate it. This way I can compare the two and assess a migration to EMA.

    I will also have a look at your link.

    Thanks,

    Gabriel

  • glr
    glr Newcomer

    Hi @umer.nalla

    I found some more documentation (but still not the examples you spoke of unfortunately), If I just want to publish data, should I not use a NI-Provider instead of a Consumer?

    Thanks,

    Gabriel

  • glr
    glr Newcomer

    Hi @umer.nalla,

    thank you, I will have a look at all of this. We effectively still need to contribute, thank you for clarifying this.

    Kind regards,

    Gabriel