Details
-
Bug
-
Resolution: Done
-
Major
-
JBossAS-3.2.6 Final
-
None
Description
SourceForge Submitter: crazyfoam .
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