Hello I've found a bug that may have existed in 3.2 for a while, notably
3.2.2RC4, but never on 3.0.  I've created a light-weight stand-alone
test with only dependencies on Ant and JBoss jars on the CLASSPATH.  It
can be viewed at http://cvs.unzane.com/viewcvs.cgi/jboss32_null_cmr_bug/
and there is a link to download the whole tarball.

I'm encountering this bug all over the place in a real app that has 51
CMP entity beans and has been running fine for over a year on JBoss
3.0.x.  The test contains only two non-real-world entity beans: Parent
and Child.  These beans use custom primary key classes, otherwise the
bug cannot be exhibited.  There is a many-to-one relationship from Child
(many) to Parent (one), defined by the ChildEJB.getParentLocal method,
this side of the relationship is where the bug is at (other directions
and multiplicites won't exhibit this bug).  These beans and relations
run great except if I have code that wants to create an "orphan", that
is a Child that has no Parent, i.e. the one-side is null, for instance:

  orphan = childHome.create();

...JBoss 3.2 mysteriously (different than 3.0 behavior) sets the CMR
with a dummy PK (with id 0), so the following expression:

  orphan.getParent()

...would normally return null (and does on JBoss 3.0, and 3.2 with
default commit-option B), but instead returns a fake Parent instance
when commit-option A is enabled.  Should note that even with
commit-option B the dummy instance still exists for a short time in the
ejbPostCreate for instance.

I believe the test is fairly comprehensive, the ejb.jar even deploys 2
versions of each bean so both commit options can be tested in one run,
here's an example session:

$ ant
Buildfile: build.xml

ejb-jar:
    [mkdir] Created dir: /home/gturner/src/unzane/jboss32_null_cmr_bug/build/classes
    [javac] Compiling 13 source files to 
/home/gturner/src/unzane/jboss32_null_cmr_bug/build/classes
      [jar] Building jar: 
/home/gturner/src/unzane/jboss32_null_cmr_bug/build/jboss32_null_cmr_bug.jar

BUILD SUCCESSFUL
Total time: 2 seconds

$ cp build/jboss32_null_cmr_bug.jar /usr/local/java/jboss/server/default/deploy    

$ ant test
Buildfile: build.xml

ejb-jar:

test:
     [java] Testing Standard CMP 2.x EntityBean
     [java] Creating Parent...
     [java] Calling Parent.toString... jboss32_null_cmr_bug/Parent:5139960880366248960
     [java] Calling Parent.getId... 5139960880366248960
     [java] Creating Child...
     [java] Calling Child.toString... jboss32_null_cmr_bug/Child:5240388961643827200
     [java] Calling Child.getId... 5240388961643827200
     [java] Calling Parent.addChild...
     [java] Calling Child.getParent... jboss32_null_cmr_bug/Parent:5139960880366248960
     [java] Creating orphan Child...
     [java] Calling orphan Child.toString... 
jboss32_null_cmr_bug/Child:6867513262540569600
     [java] Calling orphan Child.getParent... null
     [java] *** Orphan parent is null, good! ***

     [java] Testing Commit Option A EntityBean
     [java] Creating Parent...
     [java] Calling Parent.toString... 
jboss32_null_cmr_bug/ParentOptionA:2399423911523140608
     [java] Calling Parent.getId... 2399423911523140608
     [java] Creating Child...
     [java] Calling Child.toString... 
jboss32_null_cmr_bug/ChildOptionA:5548511049581539328
     [java] Calling Child.getId... 5548511049581539328
     [java] Calling Parent.addChild...
     [java] Calling Child.getParent... 
jboss32_null_cmr_bug/ParentOptionA:2399423911523140608
     [java] Creating orphan Child...
     [java] Calling orphan Child.toString... 
jboss32_null_cmr_bug/ChildOptionA:6479498120984856576
     [java] Calling orphan Child.getParent... jboss32_null_cmr_bug/ParentOptionA:0
     [java] *** Orphan parent is not null, bad! ***
     [java] Expecting a FinderException from ParentEJB.setParent, however if the 
following code succeeds, then the non-exsitent Parent with id 0 will keep growing 
children even though the database will only have the Child records with null Parent 
foreign-key column
     [java] Children of non-exsistent jboss32_null_cmr_bug/ParentOptionA:0 before add 
orphan Child jboss32_null_cmr_bug/ChildOptionA:6479498120984856576: []
     [java] Children of non-exsistent jboss32_null_cmr_bug/ParentOptionA:0 after add 
orphan Child jboss32_null_cmr_bug/ChildOptionA:6479498120984856576: 
[jboss32_null_cmr_bug/ChildOptionA:6479498120984856576]

BUILD SUCCESSFUL
Total time: 2 seconds

-- 
Gerald Turner    Email: [EMAIL PROTECTED]    Phone: (503) 788-1720
GPG: 0xFA8CD6D5  21D9 B2E8 7FE7 F19E 5F7D  4D0C 3FA0 810F FA8C D6D5


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

Reply via email to