Example of closure in EMA

Asking on behalf of a client, please provide a simple example making use of closure in EMA Java to map subscriptions back to my own objects.

Best Answer

  • A general usage of closure is to be as an identifier (the application-specific purpose) of item subscriptions. So that the application can distinguish an event received in the callback methods by checking the closure object.

    Here this is the example code (modified from example100 MarketPrice_Streaming):

    ** Calling registerClient using a closure object**

    AppClient appClient = new AppClient();
    OmmConsumerConfig config = EmaFactory.createOmmConsumerConfig();
    consumer = EmaFactory.createOmmConsumer(config.host("<host>:<port>").username("<username>"));
    ReqMsg reqMsg = EmaFactory.createReqMsg();

    // equity ric group
    consumer.registerClient(reqMsg.clear().serviceName("<serviceName>").name("IBM.N"), appClient, "EQUITY_CLOSURE");
    consumer.registerClient(reqMsg.clear().serviceName("<serviceName>").name("TRI.N"), appClient, "EQUITY_CLOSURE");

    // currency ric group
    consumer.registerClient(reqMsg.clear().serviceName("<serviceName>").name("JPY="), appClient, "CURRENCY_CLOSURE");
    consumer.registerClient(reqMsg.clear().serviceName("<serviceName>").name("GBP="), appClient, "CURRENCY_CLOSURE");
    consumer.registerClient(reqMsg.clear().serviceName("<serviceName>").name("EUR="), appClient, "CURRENCY_CLOSURE");

    // chain ric group
    consumer.registerClient(reqMsg.clear().serviceName("<serviceName>").name("0#.SETI"), appClient, "CHAIN_CLOSURE");

    // etc ric group
    consumer.registerClient(reqMsg.clear().serviceName("<serviceName>").name("THIS_IS_A_NON_EXISTING_RIC"), appClient, "ETC_CLOSURE");

    ** Printing a closure object in the callback method **

    public void onRefreshMsg(RefreshMsg refreshMsg, OmmConsumerEvent event)
    {
    System.out.print("onRefreshMsg: \t");
    System.out.print(refreshMsg.name());
    System.out.print("\t");
    System.out.println(event.closure());
    }

    public void onUpdateMsg(UpdateMsg updateMsg, OmmConsumerEvent event)
    {
    System.out.print("onUpdateMsg: \t");
    System.out.print(updateMsg.name());
    System.out.print("\t");
    System.out.println(event.closure());
    }


    public void onStatusMsg(StatusMsg statusMsg, OmmConsumerEvent event)
    {
    System.out.print("onStatusMsg: \t");
    System.out.print(statusMsg.name());
    System.out.print("\t");
    System.out.println(event.closure());
    }

    ** Here this is the result **

    onRefreshMsg: 	IBM.N	EQUITY_CLOSURE
    onRefreshMsg: JPY= CURRENCY_CLOSURE
    onRefreshMsg: EUR= CURRENCY_CLOSURE
    onRefreshMsg: 0#.SETI CHAIN_CLOSURE
    onRefreshMsg: GBP= CURRENCY_CLOSURE
    onStatusMsg: THIS_IS_A_NON_EXISTING_RIC ETC_CLOSURE
    onRefreshMsg: TRI.N EQUITY_CLOSURE
    onUpdateMsg: JPY= CURRENCY_CLOSURE
    onUpdateMsg: JPY= CURRENCY_CLOSURE
    onUpdateMsg: JPY= CURRENCY_CLOSURE
    onUpdateMsg: JPY= CURRENCY_CLOSURE
    onUpdateMsg: EUR= CURRENCY_CLOSURE
    onUpdateMsg: EUR= CURRENCY_CLOSURE

    Hope this helps!

Answers