servicio crear java spring web-services servlet-filters

crear servicio rest java eclipse



Cómo admitir el procesamiento de solicitudes de API web por lotes utilizando Spring/Servlets (1)

Tenemos nuestra API web escrita en el uso de RESTEasy . Nos gustaría brindar soporte para el procesamiento de solicitudes por lotes de la forma en que funciona el procesamiento de solicitudes por lotes de Google .

A continuación se presenta el enfoque que estamos utilizando actualmente,

Tenemos un filtro que acepta la solicitud multiparte entrante. Este filtro crea múltiples solicitudes simuladas y objetos de respuesta y luego llama a chain.doFilter usando estas solicitudes simuladas.

public class BatchRequestProcessingFilter extends GenericFilterBean { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; MockHttpServletRequest[] mockRequests = BatchRequestProcessorUtils.parseRequest(request); MockHttpServletResponse[] mockResponses = new MockHttpServletResponse[mockRequests.length]; for(int i=0 ; i <= mockRequests.length ; i++ ) { chain.doFilter(mockRequests[i], mockResponses[i], chain); } BatchRequestProcessingUtils.populateResponseFromMockResponses(res, mockResponses); } }

MockHttpServletResponse clase MockHttpServletResponse devuelve un OutputStream ficticio que envuelve ByteArrayOutputStream .

BatchRequestProcessorUtils analiza la solicitud multiparte y devuelve la solicitud simulada que ajusta la solicitud real pero devuelve el encabezado especificado en el cuerpo dividido del cuerpo de la solicitud real.

No he podido encontrar ninguna biblioteca existente que admita el procesamiento de solicitudes por lotes. Entonces, mi pregunta es: ¿es este el enfoque correcto para respaldar la solicitud de lotes o hay alguna forma estándar que deba usarse?

Tenga en cuenta que estamos utilizando Tomcat 8.


Sachin Gorade. No he oído hablar de tales bibliotecas, pero creo que su enfoque es razonable. Si tuviera que resolver ese problema, pensaría así:

  1. En nuestros servlets HTTP, podemos procesar las solicitudes solo por separado, y es la razón por la que debemos incluir todas las solicitudes que queremos enviar en otra solicitud única en el lado del cliente.
  2. Como en nuestro lado del servidor solo tenemos una solicitud, deberíamos desenvolver todas las solicitudes que hemos realizado. Y, como no sabemos cómo procesar cada solicitud en nuestro mecanizado de lotes, debemos enviarlo a través de todos los filtros / servlets. También es una razón para poner nuestro filtro de lotes en la primera posición del pedido.
  3. Eventualmente, cuando todas las solicitudes hayan sido procesadas, deberíamos enviar una respuesta al cliente. Y de nuevo, para hacer eso deberíamos envolver todas las respuestas en una sola.
  4. En el lado del cliente, deberíamos desenvolver las respuestas y enviar cada una de ellas a algunos objetos que puedan procesarlo.

En mi opion debería haber dos mecanismos:

  1. Lote remitente para el lado del cliente, que es responsable de recopilar y ajustar las solicitudes, desenvolver las respuestas y enviarlas a sus procesadores (métodos que procesan las respuestas regulares).
  2. Procesador por lotes para el lado del servidor, que es responsable de desenvolver las solicitudes y recopilar y envolver respuestas.

Por supuesto, esas dos partes pueden estar acopladas (ig haber compartido el módulo "Envoltorio"), porque los objetos deben ser envueltos y desenvueltos de la misma manera.

Además, si trabajara en él, trataría de desarrollar el mecanismo del lado del cliente como un decorador en una clase que utilizo para enviar solicitudes regulares. En ese caso, podría sustituir el modo regular / batch cuando lo necesite.

Espero que mi opinión te sea de utilidad.