I am having some problems using byte[] field with
Oracle Blob.
I have an EJB with a field id of type String and
bytes of type byte[].
I found that there is 2 problems:
1. if the bytes field is null during creation
you get exception of 'Invalid column type'.
2. if you sucessfully 'inserted' something in
the Blob and subsequently re-deploy the bean to retrieve the field you get a
CorruptStreamException.
I had a look at the source. The first
exception is cause by setNull on a JAVA_OBJECT type. And the second
exception is caused by trying to read in a byte[] as Java Serializable
object.
I had this problem in JBOSS-2.0-FINAL but I thought
it was fixed in JBOSS-2.2.1. Anyone?
Any help is appreciated.
Kar
------------------------------------------------------------- Invalid
column exception --------------------
[JAWS] Exists command executing: SELECT COUNT(*)
FROM BYTEARRAY WHERE id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=hello [JAWS] Create, id is hello [JAWS] Exists command executing: SELECT COUNT(*) FROM BYTEARRAY WHERE id=? [JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=hello [JAWS] Create command executing: INSERT INTO BYTEARRAY (bytes,id) VALUES (?,?) [JAWS] Set parameter: idx=1, jdbcType=JAVA_OBJECT, value=NULL [JAWS] java.sql.SQLException: Invalid column type [JAWS] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168) [JAWS] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210) [JAWS] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:273) [JAWS] at oracle.jdbc.driver.OracleStatement.get_internal_type(OracleStatement.java:4560) [JAWS] at oracle.jdbc.driver.OraclePreparedStatement.setNull(OraclePreparedStatement.java:869) [JAWS] at org.opentools.minerva.jdbc.PreparedStatementInPool.setNull(PreparedStatementInPool.java:92) [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.setParameter(JDBCCommand.java:280) [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.setParameters(JDBCCreateEntityCommand.java:165) [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.jdbcExecute(JDBCCommand.java:159) [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.execute(JDBCCreateEntityCommand.java:135) [JAWS] at org.jboss.ejb.plugins.jaws.JAWSPersistenceManager.createEntity(JAWSPersistenceManager.java:122) [JAWS] at org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.java:207) [JAWS] at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:441) [JAWS] at java.lang.reflect.Method.invoke(Native Method) [JAWS] at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:639) [JAWS] at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:160) [JAWS] at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:87) [JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:135) [JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:263) [JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:86) [JAWS] at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:164) [JAWS] at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:106) [JAWS] at org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:316) [JAWS] at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRMPContainerInvoker.java:369) [JAWS] at java.lang.reflect.Method.invoke(Native Method) [JAWS] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241) [JAWS] at sun.rmi.transport.Transport$1.run(Transport.java:142) [JAWS] at java.security.AccessController.doPrivileged(Native Method) [JAWS] at sun.rmi.transport.Transport.serviceCall(Transport.java:139) [JAWS] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443) [JAWS] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643) [JAWS] at java.lang.Thread.run(Thread.java:484) ---------------------------- corrupt stream
exception -----------------------------------
[JAWS] Exists command executing: SELECT COUNT(*)
FROM BYTEARRAY WHERE id=?
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=hello [au.com.apir.test.Entity] Activated bean au.com.apir.test.Entity with id = hello [JAWS] Load command executing: SELECT bytes,id FROM BYTEARRAY WHERE id=? [JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=hello [JAWS] Got a oracle.sql.BLOB: 'oracle.sql.BLOB@135133' while looking for a [B [JAWS] java.sql.SQLException: Unable to load a ResultSet column into a variable of type '[B': java.io.StreamCorruptedException: InputStream does not contain a serialized object [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.getResultObject(JDBCCommand.java:483) [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.getResultObject(JDBCCommand.java:499) [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCLoadEntityCommand.handleResult(JDBCLoadEntityCommand.java:119) [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCQueryCommand.executeStatementAndHandleResult(JDBCQueryCommand.java:59) [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.jdbcExecute(JDBCCommand.java:160) [JAWS] at org.jboss.ejb.plugins.jaws.jdbc.JDBCLoadEntityCommand.execute(JDBCLoadEntityCommand.java:82) [JAWS] at org.jboss.ejb.plugins.jaws.JAWSPersistenceManager.loadEntity(JAWSPersistenceManager.java:150) [JAWS] at org.jboss.ejb.plugins.CMPPersistenceManager.loadEntity(CMPPersistenceManager.java:341) [JAWS] at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:192) [JAWS] at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:186) [JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:133) [JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:263) [JAWS] at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:99) [JAWS] at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:190) [JAWS] at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:195) [JAWS] at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:323) [JAWS] at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:392) [JAWS] at java.lang.reflect.Method.invoke(Native Method) [JAWS] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241) [JAWS] at sun.rmi.transport.Transport$1.run(Transport.java:142) [JAWS] at java.security.AccessController.doPrivileged(Native Method) [JAWS] at sun.rmi.transport.Transport.serviceCall(Transport.java:139) [JAWS] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443) [JAWS] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643) [JAWS] at java.lang.Thread.run(Thread.java:484) |