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

Wildfly/JBoss Java Discussion :

Utiliser l'annotation @Pool


Sujet :

Wildfly/JBoss Java

  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 Utiliser l'annotation @Pool
    Bonjour,

    J'utilise JBoss eap 6.2 et veux utiliser l'annotation Pool (@Pool) sur un stateless session bean

    J'ai trouvé la classe de l'annotation dans jboss-ejb3-ext-api-2.1.0.redhat-1.jar

    J'ai navigué sur internet et ai trouvé ce moyen de l'utiliser

    import org.jboss.ejb3.annotation.defaults.PoolDefaults;

    @Stateless

    @Pool (value=PoolDefaults.POOL_IMPLEMENTATION_STRICTMAX,maxSize=5,timeout=1000)

    L'éditeur se plaint

    1) il ne trouve pas org.jboss.ejb3.annotation.defaults.PoolDefaults class (ou interface ?) Je ne l'ai pas trouvé dans les jars de JBoss 6.2. J'ai trouvé une autre variante : value="ThreadLocalPool"

    2) D'après l'éditeur, il n'y a pas les attributs maxSize et timeout, ce qui est vraiment surprenant car dans tous les exemples que j'ai trouvé, ces attributs existent.

    Auriez-vous une idée de la manière d'utiliser cette annotation avec les attributs maxSize et timeout ?

  2. #2
    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,

    j'ai trouvé la réponse. C'est décrit dans la discussion suivante

    https://developer.jboss.org/message/639714#639714

    Sauriez-vous si c'est possible soit par programmation soit par un outils d'administration (jboss) de connaitre la taille du pool d'un stateless session bean quand JBoss est lancé ? Merci d'avance pour vos réponses.

  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
    Re-bonjour,

    voici mon stateles session Bean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @Stateless
    @Pool(value="PoolSize500")
    public class LibrarySessionBean implements LibrarySessionBeanRemote {
     
    	private List<String> bookShelf;
     
    	/**
    Voici mon fichier joss-ejb3.xml

    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
     
    <?xml version="1.1" encoding="UTF-8"?>
    <jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
                   xmlns="http://java.sun.com/xml/ns/javaee"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:c="urn:clustering:1.0"
                   xmlns:p="urn:ejb-pool:1.0"
                   xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
                   version="3.1"
                   impl-version="2.0">
        <enterprise-beans>
        	<session>
        		<ejb-name>LibrarySessionBean</ejb-name>
        		<ejb-class>com.tutorialspoint.sessionbean.stateless.LibrarySessionBean</ejb-class>
        	</session>
        </enterprise-beans>
        <assembly-descriptor>
    		<p:pool>
    			<ejb-name>LibrarySessionBean</ejb-name>
    			<p:bean-instance-pool-ref>PoolSize500</p:bean-instance-pool-ref> 
    		</p:pool>
        </assembly-descriptor>
    </jboss:ejb-jar>
    Voici un extrait de mon fichier standalone.xml

    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
     
           <subsystem xmlns="urn:jboss:domain:ejb3:1.4">
                <session-bean>
                    <stateless>
                        <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
                    </stateless>
                    <stateful default-access-timeout="5000" cache-ref="simple"/>
                    <singleton default-access-timeout="5000"/>
                </session-bean>
                <pools>
                    <bean-instance-pools>
                        <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                        <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                        <strict-max-pool name="PoolSize500" max-pool-size="500" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="SECONDS"/>
                    </bean-instance-pools>
                </pools>
    Voici un extrait de mon fichier domain.xml

    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
     
                <subsystem xmlns="urn:jboss:domain:ejb3:1.4">
                    <session-bean>
                        <stateless>
                            <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
                        </stateless>
                        <stateful default-access-timeout="5000" cache-ref="simple"/>
                        <singleton default-access-timeout="5000"/>
                    </session-bean>
                    <pools>
                        <bean-instance-pools>
                            <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
                            <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>                       
    						<strict-max-pool name="PoolSize500" max-pool-size="500" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>                    </bean-instance-pools>
                    </pools>
    Normalement lorsque je fais un lookup de mon stateless session bean, il devrait me renvoyer l'un des (suposé ?) 500 stateless session bean existant, mais il me renvoie toujours le même. Voyez-vous une explication ? Merci d'avance pour vos réponse.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Sans doute que le conteneur ne remplit le pool qu'au fur et à mesure.
    Si tu n'as qu'un client à la fois, il n'a pas d'intérêt à créer d'autres beans.
    Quel est ton besoin exact pour te lancer dans ce genre de configuration pointue ?

  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 fr1man et merci pour ta réponse.

    En fait il n'y a rien de pointu. Je fais juste un tutoriel avec des EJB. Je veux montrer une différence entre un stateless session bean et un statefull session bean.
    Tous deux ont le même attribut : private List<String> bookShelf; (ce qui n'est pas approprié pour un stateless session bean, je sais)

    Quand je fais appel 2 fois à la suite à mon stateless session bean par un lookup je pensais que jboss me renverrai 2 stateless session bean différent (venant du pool) et que donc je perdrais la valeur de l'attribut que j'avais rempli lors du premier appel.

    Or il n'en est rien. Le deuxième lookup me renvoie le même stateless session bean que le premier lookup et je garde donc mon état. Du coup ma démonstration tombe à l'eau

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ok, je dis ça, car on touche rarement à ce genre de paramètres.

    Essaie de faire plusieurs appels en parallèle (dans des threads différents).

  7. #7
    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 essayé de faire un appel toutes les ms dans un thread, mais il me renvoie toujours le même stateless session bean

  8. #8
    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. utiliser l'annotation @WebServiceClient
    Par bidts dans le forum Services Web
    Réponses: 1
    Dernier message: 14/04/2009, 10h31
  2. Réponses: 3
    Dernier message: 04/01/2009, 18h24
  3. [Data] [Transaction][Annotation] Utilisation des annotations Spring
    Par hkefi dans le forum Spring
    Réponses: 6
    Dernier message: 26/12/2008, 15h22
  4. Réponses: 0
    Dernier message: 13/11/2008, 13h56
  5. Utiliser les Annotations pour générer un WebService
    Par tvonstebut dans le forum Services Web
    Réponses: 3
    Dernier message: 09/01/2008, 17h55

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