Les threads dans les services CQ personnalisés se bloquent mutuellement :

Problème

Les threads correspondants dans certains services CQ personnalisés se bloquent mutuellement en raison de la synchronisation.

Solution

Créez vos services CQ afin que chaque service CQ utilise son propre ticket (et non le ticket du système). Recouvrez la représentation de l’implémentation de AbstractService#getServiceTicket(Ticket) et créez un ticket distinct avec la méthode Ticket#duplicate().

Lorsque vous utilisez ticket.duplicate(), vérifiez que ces objets sont fermés (voir [1]).

Remarque :

Le ticket du système lui-même est initialisé au démarrage de CQ et fermé uniquement lorsque CQ se ferme.

Informations supplémentaires

Ce problème se produit lorsque les services CQ personnalisés étendent AbstractService et ne recouvrent pas AbstractService#getServiceTicket(Ticket) pour obtenir un ticket distinct. Par conséquent, la même session JCR est utilisée pour tous les services CQ.

[1] http://javadoc.day.com/com/day/cq/contentbus/Ticket.html#close()

Logo Adobe

Accéder à votre compte