0

私のアプリケーションは、(JDBC を使用して) データベース上のデータを操作するクライアント要求を処理するために rmi を使用します。そのスケルトンが各クライアントの操作要求に対してスレッドを実行することを望みます。私はただのようなものにする必要があります

public MySkeleton implement MyInterface {
    public string method1() {
        myThread.start();
    }

または、他の何か?

4

2 に答える 2

4

特別なことをする必要はまったくありません。RMI フレームワークが新しいスレッドを自動的にスピンオフします。可能な限り単純なサーバーで試してみてください。新しいクライアントが接続するたびに、常にサーバーにすぐに接続できることがわかります。

public interface Server extends java.rmi.Remote {
    void doIt () throws java.rmi.RemoteException;
}

public class ServerImpl extends java.rmi.server.UnicastRemoteObject implements Server {
    public ServerImpl() throws java.rmi.RemoteException {
            super();
    }

    public void doIt () {
            System.out.println ("Starting in " + Thread.currentThread().getName());
            try { Thread.sleep(10000); } catch(InterruptedException t) {}
            System.out.println ("Stopping in " + Thread.currentThread().getName());
    }

    public static void main (String[] argv) throws Exception {
            java.rmi.registry.LocateRegistry.createRegistry(1099);
            java.rmi.Naming.rebind ("//localhost/Server", new ServerImpl ());
    }
}

public class Client {
    public static void main(String[] argv) throws Exception {
            ((Server) java.rmi.Naming.lookup("Server")).doIt();
    }
}
于 2013-06-26T20:14:15.093 に答える