Exception RMI

Modérateurs : graffion, jmdouin, agoncal, mlebihan

PhilG
Messages : 21
Inscription : 12 nov. 2017 10:25

Exception RMI

Message par PhilG » 12 nov. 2017 10:33

Bonjour,

Après divers problèmes, j'ai réussi à faire tourner le script.

Ou plutôt un script modifié.

1) J'ai construit les classes avec Ant.

2) J'ai modifié le script comme il suit:

Code : Tout sélectionner

@echo on

set JAVA="%JAVA_HOME%\bin\java"

set DEPLOY_DIR="C:\Users\phili\Documents\eclipse_neon\workspace\cnan_glg203\zip\tp5\Yaps\build"

set CLASSPATH="%DEPLOY_DIR%\server.jar;%DEPLOY_DIR%\common.jar;%MYSQL_HOME%\lib\mysql-connector-java-5.1.21-bin.jar"

set SECURITY="C:\Users\phili\Documents\eclipse_neon\workspace\cnan_glg203\zip\tp5\Yaps\bin\java.policy"

%JAVA% -cp %CLASSPATH% -Djava.util.logging.config.file=mylogging.properties -Djava.security.policy=%SECURITY% com.yaps.petstore.server.RegisterServices

pause
3)J'ai, dans une ligne de commande séparé, lancé RMI avec:
start rmiregistry –J-Djava.rmi.server.useCodebaseOnly=false

4) J'ai lancé le script et j'ai l'exception suivante:

Code : Tout sélectionner

<record>
  <date>2017-11-12T09:31:01</date>
  <millis>1510475461897</millis>
  <sequence>68</sequence>
  <logger>com.yaps.petstore</logger>
  <level>FINER</level>
  <class>com.yaps.petstore.server.RegisterServices</class>
  <method>main</method>
  <thread>1</thread>
  <message>THROW</message>
  <exception>
    <message>java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: com.yaps.petstore.server.service.catalog.CatalogService_Stub</message>
    <frame>
      <class>sun.rmi.server.UnicastServerRef</class>
      <method>oldDispatch</method>
      <line>421</line>
    </frame>
    <frame>
      <class>sun.rmi.server.UnicastServerRef</class>
      <method>dispatch</method>
      <line>272</line>
    </frame>
    <frame>
      <class>sun.rmi.transport.Transport$1</class>
      <method>run</method>
      <line>200</line>
    </frame>
    <frame>
      <class>sun.rmi.transport.Transport$1</class>
      <method>run</method>
      <line>197</line>
    </frame>
    <frame>
      <class>java.security.AccessController</class>
      <method>doPrivileged</method>
    </frame>
    <frame>
      <class>sun.rmi.transport.Transport</class>
      <method>serviceCall</method>
      <line>196</line>
    </frame>
    <frame>
      <class>sun.rmi.transport.tcp.TCPTransport</class>
      <method>handleMessages</method>
      <line>568</line>
    </frame>
    <frame>
      <class>sun.rmi.transport.tcp.TCPTransport$ConnectionHandler</class>
      <method>run0</method>
      <line>826</line>
    </frame>
    <frame>
      <class>sun.rmi.transport.tcp.TCPTransport$ConnectionHandler</class>
      <method>lambda$run$0</method>
      <line>683</line>
    </frame>
    <frame>
      <class>java.security.AccessController</class>
      <method>doPrivileged</method>
    </frame>
    <frame>
      <class>sun.rmi.transport.tcp.TCPTransport$ConnectionHandler</class>
      <method>run</method>
      <line>682</line>
    </frame>
    <frame>
      <class>java.util.concurrent.ThreadPoolExecutor</class>
      <method>runWorker</method>
      <line>1142</line>
    </frame>
    <frame>
      <class>java.util.concurrent.ThreadPoolExecutor$Worker</class>
      <method>run</method>
      <line>617</line>
    </frame>
    <frame>
      <class>java.lang.Thread</class>
      <method>run</method>
      <line>745</line>
    </frame>
    <frame>
      <class>sun.rmi.transport.StreamRemoteCall</class>
      <method>exceptionReceivedFromServer</method>
      <line>276</line>
    </frame>
    <frame>
      <class>sun.rmi.transport.StreamRemoteCall</class>
      <method>executeCall</method>
      <line>253</line>
    </frame>
    <frame>
      <class>sun.rmi.server.UnicastRef</class>
      <method>invoke</method>
      <line>379</line>
    </frame>
    <frame>
      <class>sun.rmi.registry.RegistryImpl_Stub</class>
      <method>rebind</method>
    </frame>
    <frame>
      <class>java.rmi.Naming</class>
      <method>rebind</method>
      <line>177</line>
    </frame>
    <frame>
      <class>com.yaps.petstore.server.RegisterServices</class>
      <method>main</method>
    </frame>
  </exception>
 
