Bugs item #595672, was opened at 2002-08-15 18:28 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=376685&aid=595672&group_id=22866
Category: JBossCMP Group: v3.0 Rabbit Hole Status: Open Resolution: Wont Fix Priority: 5 Submitted By: Boris Tamarkin (upss) Assigned to: Dain Sundstrom (dsundstrom) Summary: Deserialization broken in JBoss 3.01 Initial Comment: Win2000 operating system MySQL or MS SQLServer 2000 databases mapping in standardjbosscmp-jdbc.xml (same as in 3.0) for mySQL <java-type>java.lang.Object</java-type> <jdbc-type>JAVA_OBJECT</jdbc-type> <sql-type>LONGBLOB</sql-type> <java-type>java.lang.Object</java-type> <jdbc-type>JAVA_OBJECT</jdbc-type> <sql-type>IMAGE</sql-type> Repeat scenario Having CMP2 entity bean with one Object atribute. Call setObject works fine and store as a Blob in database. When trying to retreive after, failure happens. Stacktrace attached below *Notes: 1. Serialization and deserialization doing only with 3.01 version of JBoss 2. Not trying to deserealize old blobs (I am aware of it can be not supported and compatible with earlier version of JBoss) 3. This functionality and same code works fine with previous JBoss 3.0 version, but it is broken in 3.01. Thanks Stacktrace ********* 10:51:02,738 ERROR [LogInterceptor] TransactionRolledbackLocalException, causedB y: java.sql.SQLException: Unable to load to deserialize result: java.io.StreamCorru ptedException: invalid stream header at org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil.convertByteArra yToObject(JDBC Util.java:612) at org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil.getResult (JDBCUtil.java:311) at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMP FieldBridge.load ArgumentResults (JDBCAbstractCMPFieldBridge.java:350) at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMP FieldBridge.load InstanceResults(JDBCAbstractCMPFieldBridge.java:304) at org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityComman d.execute(JDBCLoad EntityCommand.java:142) at org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityComman d.execute(JDBCLoad EntityCommand.java:62) at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.load Entity(JDBCStoreM anager.java:572) at org.jboss.ejb.plugins.CMPPersistenceManager.loadEntit y(CMPPersistence Manager.java:410) at org.jboss.resource.connectionmanager.CachedConnectio nInterceptor.load Entity(CachedConnectionInterceptor.java:353) at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.inv oke(EntityS ynchronizationInterceptor.java:262) at org.jboss.resource.connectionmanager.CachedConnectio nInterceptor.invo ke(CachedConnectionInterceptor.java:186) at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke (EntityInstance Interceptor.java:152) at org.jboss.ejb.plugins.EntityLockInterceptor.invoke (EntityLockIntercep tor.java:107) at org.jboss.ejb.plugins.EntityCreationInterceptor.invoke (EntityCreation Interceptor.java:69) at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext (AbstractTxInte rceptor.java:107) at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransacti ons(TxIntercep torCMT.java:178) at org.jboss.ejb.plugins.TxInterceptorCMT.invoke (TxInterceptorCMT.java:6 0) at org.jboss.ejb.plugins.SecurityInterceptor.invoke (SecurityInterceptor. java:130) at org.jboss.ejb.plugins.LogInterceptor.invoke (LogInterceptor.java:203) at org.jboss.ejb.EntityContainer.invoke (EntityContainer.java:493) at org.jboss.ejb.plugins.local.BaseLocalContainerInvoker.inv oke(BaseLoca lContainerInvoker.java:301) at org.jboss.ejb.plugins.local.EntityProxy.invoke (EntityProxy.java:38) at $Proxy161.getKeyValue(Unknown Source) at com.rendition.MyEJB.retrieveKey (MyEJB.java:155) ****** ---------------------------------------------------------------------- >Comment By: Boris Tamarkin (upss) Date: 2002-09-27 00:09 Message: Logged In: YES user_id=595649 I wanted to add: Scenario is: 1.start JBoss3.02 2.serialize object with CMP and persist 3. deserialize object (everything works great) 4. Shutdown Jboss 5.start jBoss 6. deserialize again persisted object Boom !!! Exception Doesn't works for String, and for byte[] ---------------------------------------------------------------------- Comment By: Boris Tamarkin (upss) Date: 2002-09-27 00:05 Message: Logged In: YES user_id=595649 Hi Dan, The problem still exists in 3.02 as well. In 3.02 deserialization works fine until first shut down the server. Next time server starting, same exception happens (please see below). So probably in 3.02 was work around of keeping in cash? But it is still broken though. **Important note: objects were serialized and deserialized in 3.02. So, something big missing here. I have tested with 3 databases: mySQL, SQLServer2000 and Oracle9i And You can't not to use Blob if You want to store crypto key for example. If it is impossible to fix, please say so. Thanks in advance, Boris **** 16:51:48,395 ERROR [LogInterceptor] TransactionRolledbackLocalException, causedB y: java.sql.SQLException: Unable to load to deserialize result: java.io.StreamCorru ptedException: invalid stream header at org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil.convertByteArrayToO bject(JDBC Util.java:612) at org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil.getResult (JDBCUtil.java:311) at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMPField Bridge.load ArgumentResults(JDBCAbstractCMPFieldBridge.java:350) at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMPField Bridge.load InstanceResults(JDBCAbstractCMPFieldBridge.java:304) at org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.exe cute(JDBCLoad EntityCommand.java:147) at org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.exe cute(JDBCLoad EntityCommand.java:62) at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.loadEntity (JDBCStoreM anager.java:572) at org.jboss.ejb.plugins.CMPPersistenceManager.loadEntity (CMPPersistence Manager.java:410) at org.jboss.resource.connectionmanager.CachedConnectionInte rceptor.load Entity(CachedConnectionInterceptor.java:353) at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke (EntityS ynchronizationInterceptor.java:262) at org.jboss.resource.connectionmanager.CachedConnectionInte rceptor.invo ke(CachedConnectionInterceptor.java:186) at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke (EntityInstance Interceptor.java:152) at org.jboss.ejb.plugins.EntityLockInterceptor.invoke (EntityLockIntercep tor.java:107) at org.jboss.ejb.plugins.EntityCreationInterceptor.invoke (EntityCreation Interceptor.java:69) at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext (AbstractTxInte rceptor.java:107) at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions (TxIntercep torCMT.java:178) at org.jboss.ejb.plugins.TxInterceptorCMT.invoke (TxInterceptorCMT.java:6 0) at org.jboss.ejb.plugins.SecurityInterceptor.invoke (SecurityInterceptor. java:130) at org.jboss.ejb.plugins.LogInterceptor.invoke (LogInterceptor.java:203) at org.jboss.ejb.EntityContainer.invoke (EntityContainer.java:493) at org.jboss.ejb.plugins.local.BaseLocalContainerInvoker.invoke (BaseLoca lContainerInvoker.java:301) at org.jboss.ejb.plugins.local.EntityProxy.invoke (EntityProxy.java:38) at $Proxy174.getKeyValue(Unknown Source) ** ---------------------------------------------------------------------- Comment By: Boris Tamarkin (upss) Date: 2002-09-27 00:04 Message: Logged In: YES user_id=595649 Hi Dan, The problem still exists in 3.02 as well. In 3.02 deserialization works fine until first shut down the server. Next time server starting, same exception happens (please see below). So probably in 3.02 was work around of keeping in cash? But it is still broken though. **Important note: objects were serialized and deserialized in 3.02. So, something big missing here. I have tested with 3 databases: mySQL, SQLServer2000 and Oracle9i And You can't not to use Blob if You want to store crypto key for example. If it is impossible to fix, please say so. Thanks in advance, Boris **** 16:51:48,395 ERROR [LogInterceptor] TransactionRolledbackLocalException, causedB y: java.sql.SQLException: Unable to load to deserialize result: java.io.StreamCorru ptedException: invalid stream header at org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil.convertByteArrayToO bject(JDBC Util.java:612) at org.jboss.ejb.plugins.cmp.jdbc.JDBCUtil.getResult (JDBCUtil.java:311) at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMPField Bridge.load ArgumentResults(JDBCAbstractCMPFieldBridge.java:350) at org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMPField Bridge.load InstanceResults(JDBCAbstractCMPFieldBridge.java:304) at org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.exe cute(JDBCLoad EntityCommand.java:147) at org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.exe cute(JDBCLoad EntityCommand.java:62) at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.loadEntity (JDBCStoreM anager.java:572) at org.jboss.ejb.plugins.CMPPersistenceManager.loadEntity (CMPPersistence Manager.java:410) at org.jboss.resource.connectionmanager.CachedConnectionInte rceptor.load Entity(CachedConnectionInterceptor.java:353) at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke (EntityS ynchronizationInterceptor.java:262) at org.jboss.resource.connectionmanager.CachedConnectionInte rceptor.invo ke(CachedConnectionInterceptor.java:186) at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke (EntityInstance Interceptor.java:152) at org.jboss.ejb.plugins.EntityLockInterceptor.invoke (EntityLockIntercep tor.java:107) at org.jboss.ejb.plugins.EntityCreationInterceptor.invoke (EntityCreation Interceptor.java:69) at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext (AbstractTxInte rceptor.java:107) at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions (TxIntercep torCMT.java:178) at org.jboss.ejb.plugins.TxInterceptorCMT.invoke (TxInterceptorCMT.java:6 0) at org.jboss.ejb.plugins.SecurityInterceptor.invoke (SecurityInterceptor. java:130) at org.jboss.ejb.plugins.LogInterceptor.invoke (LogInterceptor.java:203) at org.jboss.ejb.EntityContainer.invoke (EntityContainer.java:493) at org.jboss.ejb.plugins.local.BaseLocalContainerInvoker.invoke (BaseLoca lContainerInvoker.java:301) at org.jboss.ejb.plugins.local.EntityProxy.invoke (EntityProxy.java:38) at $Proxy174.getKeyValue(Unknown Source) ** ---------------------------------------------------------------------- Comment By: Dain Sundstrom (dsundstrom) Date: 2002-09-17 21:08 Message: Logged In: YES user_id=251431 I spend all day testing this and have determined the following: Value classes in 3.0.0 were really broken. You can not have a field of type java.lang.Object and get the value back out. If you have a field of some custom type (like my.custom.ValueClass), it will work until you redeploy your applcation and then you get class cast exceptions because of a classloader conflict. Value classes work perfectly in 3.0.2 if the field was stored using 3.0.2. If it was stored with 3.0.0, it will work the first time you deploy, but you will get a class cast exception on redeploy. This is because 3.0.0 stored a java.rmi.MarshalledObject, which doesn't respect classloaders, and 3.0.1+ stores a MarshalledValue, which uses classloaders correctly. To make a long story short, there is nothing more we can do. Hopefully this will be the last data incompatiblity we have, but there is no guarantee. I suggest you try to find a way to store you values in a more portable way in the database, such as an xml string. ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2002-08-27 13:42 Message: Logged In: NO We are using Oracle and map a String[] to a Blob and we do get the same exception. ---------------------------------------------------------------------- Comment By: Dain Sundstrom (dsundstrom) Date: 2002-08-24 00:10 Message: Logged In: YES user_id=251431 I don't use MS SQL Server, but I'll see if this works with my databases. It may just be a SQL Server bug. ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2002-08-21 18:28 Message: Logged In: NO Any news? Or whom should be assigned? Thanks ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=376685&aid=595672&group_id=22866 ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development