rmi très capricieux pour le TP6

Modérateurs : graffion, jmdouin, agoncal, mlebihan

saulnierJp
Messages : 44
Inscription : 27 déc. 2016 13:06

rmi très capricieux pour le TP6

Message par saulnierJp » 18 nov. 2017 19:22

Bonjour,

J'ai bien galéré pour faire fonctionner RMI sur le TP 6 (je n'avais pas vraiment eu de souci avec le TP 5 pourtant) sur mac.

Du coup, pour ceux qui galèrent comme moi, voici la marche que j'ai suivi:

1) ant yaps-build
ant yaps-deploy

Ca, c'est bien indiqué

2) Se placer dans le répertoire Yaps/bin en mode console

3) J'ai essayé les scripts des fichiers startServer.sh et startServer3.sh. Le startServer3.sh ne fonctionne pas (j'ai plein d'erreurs disant que le service ne peut être bindé et la majorité de mes tests ne passent pas). Malheureusement, je ne sais pas pourquoi, mais si je lance le premier script, j'ai l'erreur suivante:

MBP-de-john-3:bin jsaulnier$ sh startServer.sh
4258 ttys000 0:00.00 grep rmiregistry
nov. 18, 2017 6:18:25 PM com.yaps.petstore.server.RegisterServices main
GRAVE: Petstore services couldn't be registered

Par contre, si je lance les commandes une par une, ça passe, à l'exception de la commande $RMIREGISTRY &. Je tape rmiregistry & à la place car curieusement, sinon, ça ne lance pas rmiregistry.

Du coup, je fais ça:

JAVA=$JAVA_HOME/bin/java
RMIREGISTRY=$JAVA_HOME/bin/rmiregistry

DEPLOY_DIR=../build
LIB_DIR=../lib

export CLASSPATH=$DEPLOY_DIR/server.jar:$DEPLOY_DIR/common.jar:$MYSQL_HOME/lib/mysql-connector-java-5.1.44-bin.jar
rmiregistry &
$JAVA -classpath "$CLASSPATH" com.yaps.petstore.server.RegisterServices

et là, j'obtiens bien:
nov. 18, 2017 6:20:39 PM com.yaps.petstore.server.RegisterServices main
INFOS: Petstore services are registered.

Du coup, si je lance ensuite mes tests avec ant yaps-test ou avec eclipse, ils passent tous. (pour les lancer en mode console, j'ouvre un autre onglet, bien sûr)

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

Re: rmi très capricieux pour le TP6

Message par PhilG » 18 nov. 2017 20:48

Pour ma part, j'ai essayé sans succès de le lancer avec le Tomcat.

Du coup, je me suis rabattu sur le thread en plus, le problème étant, la dernière fois le registry.

Donc, déjà, le thread:

Code : Tout sélectionner

package com.yaps.petstore.server;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.util.concurrent.atomic.AtomicBoolean;

import com.yaps.petstore.common.logging.Trace;
import com.yaps.petstore.common.rmi.RMIConstant;

public class ThreadRegistry extends Thread implements RMIConstant {

	private final String mname = "ThreadRMI";

	private final String _cname;

	private static AtomicBoolean _rmiStart;

	private static AtomicBoolean _isStop;

	private final long _wait;

	public ThreadRegistry(long wait) {
		super("Thread registry");
		_cname = this.getClass().getName();

		_rmiStart = new AtomicBoolean(false);
		_isStop = new AtomicBoolean(false);

		_wait = wait;
	}

	@Override
	public void run() {
		try {
			System.out.println("Démarage registre RMI");
			LocateRegistry.createRegistry(RMI_PORT);
			System.out.println("Registre RMI démarré");
			_rmiStart.set(true);
			while (!_isStop.get()) {
				Thread.sleep(_wait);
				System.out.println(this.getName() + " is still running");
			}
			System.out.println("Fin du Thread Registre RMI");
		} catch (RemoteException e) {
			Trace.severe(_cname, mname, "Petstore services couldn't be registered");
			Trace.throwing(_cname, mname, e);
			System.out.println("Echec du démarage registre RMI");
		} catch (InterruptedException e) {
			Trace.severe(_cname, mname, "Thread RMI Interrupted");
			Trace.throwing(_cname, mname, e);
			System.out.println("Thread RMI Interrupted");
		}
	}

	public boolean isRegistryStart() {
		return _rmiStart.get();
	}

	public void stopRegistry() {
		_isStop.set(true);
	}
}

Je le lance avec:

Code : Tout sélectionner

package com.yaps.petstore.server;

import java.rmi.Naming;

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;

public class LaunchRMI implements RMIConstant{

	// Used for logging
    private static final String _cname = LaunchRMI.class.getName();
    
    
    public static void main(final String[] args) {
        final String mname = "main";

        try {
        	final ThreadRegistry thread = new ThreadRegistry(1000 * 3600);
        	
        	thread.start();
        	
        	while(!thread.isRegistryStart()){
        		System.out.println("Waiting registry rmi...");
        		Thread.sleep(1000);
        	}
            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);
        }
    }
}