Merci d'avance.

graffion
Messages : 635
Inscription : 21 juin 2005 14:05

Re: Exception RMI

Message par graffion » 13 nov. 2017 14:04

Bonjour,
3)J'ai, dans une ligne de commande séparé, lancé RMI avec:
start rmiregistry –J-Djava.rmi.server.useCodebaseOnly=false
Vous n'avez sans doute pas positionné le CLASSPATH dans cette fenêtre séparée de ligne de commande :

Code : Tout sélectionner

set CLASSPATH="%DEPLOY_DIR%\server.jar;%DEPLOY_DIR%\common.jar;%MYSQL_HOME%\lib\mysql-connector-java-5.1.21-bin.jar"
rmiregistry

PhilG
Messages : 21
Inscription : 12 nov. 2017 10:25

Re: Exception RMI

Message par PhilG » 14 nov. 2017 7:28

Bon, ce n'est pas la solution parfaite, mais j'ai réussi à faire tourner les tests et à enfin rendre le TP sans fautes, ou sans fautes graves;

J'ai simplement lancer le serveur RMI dans un Thread séparé avec :

Code : Tout sélectionner

LocateRegistry.createRegistry(RMI_PORT);
En changeant la classe server, on a:

Code : Tout sélectionner

package com.yaps.petstore.server;

import com.yaps.petstore.common.logging.Trace;
import com.yaps.petstore.common.rmi.RMIConstant;
import com.yaps.petstore.server.service.catalog.CatalogService;
import com.yaps.petstore.server.service.customer.CustomerService;
import com.yaps.petstore.server.service.order.OrderService;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

/**
 * This class registers the three RMI services of the Petstore. These services are
 * CatalogService, CustomerService and OrderService. This class has to be launched once
 * on the server side. Without registering, the 3 services would not be accessible
 * from the client.
 * 
 * @see CatalogService
 * @see CustomerService
 * @see OrderService
 */
public final class RegisterServices implements RMIConstant {

    // Used for logging
    private static final String _cname = RegisterServices.class.getName();

    public static void main(final String[] args) {
        final String mname = "main";

        new ThreadRMI().start();
        
        try {
            Naming.rebind(CATALOG_SERVICE, new CatalogService());
            Naming.rebind(CUSTOMER_SERVICE, new CustomerService());
            Naming.rebind(ORDER_SERVICE, new OrderService());
            Trace.info(_cname, mname, "Petstore services are registered.");
        } catch (Exception e) {
            Trace.severe(_cname, mname, "Petstore services couldn't be registered");
            Trace.throwing(_cname, mname, e);
        }
    }
    
    private static class ThreadRMI extends Thread{
    	
    	public ThreadRMI() {
			super("ThreadRMI");
		}
    	
    	@Override
    	public void run() {
    		String mname = "ThreadRMI";
    		try {
    			LocateRegistry.createRegistry(RMI_PORT);
    			while (isInterrupted()) {
					//Do nothing
				}
    		} catch (RemoteException e1) {
    			Trace.severe(_cname, mname, "Petstore services couldn't be registered");
                Trace.throwing(_cname, mname, e1);
    		}
    	}
    }
}

Ruddy Reisberg
Messages : 41
Inscription : 01 nov. 2016 16:13

Re: Exception RMI

Message par Ruddy Reisberg » 14 nov. 2017 17:31

