Accédant à la portée de la requête haricots dans un environnement multi-thread de l'application web

Scénario:
Nous avons un Printemps réussi application web qui fonctionne à l'intérieur de Websphere. (Spring 3.0.x, 7)
La webapp exploite Websphere travail du manager à l'aide du Printemps WorkManagerTaskExecutor (configuré avec une taille de pool de threads de 10) pour exécuter de calcul intensif db opérations de lecture. Donc, fondamentalement, une demande arrive à générer, disons, de 10 différents documents. Pour générer les documents uniquement db lectures sont nécessaires pour recueillir/traiter les données. Nous avons donc fondamentalement frayer 10 threads pour traiter le 10 documents et à la fin de rassembler les 10 documents renvoyés à partir de la 10 travailleurs et de les fusionner et écrire de nouveau une grande réponse au client. Ce que nous avons identifié est que tandis que les 10 threads sont de collecte/traitement des données il y a des tas de semblable db appels. Donc, ce que nous avons trouvé est de créer un Aspect autour de la plus-exécuté db méthodes pour mettre en cache la réponse. L'aspect est configuré comme un singleton, et le cache de l'aspect utilise est autocâblés dans l'aspect avec un champ d'application à la demande de la portée, de sorte que chaque demande a son propre cache.

Problème:
Maintenant, le problème avec cette approche est que, si les fils sont en train de faire leur db appels et l'Aspect est dit nous sommes java.lang.IllegalStateException: No thread-bound request found exception. Je crois comprendre que c'est totalement valide que les threads sont exécutées en dehors du contexte de demande.

Est-il un moyen pour circum-navigation ce problème? Est-il possible d'appliquer l'aspect avec une portée de la requête de la mémoire cache de méthodes invoquées par ces fils?

InformationsquelleAutor r4j1v | 2011-10-03