В Weblogic 10 я использую Hibernate для хранения данных в нескольких таблицах с BLOB. Это всегда работало нормально, но клиент обнаружил определенные обстоятельства, когда 15% BLOB-объектов имеют правильный размер, но содержат только нулевые символы. Я не могу понять, что делает его хорошим или полным пустоты.
Тип BLOB, который я использую, выполняет:
public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
if (value == null) {
st.setNull(index, sqlTypes()[0]);
return;
}
try {
Connection conn = st.getConnection();
if (conn instanceof org.apache.commons.dbcp.DelegatingConnection) {
log.debug("Delegating connection, digging for actual driver");
conn = ((org.apache.commons.dbcp.DelegatingConnection)st.getConnection()).getInnermostDelegate();
}
OutputStream tempBlobWriter = null;
BLOB tempBlob = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
try {
tempBlob.open(BLOB.MODE_READWRITE);
tempBlobWriter = tempBlob.setBinaryStream(1L);
tempBlobWriter.write((byte[])value);
tempBlobWriter.flush();
} finally {
if (tempBlobWriter != null)
tempBlobWriter.close();
tempBlob.close();
}
st.setBlob(index, (Blob) tempBlob);
} catch (IOException e) {
throw new HibernateException(e);
}
}
Я помещаю туда журнал и могу подтвердить, что значение (byte[]) хорошее. Я пытался изменить параметры createTemporary, но безуспешно.
Я запускаю это под Weblogic 10.0 (не могу обновить это) с помощью прилагаемого драйвера Oracle Thin.
Подсказка заключается в том, что рабочие вызовы исходят от стандартной веб-службы, развернутой и управляемой WLS. Но проблемные вызовы выполняются из потока, запущенного вместе с компонентом, который взаимодействует с какой-то устаревшей системой с JNI. Этот поток работает как шарм для всего, кроме этих BLOB. Я получаю новую сессию непосредственно перед вставкой данных и закрываю ее немного позже. (Сеанс НЕ остается открытым в течение всего времени существования потока)
Я установил уровень журнала Hibernate на DEBUG, но это не дает мне никакой подсказки. У меня начинают заканчиваться идеи...