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

Not specying IceStorm version in Icebox broken on 3.4 ?

With Ice 3.3 on Linux and windows we have the following xml to register an icestorm server

<icebox id="IceBoxServer" exe="icebox" activation="on-demand">
<service name="IceStorm" entry="IceStormService:createIceStorm">

However with Ice 3.4 on Windows we get the following error :

!! 08/12/10 14:34:40.309 IceBoxServer: error: ServiceManager: unable to load entry point `IceStormService:createIceStorm'
!! 08/12/10 14:34:40.340 IceBoxServer: error: ServiceManager: unable to load entry point `IceStormService:createIceStorm'
!! 08/12/10 14:34:40.371 IceBoxServer: error: ServiceManager: unable to load entry point `IceStormService:createIceStorm'
!! 08/12/10 14:34:40.402 IceBoxServer: error: ServiceManager: unable to load entry point `IceStormService:createIceStorm'

This is solved by adding the version number :
<service name="IceStorm" entry="IceStormService,34:createIceStorm">
However I wish to suport both 3.3 and 3.4 and I though that the version was optional.
What is wrong ?



  • mes
    mes California

    The version specifier is required for IceBox services (including IceStorm). IceBox does not automatically append the Ice version to service entry points because it's unlikely that a user-written service would have the same version as Ice. I just tried a simple IceGrid deployment of IceStorm with Ice 3.3 on Linux and the version specifier was required there as well, so I'm not sure why it's working for you without the version.

  • Hi,
    I tested again and it does seem to work on an ubuntu 10.04 installation with the default ice packages.

    In addition reading the documentation for 330 I can read

    The first argument in the property value is the entry point specification. For
    C++ services, this must have the form library[,version]:symbol, where library is
    the simple name of the service’s shared library or DLL, and symbol is the name of
    the entry point function. By simple name, we mean a name without any platform-
    specific prefixes or extensions; the server adds appropriate decorations depending
    on the platform. The version is optional. If specified, the version is embedded in
    the library name.
    If it is not supposed to work, Can I then find the ice version in a variable so that I can use the same xml declaration for 3.3 and 3.4 ?
    something like IceBox.Service.IceStorm=IceStormService,${ice_version}:createIceStorm

    Thank you
  • mes
    mes California

    You only need to specify a version in the entry point of an IceBox service if its shared library has a version suffix. For example, on RHEL the IceStorm service library is called, therefore the version must be specified in its entry point. Perhaps it works for you on Ubuntu because the IceStorm service library does not have a version suffix, or there is a symbolic link without the version suffix?

    IceGrid does not pre-define a variable containing the Ice version, but you can certainly define such a variable yourself during deployment, such as:

    % icegridadmin --Ice.Config=... -e "application add app.xml ice-version=33"