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 :
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�.
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); // ... } } }![]()






R�pondre avec citation


Partager