2009-08-17 7 views
3

Supposons que je dispose d'un bean géré par message (MDB) dans un serveur d'applications Java. Le MDB reçoit un message d'une file d'attente JMS et le transmet à un processeur de message. Dans mon cas, un processeur de messages est un objet extrêmement lourd qui nécessite une initialisation importante, donc je ne veux pas en créer un nouveau pour gérer chaque message. Au lieu de cela, je voudrais créer un pool de processeurs de messages à l'avance et les utiliser pour gérer les messages. Donc, ma question est la suivante: quelle est la bonne façon de construire ce pool dans un serveur d'application J2EE? Des serveurs ont-ils un support intégré pour définir des pools d'objets personnalisés (hors connexion)? Je voudrais tirer parti de ce soutien intégré pour ce modèle avant de simplement entasser la piscine dans un singleton et j'espère que tout ira pour le mieux. En particulier:Comment créer des pools d'objets personnalisés dans le serveur d'applications Java

  • Comment définir/instancier le pool?
  • Comment accéder à la piscine? JNDI?
  • Quelles capacités de gestion sont fournies par le serveur d'applications?

Je sais implémenter un pool d'objets en général. Ma question concerne principalement la création d'un pool dans un serveur d'applications J2EE.

Je prévois sur l'utilisation Glassfish, mais je "suis souple si JBoss ou quelque chose d'autre va vous faciliter la tâche.

Merci!

Répondre

1

Vous pouvez essayer Apache Commons Pool, il est un mécanisme généralisé pour la mise en commun des objets d'application .

0

Java 5 est livré avec le Executor API qui peut le faire.

+0

Je ne suis pas sûr de savoir comment cela résout mon problème, en particulier dans le contexte d'un serveur d'application J2EE. –

+0

Il vous suffit de synchroniser le démarrage/arrêt de votre application sur le serveur de l'application avec l'exécuteur et cela devrait fonctionner. –

4

eux-mêmes sont généralement EJBs gérés comme des objets mis en commun par la plupart des serveurs d'applications.La manière la plus évidente de mettre en œuvre votre application consiste à utiliser la MDB elle-même en tant que processeur de messages, puis à configurer la mise en pool à l'aide de la configuration de déploiement du serveur d'applications.

+0

Je vais essayer. Je me demande quel contrôle je vais avoir. Par exemple, s'il y a une période d'inactivité, l'AS va-t-elle vider le pool de MDB nécessitant un autre long processus d'initialisation la prochaine fois qu'un message arrive? –

+0

Ceci est vraiment spécifique à AS. Mon expérience principale est avec JBoss et Weblogic, qui permettent tous deux de personnaliser les politiques de passivation et de mise au rebut ainsi que la taille et le comportement du pool. Je pense que GlassFish n'est pas différent, et vous pouvez trouver la documentation pertinente ici: http://docs.sun.com/app/docs/doc/820-7695/beaiu?a=view –

Questions connexes