2010-11-16 22 views
1

Je suis assez nouveau à l'ensemble de la programmation Web et j'ai le problème suivant:Comment partager une bibliothèque pour l'accès aux données dans tomcat 7?

J'ai 2 webapps, un service web d'un axe et un autre est une application de printemps. Les deux devraient obtenir un ensemble de données d'une bibliothèque qui contient les données en mémoire. Ces données sont volumineuses, donc la copie des données pour chaque application n'est pas une option.

Ce que j'ai fait jusqu'ici est de développer la bibliothèque qui charge et contient les données dans un conteneur statique. Le plan était, que les deux applications instancient la classe contenant le conteneur et peuvent accéder aux données.

Malheureusement, cela ne fonctionne pas. J'obtiens une exception que l'objet que je veux utiliser est dans différents classloaders.

Ma question est: Comment puis-je fournir un tel fournisseur de conteneur pour les deux bibliothèques dans Tomcat 7?

BTW: Une base de données n'est pas une option, car son ralentissement.

Modifier: J'aurais dû être clair sur les données. Les données sont une carte de sujet stockée dans un moteur de carte de sujet. (Voir http://www.isotopicmaps.org). Le moteur est utilisé pour accéder aux données et est donc le point d'accès aux données. Nous avons un propre moteur, qui contient les données en mémoire, ce qui est plus rapide qu'un backend de base de données.

I Vous voulez avoir une servlet qui fournit la configuration et le chargement des cartes topiques, puis les deux servlets ci-dessus devraient être capables de lire et modifier une topique. C'est pourquoi j'ai besoin d'avoir une sorte de point d'accès partagé au moteur.

+1

Je pense que la réponse dépend s'il s'agit de données de référence en lecture seule ou d'informations transactionnelles et inscriptibles. Pourriez-vous clarifier la nature des données? – duffymo

Répondre

1

Vous souhaitez donc un cache en mémoire distribué pour un cluster de serveurs. Vous pouvez utiliser entre autres Terracotta pour cela. Vous pouvez trouver here une belle introduction à Terracotta.


Mise à jour: Je suis en désaccord en fait l'argument selon lequel une base de données est "trop ​​lent". Si c'est lent, alors le code de données et/ou le code d'accès aux données est simplement mal conçu.

+0

Intéressant de voir comment Terracotta respecte l'exigence "database is no option". Comment est-ce plus rapide si un saut de réseau est toujours impliqué? – duffymo

+0

@duffymo: là vous avez un point: l'argument "Une base de données n'est pas une option, parce que c'est trop lent" fait après tout pas de sens. La lenteur n'est pas seulement due à la latence (vous le garderez toujours) mais aussi à la façon dont votre datamodel est conçu. La performance de DB consiste simplement à placer les bons index dans les bonnes colonnes et à écrire des requêtes SQL intelligentes. – BalusC

+0

Exactement raison. Je pense que c'est un problème que le PO devrait considérer. – duffymo

1

C'est ce à quoi servent les caches distribués, les magasins de valeurs-clés, les magasins de documents et les bases de données noSql. Il y a beaucoup d'options et de nouvelles chaque jour. Les options libres et open-source sont susceptibles de répondre à vos besoins et de vous fournir autant de soutien que vous en aurez besoin. Celui qui est actuellement mon préféré est membase.

+1

Favori? Pourquoi? (Pas difficile, juste curieux.) – duffymo

+0

Plusieurs équipes de mon entreprise ont examiné plusieurs solutions pour résoudre la mise en cache ou le stockage de données de base de données non relationnelle en général. Nous avons examiné Coherence, Terradata, Redis, Mongo et Couch pour différents projets. Chacun avait ses propres défauts. La cohérence est ce que nous utilisons le plus, donc la faute principale est le coût et la source fermée. Membase semble être aussi fiable et efficace que Coherence, mais offre une persistance simple basée sur des fichiers et est ouverte. –