2017-01-09 1 views
0

J'ai une classe qui implémente ContainerRequestFilter et ContainerResponseFilter. J'utilise cette classe pour enregistrer la demande et la réponse correspondante. Je note le filtre start_time in request et le propage au filtre de réponse en utilisant MDC.put ("start-time", start_time). Je peux voir que puisque le filtre de réponse prend le conteneur ContainerRequestContext comme argument, il est capable de mapper la réponse à la demande correcte.Distinguer plusieurs demandes dans Jersey Request Filter

Mais je ne suis pas capable de voir comment la classe de filtre de journalisation est capable de distinguer entre plusieurs appels de requête qui arriveraient simultanément. Chaque requête crée-t-elle une instance différente de la classe de filtrage de journalisation?

+1

Pouvez-vous coller un exemple de code pour mieux comprendre la question? Avez-vous un filtre de journalisation personnalisé pour le faire? –

+0

Oui J'ai écrit un filtre de journalisation personnalisé. J'ai utilisé le tutoriel suivant pour en écrire un [link] http://www.makeinjava.com/custom-logging-filter-using-jersey-containerrequestfilter-containerresponsefilter/ – raizsh

Répondre

0

Chaque requête crée-t-elle une instance différente de la classe de filtre de journalisation?

Non Essayer de stocker l'état membre n'est pas une option. Ce que vous devez faire est d'utiliser le ContainerRequestContext pour définir une propriété du côté de la demande. Du côté de la réponse, il suffit d'obtenir la propriété dans le même contexte.

// request filter 
filter(ContainerRequestContext request) { 
    request.setProperty("key", value); 
} 

// response filter 
filter(ContainerRequestContext request, ContainerResponseContext response) { 
    Object value = request.getProperty("key"); 
} 

Chaque requête obtiendra le sien Container(Request|Response)Context.

+0

Je demande comment le RequestFilter fait la distinction entre plusieurs requêtes qui arrivent en même temps. Comment le filtre de requête est-il implémenté? Comment les requêtes multiples sont-elles gérées par le filtre de sorte qu'aucun contexte de demande ne soit mélangé? Je suis en mesure de définir l'heure de démarrage en utilisant MDC et cela fonctionne très bien. Je suis également conscient que nous pouvons définir la propriété de demande pour enregistrer l'état. – raizsh

+0

Jersey crée un nouveau contexte pour chaque requête et transmet le contexte au filtre. Quoi d'autre y a-t-il à savoir? –