2009-04-07 6 views
1

J'ai un système dont j'ai besoin pour distribuer qui fonctionne comme suit. Les servlets servis par tomcat démarrent et génèrent des threads avec un grand nombre de champs partagés (distribués). Ergo, je définis le thread comme une racine et tente de générer les threads comme d'habitude à partir de mon constructeur de servlet. Toutefois, la journalisation indique que le constructeur Runnable que je tente de partager ne se termine jamais. Qu'est-ce qui pourrait causer ça?En ce qui concerne Terracotta et Servlets/Shared Threads

Dans mon servlet, j'ai une instance du thread que je tente de partager en tant que root, et la journalisation indique que tout va bien jusqu'à la fin du constructeur pour la classe (UpdaterThread) qui implémente runnable.

Je donne les résultats suivants:

Servlet:

print "Création d'un nouveau fil"; updaterThread = new UpdaterThread (args); print "Fil de lancement."; nouveau Thread (updaterThread) .start();

Maintenant, je ne vois jamais "Launching Thread" dans ma sortie de la console Tomcat, bien que je puisse voir toutes les instructions d'impression jusqu'à la fin du constructeur UpdaterThread. UpdaterThread maintient une référence à une carte (partagée par le servlet), une chaîne, une connexion SQL, une instruction, un ReentrantReadWriteLock, un Long et un booléen transitoire et Long à ne pas partager.

Dans le constructeur de UpdaterThread, je transmets une référence à la mappe partagée et la valeur de la chaîne. Sans terracotta activé, je peux aller au-delà de ce point. Qu'est-ce qui ferait que tomcat et terracotta seraient suspendus sans aucun message d'erreur? Le verrou rrwl n'est pas utilisé jusqu'à ce qu'une méthode plus récente soit appelée, mais je n'obtiens jamais cela aussi loin dans l'exécution du programme. Aidez-moi?

Répondre

2

Résolu. J'ai dû redémarrer le serveur Terracotta, ce qui m'a permis de voir des erreurs indiquant que Statement et Connection étaient des classes non-portables qui devaient être rendues transitoires.

Questions connexes