Bonjour j'ai terminé de faire le yaps-build
maintenant je me retrouve avec les memes erreurs que celles que je vois sur le forum quand je lance moi meme le startServer
il me fait toutes les lignes mais dés que j'arrive à celle de rmiregistry c'est fini( voir trace du dessous)

Est ce quelqu'un a trouvé la bonne procédure à faire dans le bon ordre?
Combien de cmd a ouvrir?
Et quel fichier lancer en premier?



Merci de votre aide




C:\Users\ruddy\workspace\SourcesFournis_TP05\Yaps\bin>start C:\Users\ruddy\OneDrive\Documents\bin\rmiregistry

C:\Users\ruddy\workspace\SourcesFournis_TP05\Yaps\bin>C:\Users\ruddy\OneDrive\Documents\Java\jdk1.8.0_101\bin\java -cp C:\Users\ruddy\workspace\SourcesFournis_TP05\Yaps\build\server.jar;C:\Users\ruddy\workspace\SourcesFournis_TP05\Yaps\build\common.jar;C:\Applications\mysql\lib\mysql-connector-java-5.1.21-bin.jar -Djava.util.logging.config.file=mylogging.properties com.yaps.petstore.server.RegisterServices
nov. 14, 2017 4:15:49 PM sun.rmi.transport.tcp.TCPEndpoint <clinit>
PR╔CIS: main: localHostKnown = true, localHost = 192.168.1.18
nov. 14, 2017 4:15:49 PM sun.rmi.transport.tcp.TCPTransport <init>
PR╔CIS: main: Version = 2, ep = [192.168.1.18:0]
nov. 14, 2017 4:15:49 PM sun.rmi.transport.tcp.TCPEndpoint getLocalEndpoint
PR╔CIS: main: created local endpoint for socket factory null on port 0
nov. 14, 2017 4:15:49 PM sun.rmi.transport.tcp.TCPTransport listen
PR╔CIS: main: (port 0) create server socket
nov. 14, 2017 4:15:49 PM sun.rmi.transport.tcp.TCPEndpoint setDefaultPort
PR╔CIS: main: default port for server socket factory null and client socket factory null set to 54783
nov. 14, 2017 4:15:49 PM sun.rmi.transport.tcp.TCPTransport$AcceptLoop executeAcceptLoop
PR╔CIS: RMI TCP Accept-0: listening on port 54783
nov. 14, 2017 4:15:49 PM sun.rmi.server.UnicastRef newCall
PR╔CIS: main: get connection
nov. 14, 2017 4:15:49 PM sun.rmi.transport.tcp.TCPChannel createConnection
PR╔CIS: main: create connection
nov. 14, 2017 4:15:49 PM sun.rmi.transport.proxy.RMIMasterSocketFactory createSocket
PR╔CIS: main: host: 192.168.1.18, port: 1099
nov. 14, 2017 4:15:50 PM com.yaps.petstore.server.RegisterServices main
GRAVE: Petstore services couldn't be registered

PhilG
Messages : 21
Inscription : 12 nov. 2017 10:25

Re: Exception RMI

Message par PhilG » 14 nov. 2017 17:52

Ce qu'il faut normalement faire (d'après ce que j'ai compris):
1) Construire server.jar et common.jar
2) Lancer le script. Il lance le registre RMI et après, la classe RegisterServices

Variante séparation:
1) Construire server.jar et common.jar
2) Lancer le registre RMI séparément (start rmiregistry –J-Djava.rmi.server.useCodebaseOnly=false)
3) Remanier le script pour ne lancer que la classe RegisterServices

Variante qui marche chez moi:
J'avais beau lancer le Registre RMI, les classes ne s'enregistrait pas.
En fouillant divers forum, j'ai vu que l'on pouvait lancer un registre RMI (LocateRegistry.createRegistry(RMI_PORT);).

Je l'ai donc lancé dans le code de RegisterServices, dans un Thread séparé en m'arrangeant que le Thread continue à tourner.
D'où le code mis ce matin;

Ce code a été fait entre 5H30 et 6H30 du matin, je pense qu'il est perfectible (par exemple, en mettant setDeamon(true)).

