2009-08-26 10 views
0

Lorsque vous souhaitez appeler un EJBBean à partir du client, vous devez d'abord obtenir une référence d'objet EJBHome via la recherche JNDI. Ce code doit être exécuté chaque fois que vous avez besoin de travailler avec le EJBBean et devient donc redondant et coûteux.Ai-je besoin d'une carte synchronisée pour implémenter le modèle EJBHomeFactory?

Pour résoudre ce problème, vous pouvez mettre en cache les références d'objet EJBHome et les réutiliser encore et encore à partir du cache sans répéter la recherche JNDI.

Ceci est le EJBHomeFactory Pattern (ou un modèle de localisateur de service plus générique).

La majorité des implémentations que j'ai vues utilisent un Map synchronisé comme cache, ou un Hashtable. Si le cache est construit quand l'application est déployée sur le serveur et qu'aucune modification n'est faite au cache par la suite (seules les méthodes get() sont effectuées) ai-je vraiment besoin d'un Map synchronisé ou d'un HashMap?

Je sais que HashMap n'est pas sûr si au moins un des threads modifie la carte (il y a même un post SO sur ce here) mais dans ce cas, les threads n'effectuent que des lectures.

Donc, est-ce qu'un HashMap est sûr à utiliser dans le EJBHomeFactory Pattern?

Répondre

0

Si vous pouvez garantir que le cycle de vie est celui que vous décrivez, il semble clair que le HashMap non synchronisé devrait être OK. Cependant, mon instinct est que cela crée une dépendance fragile à votre modèle de déploiement actuel.

Si vous utilisez une infrastructure de données synchronisée, alors connaissez c'est sûr maintenant et dans le futur. À moins que vous n'ayez des preuves concrètes que la synchronisation a vraiment un impact sur la performance, j'accompagnerais l'implémentation "évidemment correcte". En passant, plusieurs principaux serveurs d'applications mettent effectivement en cache les résultats des recherches JNDI, ce qui ne permet pas de savoir exactement comment sauvegarder le modèle que vous utilisez réellement - même si je dois avouer que j'ai tendance à l'utiliser moi-même.

Les références EJB elles-mêmes peuvent être réutilisées, de sorte que la fréquence d'accès à la maison peut être maintenue assez basse. Si la performance extrême est l'objectif, cela peut être une piste supplémentaire à explorer.