TransactionRolledbackLocalException while creating bean inst
redbeard15 Nov 10, 2004 11:00 AMI have a fairly straight forward product catalog data model that includes categories,
products, items. Categories can have zero or more products, products can have zero
or more items.
I have a single (integer) primary key on all beans and have basic CMR mapping between
the beans. The primary keys are auto_increment fields in the DB. All beans also include
a character 'ID' field. The ID field is not unique at each level in the hierarchy (e.g., product
P0 can have item I0 associated with it as well as product P1 can have an Item I0 associated
with it).
I'm using MySQL 4.0.21, JBoss 3.2.3 on Linux RedHat 9.
The issue I'm having is how to have the system (JBoss, MySQL, etc.) handle more of the
'uniqueness' issue here. I've implemented an 'addChild()' business method on the category
and product beans to add children to their nest. This method determines if the new child
already exists (based on the ID field) in their nest. If so, then toss an exception.
This is, however, a bit heavy on the processing side........ I would like the system to
handle more of this processing. I tried composite keys on all of the beans but that
pretty much failed. I could create composite keys at the item level, but specifying
a composite key as a foreign key in the CMR relationship I just couldn't get to work.
Bummer.....
Soooo, I tried setting a UNIQUE INDEX (itemID, parentKey) on the database and having
the 'addChild()' method just call, for example, ItemLocalHome.create() with the new
Item child. The 'create()' succeeded but when the new Item bean was persisted, the
DB server threw a nasty exception back to JBoss
(TransactionRolledbackLocalException). Unfortunately, I couldn't trap this in any of
the beans' methods and return a nice error back to the client.
I understand that with CMP-based beans, I write less code but I also lose significant
processing control, especially in situations like this.
Is there any way of specifying something in the system to allow me to (not have
composite keys defined in the beans but) force JBoss or something else to provide
me better control in this situation (e.g., synchronize create() and persistence processing)
so I can handle error conditions better?
Thanks.