My application works as a proxy for different users which are connecting to it to get data from TREP(ADS/ADH). I would like to use Remote authentication that entitlements are done in TREP site. I have found in RFA Java Developer Guide that
-“For remote environments, the application must supply the Tokenized Principal Identity when creating the Session. This is because remote environments authenticate the user upon the initial connection.”
- "An application may supply the Tokenized Principal Identity either when creating the Session or when configuring “userName” in SSL configuration.”
This seems that my application needs to have multiple sessions for multiple users. Is it true? If not, how to implement SSL subscriber application to have single session supporting multiple users for Remote authentication?
Hello @Akechi Sato
Unfortunately, Tokenized Principal Identity used for remote authentication (TREP works with DACS Infrastructure) is bind in Session level using Session.acquire(Sting, TokenizedPrincipalIdentity). There is no any creating Event source method that accepts TokenizedPrincipalIdentity. Only StandardPrincipalIdentity for local authentication(RFA works with DACS Infrastructure) is accepted and this allows the application can have single session. Normally, StandardPrincipalIdentity is used when the application connects to RTIC which is end of life and we do not support RFA connecting to it. Hence, this is impossible that the application will have single Session for multiple users with Remote authentication.
There are 2 possible workarounds that I suggest:
The example in the Tutorial 5 does not use MarketData interface(Legacy interface) that your application use; it uses OMM interface.If you would not like to migrate to OMM interface, you can modify your application based on the Tutorial. However, some steps must be changed for MarketData interface as listed below:
protected void processConnectionEvent(ConnectionEvent connectionEvent){ if(connectionEvent.getConnectionStatus().getState() == ConnectionStatus.UP) { //highlight source code in step 2.1 ... } }
protected void processMarketDataItemEvent(MarketDataItemEvent marketDataItemEvent) { ... else if (marketDataItemEvent.getMarketDataMsgType() == MarketDataItemEvent.PERMISSION_DATA) { // PERMISSION_DATA, System.out.println("Received MARKET_DATA_ITEM_EVENT (misc), service = "+ marketDataItemEvent.getServiceName() + ", msgType = " + marketDataItemEvent.getMarketDataMsgType() + ", item = "+ marketDataItemEvent.getItemName()); byte [] dacsLock = null; dacsLock = marketDataItemEvent.getData().clone(); System.out.println("DACS Lock was got from the Permission data"); } }