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 :

Multiple instance d'un EJB Singleton


Sujet :

Java EE

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    D�cembre 2013
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2013
    Messages : 27
    Par d�faut Multiple instance d'un EJB Singleton
    Bonjour,

    Je travail sur un syst�me de datalogger. J'ai un serveur Java EE qui est charg�, entre autre, de r�cup�rer des informations sur des automates.

    Afin d'�viter les connexions multiples, je voudrais avoir un seul objet par automate qui g�re l'�change d'informations avec celui-ci. Ces objets doivent donc �tre instanci�s au d�marrage du serveur et effectuer les diff�rentes requ�tes vers l'automate n�cessaire aux autres objets m�tier. Certaines requ�tes peuvent �tre effectu�es simultan�ment, d'autres non.

    Si je n'avais qu'un seul automate l'utilisation d'un EJB singleton serait l'id�al, en annotant les diff�rentes m�thodes avec @Lock read ou write.

    Le probl�me ici est que j'ai besoin de plusieurs de ces objets (un par automate) qui aurait chacun leur �tat. Sauf que le principe d'un singleton est justement qu'il n'existe qu'une seule instance d'une class.

    Si j'utilise un ejb Statefull, toutes les m�thodes seront @Lock write; si j'utilise un simple pojo, je dois g�rer tout l'acc�s multithread � la main et je perd le b�n�fice d'un serveur java EE.

    Je suis pas tr�s connaisseur de l'environnement java EE, il y a-t-il une solution simple pour ce genre de probl�me ?

    Voici un exemple de ce que je voudrais faire :

    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
    	public class Automate {
     
    		private String ip;
    		//...
    	}
     
    	@Singleton //??
    	public class Connection{
     
    		private Automate automate;
     
    		public void connect(Automate automate) {
    			this.automate = automate;
    			// ... connect to automate
    		}
     
    		@Lock(LockType.READ)
    		public int readValue() {
    			//..
    		}
     
    		@Lock(LockType.WRITE)
    		public void backup() {
    			//..
    		}
     
    		@Schedule(hour = "*", minute = "*", second = "*/1", info = "Every second timer")
    		private void updateData() {
    			//..
    		}
    	}
     
    	@Singleton
    	@Startup
    	public class AutomateManager{
     
    		@Inject 
    		private Provider<Connection> connectionProvider;
     
     
    		@PostConstruct
    		private void init() {
    			for (Automate automate : automateList) {
    				Connection connection = connectionProvider.get();
    				connection.connect(automate);
    				// ...
    			}
    		}
    	}
    Evidemment, dans cet exemple, je vais injecter � chaque fois la m�me instance de "Connection", ce qui ne conduira pas du tout au r�sultat souhait�.

  2. #2
    Membre chevronn� Avatar de Drowan
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 30
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par d�faut
    Il faut que tu cr�e une relation One to One entre ton entit� Connection et ton Entit� Automate.

    Je t'invite � consulter ces diff�rentes ressources :
    - Lien 1 (blog fr sur Java EE)
    - Lien 2 (doc Oracle sur l'annotation OneToOne en)
    - Lien 3 (doc JBoss sur les entit�s fr)
    - Lien 4 (une question sur l'utilisation de OneToOne fr)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    D�cembre 2013
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2013
    Messages : 27
    Par d�faut
    Bonjour Drowan et merci pour ta r�ponse,

    Toutefois, je ne comprend pas trop en quoi l'annotation OneToOne va pouvoir m'aider. L'objet Connection n'est pas une entit� et n'a pas vocation � �tre sauvegard� en bdd. C'est un objet contenant des m�thodes m�tiers permettant la connexion � des services externes. J'ai besoin que ces objets poss�dent un �tat (statut et r�f�rence de la connexion) et puissent g�rer des acc�s simultan�s et multithread, en gros tout ce que je pourrais faire avec un EJB Singleton, sauf qu'il m'en faut plusieurs de la m�me class.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    D�cembre 2013
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2013
    Messages : 27
    Par d�faut
    Apr�s de (longues) recherches, j'ai enfin trouv� un moyen de faire ce que je voulais.

    R�sum� en deux lignes :

    Il n' y a pas d'EJB ou "Bean CDI" capabale de faire �a directement.
    Il y a moyen de contourner le probl�me en cr�ant un Interceptor qui g�re le verrou sur un bean manag� et ainsi ajout� les annotationq @Lock directement sur un bean CDI.

    Voici le d�tail : https://www.knitelius.com/2016/01/25...ntrol-for-cdi/

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [FastReport] FastServer - multiple instance ISAPI
    Par powerlog dans le forum FastReport
    R�ponses: 1
    Dernier message: 21/04/2008, 21h33
  2. R�ponses: 2
    Dernier message: 17/03/2008, 11h58
  3. Multiples instances d'un JInternalFrame.
    Par pierreact dans le forum NetBeans
    R�ponses: 3
    Dernier message: 23/12/2007, 17h32
  4. Multiple instance de service Windows
    Par zubov dans le forum Windows Forms
    R�ponses: 1
    Dernier message: 30/01/2007, 10h22
  5. [C++] DLL Multiples instances
    Par ouquoi dans le forum C++
    R�ponses: 2
    Dernier message: 18/07/2006, 17h25

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