0

Je suis en train de concevoir une partie d'une application Java EE 6, composée de beans EJB3. Une partie des exigences sont de multiples chasses de bases de données parallèles (disons quelques centaines) de longue durée (sur plusieurs jours). Les chasses individuelles ont différents paramètres de recherche (heure de début, heure de fin, filtre de requête). Les paramètres peuvent changer au fil du temps.Communication entre instances EJB3 (communication inter-bean Java EE) possible?

Actuellement, je pense à ce qui suit:

  • SearchController (Stateless Session Bean) formule un ensemble de paramètres de recherche, envoie au large à un SearchListener via JMS
  • SearchListener (message Driven Bean) reçoit paramètres de recherche, instancie un SearchWorker avec les paramètres
  • SearchWorker (SLSB) recherche à plusieurs reprises dans la base de données; quand il trouve quelque chose, le résultat est envoyé par JMS, et la recherche continue; lorsque le « temps de la fin » donnée a atteint, elle se termine

Ce que je me demande maintenant:

  • Y at-il un problème avec les instances EJB3 en cours d'exécution pour les jours? (En dehors de cela, j'ai besoin de pouvoir traiter les redémarrages de conteneurs ...)
  • Comment puis-je savoir combien et quelles instances EJB de SearchWorker sont en cours d'exécution?
  • Est-il possible de communiquer avec eux individuellement (similaire à l'envoi d'un signal System V à un processus Unix), par ex. pour envoyer de nouveaux paramètres, pour mettre fin à une instance, etc.

Répondre

0

Si vous détenez un énorme ResultSet ouvert pendant une longue période, vous risquez de rencontrer des délais d'attente de transaction ou des problèmes de verrouillage de la base de données.

Il n'existe aucun mécanisme intégré permettant de déterminer quelles instances du bean s'exécutent dans une méthode. Vous devez donc ajouter votre propre mécanisme. Votre produit peut avoir une sorte de surveillance des performances qui vous permet de savoir combien de chaque type de bean est en cours d'exécution d'une méthode. En ce qui concerne la communication inter-thread, vous devez implémenter votre propre synchronisation et vérifier périodiquement la méthode du bean. Vous serez hors de portée de l'EJB standard, car chaque appel parallèle à une méthode métier allouera une nouvelle SLSB à partir du pool.