Ce qui donne en script:

Code : Tout sélectionner

@echo on

set DEPLOY_DIR=C:/Users/phili/Documents/eclipse_neon/workspace/cnan_glg203/zip/tp6/Yaps/build

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

set SECURITY=C:/Users/phili/Documents/eclipse_neon/workspace/cnan_glg203/zip/tp6/Yaps/bin/java.policy

java -cp %CLASSPATH% -Djava.util.logging.config.file=mylogging.properties -Djava.rmi.server.useCodebaseOnly=false -Djava.security.policy=%SECURITY% com.yaps.petstore.server.LaunchRMI

pause

saulnierJp
Messages : 44
Inscription : 27 déc. 2016 13:06

Re: rmi très capricieux pour le TP6

Message par saulnierJp » 18 nov. 2017 23:55

C'est fou que l'on galère autant sur le rmiregistry. Je ne comprends pas, la dernière fois, à part le script sh qui ne marchait pas pour moi (toujours ce fameux $RMIREGISTRY & qui ne faisait rien chez moi, ce qui fait que j'avais dû exécuter chaque ligne du fichier sh à la main et tout s'était bien passé ensuite), là, j'ai vraiment galéré: soit ça fonctionnait pour les tests mais pas lorsque je me rendais sur la page et validais le formulaire, soit ça passait pour le formulaire mais pas pour les tests.

J'ai fini par réussir à tout faire fonctionner, mais ça me parait bien sensible, le rmi. Une commande exécutée dans le mauvais répertoire, ou avant une autre commande et rien ne fonctionne.

Bonne idée le thread, ça me rappelle ce qu'on avait fait en NSY102. J'ai aussi mis un fichier policy, mais il ne semble pas que ça ait un impact ici (quand ça ne marchait pas, j'ai tenté de le rajouter, mais ça ne changeait rien).

J'espère que tu as pu faire passer tes tests grâce au thread. Bon courage aux autres également, je suis content d'en avoir fini avec ce TP. On est déjà arrivé à la moitié des TP à rendre ce semestre!

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

Re: rmi très capricieux pour le TP6

Message par PhilG » 19 nov. 2017 11:14

J'ai rendu le TP hier et tous les tests sont passés!

En ce qui me concerne, c'est le registre RMI qui pose problème.

C'est pour ça que je préfère le lancer par Java.

J'ai essayé de le lancer par Tomcat (avec un Contexte Listener), mais ça n'a malheureusement pas marché.

saulnierJp
Messages : 44
Inscription : 27 déc. 2016 13:06

Re: rmi très capricieux pour le TP6

Message par saulnierJp » 19 nov. 2017 15:57

Cool!

Je n'ai pas essayé de le lancer par tomcat (je ne saurais pas faire)

Je suis les commandes du fichier startServeur.sh en les exécutant une par une et en me plaçant bien dans le répertoire Yaps/bin.

Bon, les deux prochains TP concernent surtout la vue, ça devrait être un peu plus reposant. Je vais lire un peu en avance sur le JPA, je risque de ne pas pouvoir venir au cours (vacances scolaire avec mes enfants, gloups)

agneska
Messages : 16
Inscription : 31 oct. 2017 12:08

Re: rmi très capricieux pour le TP6

Message par agneska » 20 nov. 2017 22:00

J'ai une erreur de RMI au TP6, mais differente de celle au TP5. Probleme de lecture de RegisterServices. Pourtant le fichier est la. Avez vous des idees?

MacBook-Air-Agnieszka-4:bin Agnieszka$ sh startServer2.sh
73762 ttys019 3:20.20 /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Contents/Home/bin/rmiregistry
81353 ttys019 0:00.00 grep rmiregistry
Error: Could not find or load main class com.yaps.petstore.server.RegisterServices
MacBook-Air-Agnieszka-4:bin Agnieszka$ sh startServer3.sh
73762 ttys019 3:20.39 /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Contents/Home/bin/rmiregistry
81389 ttys019 0:00.00 grep rmiregistry
mkdir: /usr/local/java/apache-tomcat-7.0.55//webapps/petstore: No such file or directory
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
Error: Could not find or load main class com.yaps.petstore.server.RegisterServices
MacBook-Air-Agnieszka-4:bin Agnieszka$

saulnierJp
Messages : 44
Inscription : 27 déc. 2016 13:06

Re: rmi très capricieux pour le TP6

Message par saulnierJp » 20 nov. 2017 23:53

As-tu tenté de faire un ant yaps-build et un ant yaps-deploy? Sans la première commande, j'avais le même souci que toi.

agneska
Messages : 16
Inscription : 31 oct. 2017 12:08

Re: rmi très capricieux pour le TP6

Message par agneska » 26 nov. 2017 23:55

Effectivement c'etait "ant yaps-build" et un "ant yaps-deploy" + redefinition du chemain d'access pour tomcat. (j'ai du coder en dur).
J'avais essaye de lancer qch qui n'existait pas encore ... :)
Merci.

Répondre

Qui est en ligne ?

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