Cordialement.

Ruddy Reisberg
Messages : 41
Inscription : 01 nov. 2016 16:13

Re: Exception RMI

Message par Ruddy Reisberg » 14 nov. 2017 17:55

Merci beaucoup pour ta réponse

Voici mon script; qu'en penses tu juste? Il n'y a pas de truc qui flashes a premiere vue?


@echo on

set JAVA=%JAVA_HOME%\bin\java
set RMIREGISTRY=C:\Users\ruddy\OneDrive\Documents\bin\rmiregistry

set DEPLOY_DIR=C:\Users\ruddy\workspace\SourcesFournis_TP05\Yaps\build
set LIB_DIR=C:\Applications\mysql\lib\

set CLASSPATH=%DEPLOY_DIR%\server.jar;%DEPLOY_DIR%\common.jar;%MYSQL_HOME%\lib\mysql-connector-java-5.1.21-bin.jar

start %RMIREGISTRY%

%JAVA% -cp %CLASSPATH% -Djava.util.logging.config.file=mylogging.properties com.yaps.petstore.server.RegisterServices

pause



Et le fichier ant


set JAVA_HOME=C:\Users\ruddy\OneDrive\Documents\Java\jdk1.8.0_101
set JRE_HOME=C:\Users\ruddy\OneDrive\Documents\Java\jdk1.8.0_101\jre
set TOMCAT_HOME=C:\Applications\apache-tomcat-7.0.75
set CATALINA_HOME=%TOMCAT_HOME%
set ANT_HOME=C:\Applications\java\apache-ant-1.9.4
set JUNIT_HOME=C:\Applications\java\junit4.4
set MYSQL_HOME=C:\Applications\mysql



PATH "%JRE_HOME%\bin";"%JAVA_HOME%\bin";%TOMCAT_HOME%\bin;%ANT_HOME%\bin;%PATH%

set CLASSPATH=.;%JUNIT_HOME%\junit-4.4.jar


set HTTPUNIT_HOME=C:\Applications\java\httpunit-1.6.2
set DOM4J_HOME=C:\Applications\java\dom4j-1.6.1

PhilG
Messages : 21
Inscription : 12 nov. 2017 10:25

Re: Exception RMI

Message par PhilG » 14 nov. 2017 21:44

Il n'est pas nécessaire de toucher le fichier ANT. En ce qui me concerne, je n'ai pas eu à le faire.

Par contre, dans un premier temps, j'ai enlevé tout ce qui correspond au lancement du registre RMI du script .bat.

Ce qui donne pour moi:

Code : Tout sélectionner

@echo on

@echo on

set JAVA="%JAVA_HOME%\bin\java"

set DEPLOY_DIR="C:\Users\phili\Documents\eclipse_neon\workspace\cnan_glg203\zip\tp5\Yaps\build"

set CLASSPATH="%DEPLOY_DIR%\server.jar;%DEPLOY_DIR%\common.jar;%MYSQL_HOME%\lib\mysql-connector-java-5.1.21-bin.jar"

set SECURITY="C:\Users\phili\Documents\eclipse_neon\workspace\cnan_glg203\zip\tp5\Yaps\bin\java.policy"

%JAVA% -cp %CLASSPATH% -Djava.util.logging.config.file=mylogging.properties -Djava.security.policy=%SECURITY% com.yaps.petstore.server.RegisterServices

pause
Je rappelle qu'il faut un registre RMI qui tourne pour faire marcher un serveur RMI, lancé par:

Code : Tout sélectionner

start rmiregistry –J-Djava.rmi.server.useCodebaseOnly=false

Ruddy Reisberg
Messages : 41
Inscription : 01 nov. 2016 16:13

Re: Exception RMI

Message par Ruddy Reisberg » 15 nov. 2017 1:05

Super merci beaucoup, j'ai réussi a lever les embuches en modifiant le regiserServices comme tu l'as fait, ca tourne bien

Merci encore!

PhilG
Messages : 21
Inscription : 12 nov. 2017 10:25

Re: Exception RMI

Message par PhilG » 15 nov. 2017 8:14

Pas de quoi.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité