[ http://jira.jboss.com/jira/browse/JBAS-1519?page=history ]

Ian updated JBAS-1519:
----------------------

    Attachment: CMPBug.zip

This is a zipfile of an Eclipse project that implements the beans, plus Java 
source to run tests.

> CMR deletion problems with 2 CMR's and one is batch-cascade-delete
> ------------------------------------------------------------------
>
>          Key: JBAS-1519
>          URL: http://jira.jboss.com/jira/browse/JBAS-1519
>      Project: JBoss Application Server
>         Type: Bug
>   Components: CMP service
>     Versions: JBossAS-4.0.1 Final
>  Environment: Windows XP, Java 1.4.2_06
>     Reporter: Ian
>  Attachments: CMPBug.zip
>
>
> When you have 3 beans (A, B, and C). A has a 1-1 mandatory relationship with 
> B, with B having a non-nullable foreign key in A. A has a 1-many relationship 
> with C, and C is marked for cascade-delete. The problem occurs when you 
> populate A (which means B must be populated), and C is populated with 
> references to A. Then you delete A. 
> From the trace, you can see that the batch-cascade-delete work is deferred on 
> relationship C. Then it attempts to set the foreign key field of B to null in 
> A - which is not allowed, and a database constraint is activated. 
> If you remove the relationship from A to C, everything is fine. If you don't 
> populate C, everything is fine. 
> I have included two portions of traces from the log files. 
> This portion of the log file occurs when C is populated (deleting A): 
> 2005-02-25 09:53:10,772 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.A] RESET PERSISTENCE 
> CONTEXT: id=[.1.] 
> 2005-02-25 09:53:10,772 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] load data: entity=A 
> pk=[.1.] 
> 2005-02-25 09:53:10,772 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] No preload data found: 
> entity=A pk=[.1.] 
> 2005-02-25 09:53:10,772 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.A] Default eager-load 
> for entity: readahead=null 
> 2005-02-25 09:53:10,772 DEBUG 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.A] Executing SQL: 
> SELECT fk_B FROM A_TABLE WHERE (pk_A=?) 
> 2005-02-25 09:53:10,772 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.A#pkA] param: 
> i=1, type=INTEGER, value=1 
> 2005-02-25 09:53:10,772 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.A#fkB] result: 
> i=1, type=java.lang.Integer, value=1000 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.A.c] Read ahead 
> cahce load: cmrField=c pk=[.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] load data: entity=A 
> pk=[.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] No preload data found: 
> entity=A pk=[.1.] 
> 2005-02-25 09:53:10,782 DEBUG 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadRelationCommand.A] load relation SQL: 
> SELECT pk_C FROM C_TABLE WHERE (fk_A=?) 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.C#pkA] param: 
> i=1, type=INTEGER, value=1 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.C#pkC] result: 
> i=1, type=java.lang.Integer, value=1 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.C] Add preload data: entity=C 
> pk=[.1.] field=a 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.C#pkC] result: 
> i=1, type=java.lang.Integer, value=2 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.C] Add preload data: entity=C 
> pk=[.2.] field=a 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.C] Add finder results: 
> entity=C results=[[.1.], [.2.]] readahead=[JDBCReadAheadMetaData : 
> strategy=on-load, pageSize=1000, eagerLoadGroup=*, left-join[]] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.C] RESET PERSISTENCE 
> CONTEXT: id=[.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.C] load data: entity=C 
> pk=[.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.C] Preloading data: entity=C 
> pk=[.1.] cmrField=a 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.C] Scheduled for 
> batch-cascade-delete: [.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.C] RESET PERSISTENCE 
> CONTEXT: id=[.2.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.C] load data: entity=C 
> pk=[.2.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.C] Preloading data: entity=C 
> pk=[.2.] cmrField=a 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.C] Scheduled for 
> batch-cascade-delete: [.2.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.A.b] Read ahead 
> cahce load: cmrField=b pk=[.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] load data: entity=A 
> pk=[.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] No preload data found: 
> entity=A pk=[.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.B] RESET PERSISTENCE 
> CONTEXT: id=[.1000.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.B] load data: entity=B 
> pk=[.1000.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.B] No preload data found: 
> entity=B pk=[.1000.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.B] Default eager-load 
> for entity: readahead=null 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor.B] Remove relation: 
> field=A_b id=[.1000.] relatedId=[.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.CascadeDeleteStrategy$BatchCascadeDeleteStrategy.A]
>  Removing [.1.] 
> 2005-02-25 09:53:10,782 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor.A] Remove relation: 
> field=c id=[.1.] relatedId=[.1.] 
> 2005-02-25 09:53:10,792 DEBUG 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreEntityCommand.A] Executing SQL: 
> UPDATE A_TABLE SET fk_B=? WHERE pk_A=? 
> 2005-02-25 09:53:10,792 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.A#fkB] param: 
> i=1, type=INTEGER, value=NULL 
> 2005-02-25 09:53:10,792 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.A#pkA] param: 
> i=2, type=INTEGER, value=1 
> 2005-02-25 09:53:10,802 ERROR [org.jboss.ejb.plugins.LogInterceptor] 
> TransactionRolledbackLocalException in method: public abstract void 
> javax.ejb.EJBLocalObject.remove() throws 
> javax.ejb.RemoveException,javax.ejb.EJBException, causedBy: 
> java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for 
> JDBC][SQLServer]Cannot insert the value NULL into column 'fk_B', table 
> 'Dev.dbo.A_TABLE'; column does not allow nulls. UPDATE fails. 
> This is the log when table C is not populated and A is deleted (and 
> everything works): 
> 2005-02-25 09:56:13,309 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.A] RESET PERSISTENCE 
> CONTEXT: id=[.1.] 
> 2005-02-25 09:56:13,309 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] load data: entity=A 
> pk=[.1.] 
> 2005-02-25 09:56:13,309 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] No preload data found: 
> entity=A pk=[.1.] 
> 2005-02-25 09:56:13,309 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.A] Default eager-load 
> for entity: readahead=null 
> 2005-02-25 09:56:13,309 DEBUG 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.A] Executing SQL: 
> SELECT fk_B FROM A_TABLE WHERE (pk_A=?) 
> 2005-02-25 09:56:13,309 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.A#pkA] param: 
> i=1, type=INTEGER, value=1 
> 2005-02-25 09:56:13,309 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.A#fkB] result: 
> i=1, type=java.lang.Integer, value=1000 
> 2005-02-25 09:56:13,319 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.A.c] Read ahead 
> cahce load: cmrField=c pk=[.1.] 
> 2005-02-25 09:56:13,319 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] load data: entity=A 
> pk=[.1.] 
> 2005-02-25 09:56:13,319 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] No preload data found: 
> entity=A pk=[.1.] 
> 2005-02-25 09:56:13,319 DEBUG 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadRelationCommand.A] load relation SQL: 
> SELECT pk_C FROM C_TABLE WHERE (fk_A=?) 
> 2005-02-25 09:56:13,319 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.C#pkA] param: 
> i=1, type=INTEGER, value=1 
> 2005-02-25 09:56:13,319 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge.A.b] Read ahead 
> cahce load: cmrField=b pk=[.1.] 
> 2005-02-25 09:56:13,319 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] load data: entity=A 
> pk=[.1.] 
> 2005-02-25 09:56:13,319 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] No preload data found: 
> entity=A pk=[.1.] 
> 2005-02-25 09:56:13,319 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.B] RESET PERSISTENCE 
> CONTEXT: id=[.1000.] 
> 2005-02-25 09:56:13,319 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.B] load data: entity=B 
> pk=[.1000.] 
> 2005-02-25 09:56:13,329 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.B] No preload data found: 
> entity=B pk=[.1000.] 
> 2005-02-25 09:56:13,329 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge.B] Default eager-load 
> for entity: readahead=null 
> 2005-02-25 09:56:13,329 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor.B] Remove relation: 
> field=A_b id=[.1000.] relatedId=[.1.] 
> 2005-02-25 09:56:13,329 DEBUG 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCRemoveEntityCommand.A] Executing SQL: 
> DELETE FROM A_TABLE WHERE pk_A=? 
> 2005-02-25 09:56:13,329 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBridge.A#pkA] param: 
> i=1, type=INTEGER, value=1 
> 2005-02-25 09:56:13,329 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.JDBCRemoveEntityCommand.A] Remove: Rows 
> affected = 1 
> 2005-02-25 09:56:13,329 TRACE 
> [org.jboss.ejb.plugins.cmp.jdbc.ReadAheadCache.A] Removing cached data for 
> [.1.] 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.jboss.com/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
JBoss-Development mailing list
JBoss-Development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to