Partage
  • Partager sur Facebook
  • Partager sur Twitter

Client rmi

    16 mars 2010 à 10:13:46

    Bonjour à tous

    je suis en train de développer une communication Rmi en java et après moult problèmes j'ai réussi à faire un serveur :


    public class maclasse extends UnicastRemoteObject implements moninterface{
    
    
    	// constructeur
    	public maclasse() throws RemoteException
    	{
    		super();
    	}// fin constructeur
    
    	@Override
    	public Integer donnesolde(String nom) throws RemoteException 
    	{
    	// TODO Auto-generated method stub
    	return 9;
    	}
    
    // création du service
    	public static void main (String[] arg)
    	{
    		String url = "//B57B58p23/moninterface";	
    		try
    		{
    			// Rmi policy
    			System.setProperty("java.security.policy", 
    					"E:/BTS2/brehault/ServeurRMI/bin/policy");
    
    			// installation d'un gestionnaire de sécurité
    			if (System.getSecurityManager() == null) 
    			{
    	            System.setSecurityManager(new SecurityManager());  
    			}
    			//lancement du rmi registry par code
    			LocateRegistry.getRegistry();
    			Registry registry = LocateRegistry.createRegistry(5005);
    
    			moninterface serveurEcho=new maclasse();
    			
    			//enregistrement du service rmi dans la machine
    			registry.rebind(url,serveurEcho);
    			
    			System.out.println("Serveur rmi pret");
    		} 
    		catch (Exception e)
    		{
    			System.err.println(" Erreur " + e + " lors du lancement du serveur rmi");
    		}
    	}// main
    
    }// fin classe
    

    cela marche mais le client me met une erreur AccesscontrolException et je ne comprend pas pourquoi :


    code du client:
    public class maclasseclient 
    {
    
    static Integer soldeperso;
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] arg) {
    		
    		// Rmi policy
    		System.setProperty("java.security.policy", 
    				"E:/BTS2/brehault/ClientRMI/bin/policy");
    
    		// installation d'un gestionnaire de sécurité
    		if (System.getSecurityManager() == null) 
    		{
                System.setSecurityManager(new SecurityManager());  
    		}
    		// TODO Auto-generated method stub
    		String url = "//B57B58p23/htdocs";
    		
    
    			try 
    			{			
    			
    				moninterface obj = (moninterface)Naming.lookup(url);
    				soldeperso = obj.donnesolde(new String("Moi"));
    				System.out.println("Client connecté");
    				} 
    			catch (Exception e) {
    				
    				System.err.println(" Erreur " + e + " lors du lancement du client rmi");
    			}
    			System.out.println("Le solde est de "+soldeperso);
    	}
    
    }
    

    merci d'avance!

    • Partager sur Facebook
    • Partager sur Twitter
      16 mars 2010 à 10:28:39

      Salut, tu mélanges à peu prêt tout côté serveur.

      Cette classe doit être dans une classe à part :

      class Server{
      public static void main (String[] arg)
      	{
      		String url = "//B57B58p23/moninterface";	
      		try
      		{
      			// Rmi policy
      			System.setProperty("java.security.policy", 
      					"E:/BTS2/brehault/ServeurRMI/bin/policy");
      
      			// installation d'un gestionnaire de sécurité
      			if (System.getSecurityManager() == null) 
      			{
      	            System.setSecurityManager(new SecurityManager());  
      			}
      			//lancement du rmi registry par code
      			LocateRegistry.createRegistry(5005);
      
      			
      			//enregistrement du service rmi dans le service de NOMMAGE
      			Naming.rebind(url,new maclasse(););
      			
      			System.out.println("Serveur rmi pret");
      		} 
      		catch (Exception e)
      		{
      			System.err.println(" Erreur " + e + " lors du lancement du serveur rmi");
      		}
      	}// main
      
      
      }
      


      Veilles à ce que l'interface étendent bien Remote.
      Dans l'url spécifie le numéro du port également
      • Partager sur Facebook
      • Partager sur Twitter
        16 mars 2010 à 11:20:57

        t'es sur pour le
        Naming.rebind
        
        ? parceque j'ai trouvé ici même sur ce forum que Naming n'était plus utilisée depuis 1999 et que à la place il fallait utilisée une variable Registry.

        Et su plusieurs cours et tutos j'ai vu qu'il fallait étendre avec UnicastRemoteObject .
        • Partager sur Facebook
        • Partager sur Twitter
          16 mars 2010 à 14:57:26

          Ben j'utilisais cette classe et cela marchait très bien, c'est à toi de voir.
          Edit : RMI d'origine n'est plus utilisé comme avant depuis plus de 5 ans (depuis la disparition des EJB2) :p
          • Partager sur Facebook
          • Partager sur Twitter
            17 mars 2010 à 15:08:16

            Tu utilisait RMI pour faire quoi? serveur et client sur un poste? moi c'est un serveur RMI sur un poste et client sur autre poste.
            J'ai utilisé la classe naming en locale ça marchait mais que je suis passer sur un réseau ça ne marchait plus.
            • Partager sur Facebook
            • Partager sur Twitter

            Client rmi

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown