2013-06-26 3 views
0

Mon application utilise rmi pour servir une requête client pour manipuler des données sur une base de données (en utilisant JDBC). Je voudrais que ce squelette exécute un thread pour la demande d'opération de chaque client. J'ai juste besoin de quelque chose commeRMI multithread skeleton

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

ou autre chose?

+0

Certainement pas 'run()'. Les threads sont démarrés avec 'Thread # start()'. –

+0

oui, juste confus – giozh

+0

OK, maintenant votre thread va démarrer et exécuter la méthode 'run' que vous avez écrasée, ou celle d'un' Runnable' que vous avez passé dans son constructeur. –

Répondre

3

Je voudrais que le squelette courir un fil pour le fonctionnement de chaque client demande.

RMI le fait déjà.

J'ai juste besoin de quelque chose comme

Non, vous ne le faites pas. Il suffit d'écrire la méthode normalement. RMI le multithread pour vous.

+1

+1 comme toujours classique et limpide répondre. –

4

Vous n'avez pas besoin de faire quoi que ce soit de spécial, le framework RMI s'occupe automatiquement de supprimer automatiquement les nouveaux threads. Essayez-le avec le serveur le plus simple possible, vous verrez que chaque fois qu'un nouveau client se connecte, il est toujours en mesure de se connecter à la ligne droite du serveur:

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(); 
    } 
}