question

Upvotes
Accepted
7 1 0 3

Ema - Batch and View requests to IProvider

We are migrating a Java application IProvider from RFA to EMA, and we have some doubts about Ema IProvider capabilities.

According to RFA documentation (section 3.3.1.1 of rfaj_developerguide.pdf, RFA version 8.2.1.L1) "Interactive providers can receive any consumer-style request described in the consumer section of this document, including item requests, batch requests, views, symbol lists, pause / resume, etc."

Is this supported also by IProviders of Ema library? Testing batch requests and views it seems not:

  • For batch requests we have used ex370_MP_Batch for consumer and ex102_MP_Snapshot example for iprovider. We expected the payload of ReqMsg received by the IProvider to contain an ElementList (with EmaRdm.ENAME_BATCH_ITEM_LIST), but DataType is NO_DATA instead.
  • For view requests we have used ex360_MP_View for consumer and ex102_MP_Snapshot example for iprovider. We expected the payload of ReqMsg received by the IProvider to contain an ElementList (with EmaRdm.ENAME_VIEW_TYPE and EmaRdm.ENAME_VIEW_DATA), but DataType is NO_DATA instead.

Ema version is 3.6.7.0.

Thank you

#technologyema-api
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

1 Answer

· Write an Answer
Upvotes
Accepted
22k 58 14 21

Hello @Daniela Ottino,

EMA iProvider provides the Batch and View capability. These will first have to be advertised in the Login response message, before a consumer can use it. The default login response message does not support Dynamic Views and Batch messages - which is why your consumer application is not sending it.

Modify the iProvider login response like this:

void processLoginRequest(ReqMsg reqMsg, OmmProviderEvent event){
  ElementList attrs = EmaFactory.createElementList();
  attrs.add(EmaFactory.createElementEntry().uintValue(EmaRdm.ENAME_SUPPORT_VIEW, 1));
  
  event.provider().submit(EmaFactory.createRefreshMsg().domainType(EmaRdm.MMT_LOGIN).name(reqMsg.name()).nameType(EmaRdm.USER_NAME).
    complete(true).solicited(true).state(OmmState.StreamState.OPEN, OmmState.DataState.OK, OmmState.StatusCode.NONE, "Login accepted").
    attrib(attrs), event.handle());
}


and now the consumer request message will appear as:

ReqMsg
   streamId="5"
   domain="MarketPrice Domain"
   name="abc.def"
   serviceId="1"
   serviceName="DIRECT_FEED"
   Payload dataType="ElementList"
      ElementList
         ElementEntry name=":ViewType" dataType="UInt" value="1"
         ElementEntry name=":ViewData" dataType="OmmArray"
            OmmArray with entries of dataType="Int" fixed width="2"
               value=""22"
               value=""25"
            OmmArrayEnd
         ElementEntryEnd
      ElementListEnd

   PayloadEnd
ReqMsgEnd


Also note the Java version of EMA API does not send a batch request, but instead the SDK requests the individual items.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Thanks for the clear explanation

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.