In EMA API batch request how can we obtain separate handle and closure objects for each element?

In this example ex370_MP_Batch, how can we obtain handle and closure object for each of the elements which are a part of the array?
public class Consumer
{
public static void main(String[] args)
{
OmmConsumer consumer = null;
try
{
AppClient appClient = new AppClient();
consumer = EmaFactory.createOmmConsumer(EmaFactory.createOmmConsumerConfig().host("localhost:14002").username("user"));
ElementList batch = EmaFactory.createElementList();
OmmArray array = EmaFactory.createOmmArray();
array.add(EmaFactory.createOmmArrayEntry().ascii("TRI.N"));
array.add(EmaFactory.createOmmArrayEntry().ascii("IBM.N"));
batch.add(EmaFactory.createElementEntry().array(EmaRdm.ENAME_BATCH_ITEM_LIST, array));
consumer.registerClient(EmaFactory.createReqMsg().serviceName("DIRECT_FEED").payload(batch), appClient);
Thread.sleep(60000); // API calls onRefreshMsg(), onUpdateMsg() and onStatusMsg()
}
catch (InterruptedException | OmmException excp)
{
System.out.println(excp.getMessage());
}
finally
{
if (consumer != null) consumer.uninitialize();
}
}
}
Here in above code, how can we obtain a handle as response for each of the elements in the array?
Right now, we receive only one handle object when we register OmmConsumerClient object for the batch request.
Answers
-
Hello @dimple.shah
Please be informed that you cannot get the item handles from the OmmConsumer.registerClient() method when an application subscribes a batch request to the server.
The reason is once the Server accepts that batch request from a consumer, Server will close that request message, and the server is going to create individual streams for each of RICs and allocate a unique handle ID to each stream.
Example messages:
Item Name: <not set>
Service Name: ELEKTRON_DD
Item State: Closed / Ok / None / 'Stream closed for batch'…
Item Name: /LSEG.L
Service Name: ELEKTRON_DD
Item State: Open / Ok / None / ''
Fid: 1 Name = PROD_PERM DataType: UInt Value: 9241
Fid: 2 Name = RDNDISPLAY DataType: UInt Value: 115
Fid: 3 Name = DSPLY_NAME DataType: Rmtes Value: LON.STK.EXCH/d…
Item Name: /JPY=
Service Name: ELEKTRON_DD
Item State: Open / Ok / None / ''
Fid: 1 Name = PROD_PERM DataType: UInt Value: 363
Fid: 2 Name = RDNDISPLAY DataType: UInt Value: 153
Fid: 3 Name = DSPLY_NAME DataType: Rmtes Value: NEDBANK LTD J/d…
You can find more detail about this behavior from this WebSocket API tutorial page (the WebSocket API batch logic can be applied to the EMA too).
To get the Server generated handles, you can use the OmmConsumerEvent.handle() method in the OnRefreshMsg() method to get incoming handle ID.
Example Code:
class AppClient implements OmmConsumerClient{ public void onRefreshMsg(RefreshMsg refreshMsg, OmmConsumerEvent event){ System.out.println("Item Name: " + (refreshMsg.hasName() ? refreshMsg.name() : "<not set>")); System.out.println("Service Name: " + (refreshMsg.hasServiceName() ? refreshMsg.serviceName() : "<not set>")); ... System.out.println("Item Handle: " + event.handle()); ... }
Result:
Item Name: <not set>
Service Name: ELEKTRON_DD
Item State: Closed / Ok / None / 'Stream closed for batch'Item Name: /LSEG.L
Service Name: ELEKTRON_DD
Item Handle: 2…
Item Name: /JPY=
Service Name: ELEKTRON_DD
Item Handle: 3
Item State: Open / Ok / None / ''I hope this information helps.
0
Categories
- All Categories
- 3 Polls
- 6 AHS
- 36 Alpha
- 166 App Studio
- 6 Block Chain
- 4 Bot Platform
- 18 Connected Risk APIs
- 47 Data Fusion
- 34 Data Model Discovery
- 690 Datastream
- 1.5K DSS
- 629 Eikon COM
- 5.2K Eikon Data APIs
- 11 Electronic Trading
- 1 Generic FIX
- 7 Local Bank Node API
- 3 Trading API
- 2.9K Elektron
- 1.4K EMA
- 255 ETA
- 560 WebSocket API
- 39 FX Venues
- 15 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 25 Messenger Bot
- 3 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 60 Open Calais
- 281 Open PermID
- 46 Entity Search
- 2 Org ID
- 1 PAM
- PAM - Logging
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 23 RDMS
- 2K Refinitiv Data Platform
- 724 Refinitiv Data Platform Libraries
- 4 LSEG Due Diligence
- LSEG Due Diligence Portal API
- 4 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.2K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 12 World-Check Customer Risk Screener
- 1K World-Check One
- 46 World-Check One Zero Footprint
- 45 Side by Side Integration API
- 2 Test Space
- 3 Thomson One Smart
- 10 TR Knowledge Graph
- 151 Transactions
- 143 REDI API
- 1.8K TREP APIs
- 4 CAT
- 27 DACS Station
- 121 Open DACS
- 1.1K RFA
- 106 UPA
- 194 TREP Infrastructure
- 229 TRKD
- 918 TRTH
- 5 Velocity Analytics
- 9 Wealth Management Web Services
- 95 Workspace SDK
- 11 Element Framework
- 5 Grid
- 19 World-Check Data File
- 1 Yield Book Analytics
- 48 中文论坛