Nous avons actuellement une application Web qui charge un contexte d'application Spring qui instancie une pile d'objets métier, d'objets DAO et d'Hibernate. Nous aimerions partager cette pile avec une autre application web, pour éviter d'avoir plusieurs instances des mêmes objets.Quelle est la meilleure façon de partager des instances d'objet métier entre des applications Web Java à l'aide de JBoss et Spring?
Nous avons examiné plusieurs approches; exposer les objets en utilisant JMX ou JNDI, ou en utilisant EJB3.
Les différentes approches ont toutes leurs problèmes, et nous recherchons une méthode légère.
Des suggestions sur comment résoudre ce problème?
Edit: J'ai reçu des commentaires me demandant d'élaborer un peu, donc voilà:
Le principal problème que nous voulons résoudre est que nous voulons avoir une seule instance de veille prolongée. Cela est dû à des problèmes d'invalidation du cache de second niveau d'Hibernate lors de l'exécution de plusieurs applications client travaillant avec la même source de données. De plus, la pile business/DAO/Hibernate est de plus en plus grande, donc ne pas la dupliquer n'a pas plus de sens. En premier lieu, nous avons essayé de voir comment la couche de gestion seule pouvait être exposée à d'autres applications Web, et Spring offre l'encapsulation JMX au prix d'une petite quantité de XML. Cependant, nous n'avons pas pu lier les entités JMX à l'arborescence JNDI, donc nous n'avons pas pu rechercher les objets des applications Web.
Ensuite, nous avons essayé de lier la couche de gestion directement à JNDI. Bien que Spring n'offrait aucune méthode pour cela, l'utilisation de JNDITemplate pour les lier était également triviale. Mais cela a conduit à plusieurs nouveaux problèmes: 1) Le gestionnaire de sécurité refuse l'accès au classloader RMI, de sorte que le client a échoué une fois que nous avons essayé d'invoquer des méthodes sur la ressource JNDI. 2) Une fois les problèmes de sécurité résolus, JBoss a lancé IllegalArgumentException: l'objet n'est pas une instance de classe déclarante. Un peu de lecture révèle que nous avons besoin d'implémentations stub pour les ressources JNDI, mais cela semble beaucoup de tracas (peut-être que Spring peut nous aider?)
Nous n'avons pas encore trop regardé l'EJB, mais après le premier deux essais je me demande si ce que nous essayons d'accomplir est tout possible. Pour résumer ce que nous essayons de réaliser: Une instance JBoss, plusieurs applications Web utilisant une pile d'objets métier au-dessus de la couche DAO et Hibernate.
Meilleures salutations,
Nils
Pourriez-vous commenter sur 1. Quel problème vous essayez de résoudre; 2. Les problèmes que vous avez trouvés avec les approches respectives que vous mentionnez. Cela permettrait une réponse plus ciblée ... – johnstok
Il était difficile de tout dire en 300 caractères, donc j'ai édité la question pour ajouter plus de détails :-) –