This forum has been archived. Please start a new discussion on GitHub.

IceStorm in IceGrid with fixed endpoints

I do not post very often, but this forum is a really good source of solutions, so I don't need to post ! ;)
However, this time I didn't find any answer to my problem...

We've integrated IceStorm in our application (successfully) and we are now thinking about using IceGrid. So we'd like to integrate IceStorm in IceGrid.

We are searching a way to configure an IceStorm instance on the grid that can be reached both by an older version of our application (that is not using IceGrid) and a newer one (that is using it).

Up to now, our application was directly connected to IceStorm. So it had a fixed endpoint to the TopicManager (I mean something like "tcp -p 12345 -h somehostIP").
The new version of the application will be modified to use the "ProxyName@AdapterId" form with the Grid.

With a little test program, I tried to connect to the IceStorm instance,
first, without the Grid, with a fixed endpoint (tcp -p 12345), it worked,
then, through the Grid, with an Object ID like "ISInstance/TopicManager@ISInstance.TopicManager", it also worked
finally, with a fixed endpoint (tcp -p 12345), with the Grid where I configured the IceStorm instance to fix its TopicManager endpoint to "tcp -p 12345", it didn't work.
Each time I had a NoEndpointException that told me that there were no suitable endpoints for proxy "ISInstance/topic.MyTopic -t @ ISInstance.TopicManager". This always occured except when I defined the Ice.Default.Locator property with the IceGrid Locator endpoint

I was not able to find any way to solve this third problem. Is it possible to use a fixed endpoint to connect to an IceStorm instance in IceGrid ?



  • bernard
    bernard Jupiter, FL
    Hi Daniel,

    Here is what's happening in your 3rd test:
    • your client successfully connects to the "indirect" topic manager, using a proxy like "ISInstance/TopicManager:tcp -p 12345 -h ishost"
    • the client calls an operation that returns a topic proxy
    • IceStorm calls createProxy to create this proxy; because AdapterId is set on the corresponding adapter (TopicManager), createProxy returns an indirect proxy
    • IceStorm returns the indirect proxy to the client
    • the client gets this indirect proxy and can't resolve it

    See Creating Proxies with an Object Adapter for a description of createProxy.

    If this was not IceStorm but your own server, a work-around would be to replace (in your server) all calls to createProxy by calls to createDirectProxy. I guess you could create a custom IceStorm with this change (and test it well); however, I don't see the advantage compared to an IceGrid-less IceStorm.

    A better solution would be to update the old version of your application to set Ice.Default.Locator; this would be only a configuration change, and not a code change. In particular, the old application could use an older version of Ice.

    Best regards,
  • Thanks for your quick reply Bernard.

    I understand better now.
    I think we are going to make an update of our application. That will be a cleaner solution for us.

    I would like to congratulate you and all the ZeroC team ! It's been a year I discovered and I'm using Ice and many of its services, and I think it's a very powerful and useful solution !
    Thanks for your work !