Différence entre @Stateless et @Singleton

Je suis ce tutoriel qui utilise également un EJB:

package exercise1;

import java.util.Random;
import javax.ejb.Stateless;
import javax.inject.Named;

@Stateless
public class MessageServerBean {
    private int counter = 0;

    public String getMessage(){
        Random random = new Random();
        random.nextInt(9999999);
        int myRandomNumber = random.nextInt();
        return "" + myRandomNumber;
    }

    public int getCounter(){
        return counter++;
    }    
}

Voici un exemple de sortie:


Bonjour de Facelets

Le Message est: 84804258

Compteur: 26

Serveur de messages Bean est: exercise1.MessageServerBean@757b6193


Voici mon observation:

  • Quand j'ai mis le bean @Stateless je reçois toujours le même ID de l'objet et le compteur incrémente toujours.
  • Quand j'ai mis le bean @Stateful - je obtenir une nouvelle instance à chaque fois que j'actualise la page.
  • Quand je l'ai mis à @Singleton - je obtenir les mêmes résultats que lorsque je l'ai mis à @Stateless: même ID de l'objet, compteur d'incrémentation.

Donc, ce que je voudrais comprendre, c'est: quelle est la différence entre @Stateless et @Singleton des Ejb dans ce cas-là?

InformationsquelleAutor godzillante | 2013-01-22