Tengo que enviar una secuencia binaria de un blob por medio de un ServletOutputStream.Spring MVC + Oracle LOBs + Streaming
Estoy utilizando las siguientes tecnologías y software: Oracle 11, WebSphere 7, Springframework 2.5.5, Hibernate 3.3.SP1.
Hay dos bases de datos Oracle. El primero contiene tablas para la descripción de los documentos que tengo que transferir, y el segundo - el contenido de los documentos.
También he configurado el soporte para orígenes de datos XA en WebSphere y JtaTransactionManager en la primavera.
Obtengo una referencia a un documento y contenido en una transacción.
La especificación JDBC nos dice que los LOB son objetos transaccionales y las aplicaciones portátiles deben usar dichos objetos dentro de las transacciones.
Y tengo las siguientes preguntas:
- ¿Es legal para recuperar flujo de entrada de BLOB dentro método transaccional y pasarlo al método no transaccional de alto nivel? Algo como esto:
@Transactional
public InputStream getContent(Long docId) {
Blob blob = getBlob(...);
return blob.getBinaryStream();
}
public ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) {
Long docId = ServlerRequestUtils.getRequiredLongParameter(req);
InputStream is = service.getContent(docId);
copy(is, resp.getOutputStream());
return null;
}
Si no es legal la forma de transferir secuencia binaria de BLOB al usuario final si el contenido del BLOB es lo suficientemente grande y hay tiempo de espera de transacción preconfigurado en el servidor de aplicaciones? ¿Tengo que manejar las transacciones manualmente y establecer el tiempo de espera en cero (la transacción nunca expira)?
¿Cuál es la mejor manera de transferir el flujo binario de BLOB al usuario final en tal caso?
Muchas gracias, he hecho algo similar y ahora estoy preocupada espera de transacción, especialmente cuando la conexión de usuario es lo suficientemente lento y el contenido que tengo que transferir es lo suficientemente grande. ¿Está bien establecer el tiempo de espera de la transacción en "transacción sin tiempo de espera"? – szhem
Absolutamente, no hay problema haciendo eso – skaffman
Gracias una vez más por su ayuda para encontrar una solución aceptable :) – szhem