2008-10-07 10 views
20

Obtuve un grupo de oyentes de contexto de servlet en mi aplicación web de Java, cada uno de ellos recopilando información sobre el entorno.Cómo determinar el orden de los oyentes en web.xml

Algunos de ellos dependen de la información recopilada por otro oyente. Pero no puedo determinar el orden en que los oyentes están registrados y llamados, así que tengo que duplicar el código.

Entiendo que los oyentes están registrados en el orden de su pedido en web.xml pero esto me suena un poco vago, demasiado vago como para confiar en él.

¿Tiene alguna pista de cómo puedo resolver mi problema?

Respuesta

25

Todos los contenedores de servlets y contenedores Java EE implementan estrictamente esta parte de la especificación. Puede confiar en el hecho de que se llama a los oyentes en el orden que especificó en web.xml.

Puede tener una estructura de datos de nivel de aplicación (HashMap) que cada filtro/oyente actualizará cuando encuentre los datos de las solicitudes. Esto permitirá que cada Oyente actualice solo lo que es esencial. Puede colocar el código común en un Oyente base para que no haya duplicación de código.

2

Parecería que puede crear un ListenerManager que usted coloca como su único oyente, y hacer que contenga a los otros oyentes. Cuando llegue el evento, simplemente llame a cada uno de los otros oyentes en el orden que desee (probablemente el orden en que los creó en el constructor del ListenerManager).

Lamentablemente, esto significa un cambio de código cuando se agregan Oyentes, pero puede evitarlo mediante el uso inteligente de los archivos de propiedades y el código de creación de nombres de clase.

8

¿Por qué es tan vago? El orden en web.xml es muy específico en el orden en el que se llaman, se establece muy claramente en la especificación de Java EE. Está completamente bien confiar en eso.

Cuestiones relacionadas