IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Comment obtenir 2 SLSB différent par 2 appels successif


Sujet :

Java EE

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut Comment obtenir 2 SLSB différent par 2 appels successif
    Bonjour,

    je fais un tutoriel sur les EJB et je veux montrer la différence entre un stateless session bean et un statefull session bean. Je veux montrer que le premier garde son etat (s'il en a un) mais que 2 appels successifs ne renvoie pas forcément le même SLSB : il renvoie le SLSB qui est prêt dans le pool. Or je n'arrive pas à obtenir 2 SLSB différents par 2 appels successif. Le système me renvoie toujours le même SLSB.

    Auriez-vous une idée ? Merci d'avance

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonjour,
    Peut on savoir comment tu fais ton test?
    Et comment sais tu qu'il te renvoie le même EJB?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour Devservlet et merci pour ta réponse,

    Je fais le test suivant

    1) j'ai un SLSB avec un attribut List<String> books
    2) Depuis un client java je demande de rentrer un livre ou de sortir et je fais un lookup (jndi) sur mon objet SLSB pour rajouter à la liste
    3) à partir de mon client et du précédent lookup je rentre un deuxième livre (en proposant de la même manière) et le rajoute à la liste
    4) je fais un deuxième lookup sur mon SLSB et je regarde ce qu'il y a dans l'attribut List<String> books et je m'appercoit qu'il y a les 2 livres.

    Donc j'ai le même SLSB par 2 lookup différent.

    J'ai essayé de rajouter des thread (jusqu'à 1000) pour, en parallele

    1) SOIT lancer des lookup pour obtenir mon SLSB
    2) SOIT appeler une servlet qui a pour attribut mon SLSB avec une pause de 5 mn
    3) SOIT appeler un autre SLSB qui instancie mon SLSB (je n'ai pas encore essayé de placer mon SLSB comme attribut encore (avec une pause))

    Voilà, je me demande quoi essayer encore. Si tu as une idée ... Merci d'avance

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Serait ce possible d'étayer chaque étape avec un bout de code?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Bonjour Devservlet et merci pour ta réponse

    Mon probléme a avancé et tu peux trouver dans le post suivant l'état des lieux (si tu pouvais m'avancer, ce serait bien)
    http://www.developpez.net/forums/d14...u/#post7992858

    Voici le bout de code que tu demande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    	private void testStatelessEjb() {
    		int max = 15;
    		TestThread [] thread = new TestThread[max];
    		for (int i = 0; i < max-1; i++) {
    			thread[i] = new TestThread(""+ i, ctx);
    		}
    
    		/*		try {
    			brConsoleReader.readLine();
    		} catch (IOException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}*/
    		try {
    
    			int choice = 1;
    			String viewClassName = LibrarySessionBeanRemote.class.getName();
    			LibrarySessionBeanRemote libraryBean = (LibrarySessionBeanRemote) ctx.lookup("EJBTutorial/EJBTutorialEJB//LibrarySessionBean!"+ viewClassName);
    			System.out.print("libraryBean.toString: " + libraryBean.toString());
    			while (choice != 2) {
    				String bookName;
    				showGUI();
    				String strChoice = brConsoleReader.readLine();
    				choice = Integer.parseInt(strChoice);
    				if (choice == 1) {
    					System.out.print("Enter book name: ");
    					bookName = brConsoleReader.readLine();
    					libraryBean.addBook(bookName);
    				} else if (choice == 2) {
    					break;
    				}
    			}
    			List<String> booksList = libraryBean.getBooks();
    			System.out.println("Book(s) entered so far: " + booksList.size());
    			for (int i = 0; i < booksList.size(); ++i) {
    				System.out.println((i + 1) + ". " + booksList.get(i));
    			}
    
    			LibrarySessionBeanRemote libraryBean1 = (LibrarySessionBeanRemote) ctx.lookup("EJBTutorial/EJBTutorialEJB//LibrarySessionBean!"
    					+ viewClassName);
    			List<String> booksList1 = libraryBean1.getBooks();
    			System.out.println("***Using second lookup to get library stateless object***");
    			System.out.println("Book(s) entered so far: " + booksList1.size());
    			for (int i = 0; i < booksList1.size(); ++i) {
    				System.out.println((i + 1) + ". " + booksList1.get(i));
    			}
    		} catch (Exception e) {
    			System.out.println(e.getMessage());
    			e.printStackTrace();
    		} finally {
    			try {
    				for (int i = 0; i < max-1; i++) {
    					thread[i].interrupt();
    				}
    				brConsoleReader.readLine();
    				if (brConsoleReader != null) {
    					brConsoleReader.close();
    				}
    			} catch (IOException ex) {
    				System.out.println(ex.getMessage());
    			}
    		}
    au depart, lors des 2 appels lookup soulignés en rouge, je récupérais le même stateless session bean avec le même état. Or je voulais montrer le contraire

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 728
    Points : 250
    Points
    250
    Par défaut
    Re-bonjour,

    j'ai finalement compris le problème général.

    Quand on fait un remote lookup sur un SLSB en tant que client, l'application coté serveur renvoie un proxy. Quand on invoque une méthode sur ce proxy, le serveur utilisera un SLSB aléatoire du pool.

    Du coup quand je faisait 2 appels successifs coté client, le pool coté serveur étant constitué de 1 seul SLSB j'utilisais le même SLSB qui a le même état. Quand je créé 15 SLSB avec 15 thread différents, et que par la suite je fais un remote lookup, le proxy invoquera l'un des SLSB se trouvant dans le pool qui n'est plus constitué de 1 SLSB mais de plusieurs (dans mon cas 13). le SLSB utilisé par le lookup sera aléatoire parmi le pool (parmi les 13 dans mon cas). La discussion est résolue.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment obtenir la bonne valeur par défaut?
    Par Xtrem_Voyageur dans le forum C++
    Réponses: 6
    Dernier message: 25/10/2011, 00h09
  2. Réponses: 1
    Dernier message: 18/04/2007, 20h34
  3. Réponses: 9
    Dernier message: 21/11/2006, 11h16
  4. Comment obtenir la description des tables par SQL
    Par rcastaldi dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 15/03/2004, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo