मैं एक ServletOutputStream के माध्यम से एक ब्लॉब के एक द्विआधारी धारा भेजना है +। ओरेकल 11, WebSphere 7, Springframework 2.5.5, हाइबरनेट 3.3.SP1:वसंत MVC + ओरेकल LOBs स्ट्रीमिंग
मैं निम्नलिखित प्रौद्योगिकियों और सॉफ्टवेयर का उपयोग कर रहा हूँ।
दो ओरेकल डेटाबेस हैं। पहले दस्तावेजों में मुझे दस्तावेजों के विवरण के लिए टेबल शामिल हैं, और दूसरा - दस्तावेज़ों की सामग्री।
मैं वसंत में WebSphere और JtaTransactionManager में XA datasources के लिए भी कॉन्फ़िगर किया है समर्थन करते हैं।
मैं किसी दस्तावेज़ के लिए एक संदर्भ प्राप्त करने और एक लेन-देन ही सामग्री।
JDBC विनिर्देश हमें बताता है कि LOBs व्यवहार वस्तुओं रहे हैं और पोर्टेबल अनुप्रयोगों लेनदेन के भीतर इस तरह की वस्तुओं का उपयोग करना चाहिए।
और मैं निम्नलिखित प्रश्न हैं:
- यह लेन-देन संबंधी विधि के भीतर ब्लॉब के इनपुट धारा निकालते हैं और यह शीर्ष स्तर के गैर लेन-देन विधि को पारित करने के लिए कानूनी है? कुछ इस तरह:
@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;
}
अगर यह कानूनी अंत उपयोगकर्ता के लिए ब्लॉब के बाइनरी धारा स्थानांतरित करने का तरीका अगर ब्लॉब की सामग्री काफी बड़ी है नहीं है और एप्लिकेशन सर्वर में पूर्वसंरचित लेनदेन टाइमआउट है? क्या मुझे मैन्युअल रूप से लेनदेन को संभालना है और टाइमआउट को शून्य पर सेट करना है (लेनदेन कभी समय समाप्त नहीं होता है)?
सबसे अच्छा तरीका है इस तरह के एक मामले में अंतिम उपयोगकर्ता को ब्लॉब के बाइनरी धारा हस्तांतरण करने के लिए क्या है?
धन्यवाद एक बहुत है और अब मैं लेनदेन टाइमआउट बारे में चिंतित हूँ, खासकर जब प्रयोक्ता के कनेक्शन पर्याप्त धीमा है और मुझे हस्तांतरण करने वाली सामग्री काफी बड़ी है। क्या लेन-देन टाइमआउट को "लेनदेन कभी समय समाप्त नहीं" करना ठीक है? – szhem
बिल्कुल, कोई समस्या नहीं है – skaffman
एक स्वीकार्य समाधान खोजने में मदद के लिए एक बार फिर धन्यवाद :) – szhem