Home Help Center

Ice::Plugin && Ice::LoggerPlugin

AndrewAndrew Member Andrea NicotraOrganization: PersonalProject: Backend for IPTV
hi, I try to make a plugin for send the logs messages to an icestorm service

but when i try to do the checkedCast I receive an exception ( icestorm service is up because is used from other client)

the exception is that:
Ice::Excetpion : Reference.cpp:1585: Ice::NoEndpointException:
no suitable endpoint available for proxy `MyStorm/TopicManager -t @ StormAdapter'
void
IceLoggerPlugin::initialize()
{
       ...
        try
        {
                IceStorm::TopicManagerPrx topicManager = IceStorm::TopicManagerPrx::checkedCast(m_com->stringToProxy(props->getProperty("Log.topicManagerPrx") ));
        }
        catch(Ice::Excetpion& ex )
        {
                cout << "  Ice::Excetpion : "<< ex.what()  << endl;
        }

}

Comments

  • mesmes CaliforniaAdministrators, ZeroC Staff Mark SpruiellOrganization: ZeroC, Inc.Project: Ice Developer ZeroC Staff
    Hi Andrew,

    Your plugin is attempting to use an indirect proxy, which requires that the communicator be configured with a locator. However, Ice does not configure the communicator's default locator until after the plugins are initialized. This is necessary because the locator's proxy might use endpoints that depend on a transport plugin.

    You should be able to work around this by manually configuring your proxy with a locator. For example:
    Ice::ObjectPrx obj =
        m_com->stringToProxy(props->getProperty("Ice.Default.Locator"));
    Ice::LocatorPrx locator = Ice::LocatorPrx::checkedCast(obj);
    obj = m_com->stringToProxy(props->getProperty("Log.topicManagerPrx"));
    obj = obj->ice_locator(locator);
    IceStorm::TopicManagerPrx topicManager =
        IceStorm::TopicManagerPrx::checkedCast(obj);
    
    Also note that if your logger uses SSL, you must ensure that the IceSSL plugin is loaded before your logger plugin.

    Hope that helps,
    Mark
Sign In or Register to comment.