Hello,
I need solution for this:
My application when started have its own thread and in another thread I want
to start XML-RPC WebServer class. Both classes got instance of Communicator
class that is handling communication between these two classes via
synchronized methods.

Something like this:

public class MyApp extends Thread {

    public static void main(String[] args) throws Exception {

       Communicator comm = new Communicator();
       MyApp app = new MyApp(comm);
       app.start();
        MyRpcServer server = new MyRpcServer(8080,comm);
        server.start();
    }
}

And MyRpcServer class:

import org.apache.xmlrpc.server.*;
import org.apache.xmlrpc.webserver.*;

public class MyRpcServer extends WebServer {

    private Communicator comm;

    MyRpcServer(int port,Communicator comm) throws Exception {
        super(port);

        this.comm = comm;

        XmlRpcServer xmlRpcServer = this.getXmlRpcServer();

        PropertyHandlerMapping phm = new PropertyHandlerMapping();
        phm.addHandler("Foo",Foo.class);

        xmlRpcServer.setHandlerMapping(phm);

        XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl)
xmlRpcServer
                .getConfig();
        serverConfig.setEnabledForExtensions(true);
        serverConfig.setContentLengthOptional(false);

    }

}

(MyRpcServer is little adjusted example from Apache XML-RPC site)

Until there everything is ok.
But where is problem:

When there comes request to do something with any Foo class method via
XML-RPC I need to do something in Foo class but I need there the instance of
Communicator! Because after doing something in Foo I have to send command
via Communicator to the MyApp thread.
So I have to know how I can pass the comm instance of Communicator (private
property of MyRpcServer) to Foo class method.

If I have something like this:

public class Foo {
    public int doSomething(int rpcParam1, int rpcParam2) {
        //do something what I want to tell to MyApp thread
        return x;
    }
}

I imagine (naively :-) something like this

public class Foo {
    public int doSomething(Communicator comm, int rpcParam1, int rpcParam2)
{
        comm.addCommand(rpcParam1);
        return x;
    }
}

where comm parameter is the instance passed from MyRpcServer automatically
when Foo.doSomething is requested.

Is there any other way how to get this instance?

Thank you very much for any advice or pointing to any url for solution.

Petr Simek

Reply via email to