Galera,
To tendo problemas para trabalhar com o tipo java.sql.Blob no PostgreSQL.
Alguém aí já viu o seguinte erro:
org.postgresql.util.PSQLException: Um erro de E/S ocorreu ao enviar para o processo do servidor.
at org.postgresql.core.v3.QueryExecutorImpl.fastpathCall(QueryExecutorImpl.java:487)
at org.postgresql.fastpath.Fastpath.fastpath(Fastpath.java:75)
at org.postgresql.fastpath.Fastpath.fastpath(Fastpath.java:115)
at org.postgresql.fastpath.Fastpath.getInteger(Fastpath.java:127)
at org.postgresql.largeobject.LargeObject.tell(LargeObject.java:264)
at org.postgresql.largeobject.LargeObject.size(LargeObject.java:279)
at org.postgresql.jdbc2.AbstractJdbc2BlobClob.length(AbstractJdbc2BlobClob.java:44)
at org.hibernate.lob.SerializableBlob.length(SerializableBlob.java:31)
at br.com.dataeasy.docflow.web.ctr.bean.TipoDocumentoBean.consultar(TipoDocumentoBean.java:175)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.el.parser.AstValue.invoke(Unknown Source)
at com.sun.el.MethodExpressionImpl.invoke(Unknown Source)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:69)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
Caused by: java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.flush(Unknown Source)
at java.io.OutputStreamWriter.flush(Unknown Source)
at org.postgresql.core.PGStream.flush(PGStream.java:531)
at org.postgresql.core.v3.QueryExecutorImpl.sendFastpathCall(QueryExecutorImpl.java:537)
at org.postgresql.core.v3.QueryExecutorImpl.fastpathCall(QueryExecutorImpl.java:481)
Isso acontece quando eu invoco qualquer método do objeto Blob.
Minha classe tá mapeada assim:
private Blob arquivo;
@Lob
@Basic(fetch=FetchType.EAGER)
@Column(name="arquivo")
public Blob getArquivo() {
return arquivo;
}
public void setArquivo(Blob arquivo) {
this.arquivo = arquivo;
}
Daí o erro acontece no meu bean:
Blob blob = objArquivo.getArquivo();
byte[] bytes = blob.getBytes();
Quando eu invoco blob.getBytes(); ou qualquer outro método associoado a esse tipo de objeto.
Falou.