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)
 

Reply via email to