Menu

#743 Deserialization broken in JBoss 3.01

v3.0 Rabbit Hole
closed-out-of-date
JBossCMP (436)
8
2015-04-20
2002-08-15
No

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)
******

Discussion

  • Boris Tamarkin

    Boris Tamarkin - 2002-08-15
    • priority: 5 --> 8
     
  • Nobody/Anonymous

    Logged In: NO

    Any news?
    Or whom should be assigned?
    Thanks

     
  • Dain Sundstrom

    Dain Sundstrom - 2002-08-24

    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.

     
  • Dain Sundstrom

    Dain Sundstrom - 2002-08-24
    • assigned_to: nobody --> dsundstrom
    • priority: 8 --> 5
    • status: open --> open-accepted
     
  • Nobody/Anonymous

    Logged In: NO

    We are using Oracle and map a String[] to a Blob and we do get the same exception.

     
  • Dain Sundstrom

    Dain Sundstrom - 2002-09-17
    • milestone: --> v3.0 Rabbit Hole
    • status: open-accepted --> closed-wont-fix
     
  • Dain Sundstrom

    Dain Sundstrom - 2002-09-17

    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.

     
  • Boris Tamarkin

    Boris Tamarkin - 2002-09-27

    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)
    **

     
  • Boris Tamarkin

    Boris Tamarkin - 2002-09-27
    • status: closed-wont-fix --> open-wont-fix
     
  • Boris Tamarkin

    Boris Tamarkin - 2002-09-27

    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)
    **

     
  • Boris Tamarkin

    Boris Tamarkin - 2002-09-27

    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[]

     
  • Boris Tamarkin

    Boris Tamarkin - 2002-10-01
    • priority: 5 --> 8
     
  • Stephen Coy

    Stephen Coy - 2002-10-31

    Logged In: YES
    user_id=463096

    The handling of large character and binary columns has been completely
    overhauled.
    The stack trace looks like a typical manifestation of JBoss's earlier
    BLOB/CLOB problems,
    Note that the JAVA_OBJECT jdbc type should probably not be mapped
    to binary columns - use VARBINARY, LONGVARBINARY or CLOB
    instead (of JAVA_OBJECT).
    Anyway, with correct mappings I believe this is fixed.

     
  • Boris Tamarkin

    Boris Tamarkin - 2002-11-01

    Logged In: YES
    user_id=595649

    Is it fixed in release, or in CVS?
    In JBoss 3.0.3 is not seem to be fixed.
    Thanks

     
  • Stephen Coy

    Stephen Coy - 2002-11-01

    Logged In: YES
    user_id=463096

    I believe that its fixed in Branch_3_0, Branch_3_2 and HEAD

     
  • Axel Mueller

    Axel Mueller - 2002-11-12

    Logged In: YES
    user_id=389955

    It seems to be fixed in 3.0.4 (in 3.2.0beta it is NOT fixed).

     
  • Dain Sundstrom

    Dain Sundstrom - 2003-08-17
    • assigned_to: dsundstrom --> nobody
     
  • Dain Sundstrom

    Dain Sundstrom - 2003-08-17

    Logged In: YES
    user_id=251431

    I am no no longer a JBoss committer, so I am unable to fix
    any bugs.

     
  • Bill Burke

    Bill Burke - 2003-08-18
    • assigned_to: nobody --> loubyansky
     
  • Alexey Loubyansky

    Logged In: YES
    user_id=543482

    Please, reopen if it is not fixed.

     
  • Alexey Loubyansky

    • status: open-wont-fix --> closed-out-of-date
     

Log in to post a comment.