Bugs item #842237, was opened at 2003-11-14 18:59
Message generated for change (Comment added) made by loubyansky
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=842237&group_id=22866

Category: JBossCMP
Group: v3.2
>Status: Closed
>Resolution: Fixed
Priority: 5
Submitted By: Arnold Hahamyan (ahahamyan)
Assigned to: Alexey Loubyansky (loubyansky)
Summary: Optimistic Locking Problem with JBoss 3.2.2

Initial Comment:
I am trying to use the version-column strategy for 
optimistic locking. I have a table on mysql which has a 
version column (bigint). I have cmp getter and setters 
for this column on my entity bean just like other fields. 
In order to check to see if the client has stale data 
when updating I am checking version number of the DTO 
(value object) against the bean's version number in a 
modify method on the bean class. I am using the 
Instance per Transaction 2.x entity bean configuration 
and extending it by overriding the lock-policy NoLock 
with OptimisticLock as show in the documentation. I also 
have the following specified in the jbosscmp-jdbc.xml for 
the entity bean. 

<optimistic-locking>
<version-column/>
<field-name>version</field-name>
<column-name>version</column-name>
</optimistic-locking>

When I am creating a new entity bean through 
ejbcreate, I get the following error which leads me to 
believe that I cannot have cmp getters/setters on the 
version field, but I need to be able to check for stale 
data the client might have had during the "think-time"

jboss.ejb.plugins.cmp.jdbc.JDBCCreateEntityCommand.Us
er] Executing SQL: INSERT INTO usr(username, 
password, ftp_username, ftp_password, admin_rights, 
alter_media, alter_segments, alter_schedules, 
alter_players, version, version) VALUES 
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#userName] Set parameter: index=1, 
jdbcType=VARCHAR, value=arnold
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#password] Set parameter: index=2, 
jdbcType=VARCHAR, value=secret
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#ftpUserName] Set parameter: index=3, 
jdbcType=VARCHAR, value=firesign-ftp-usr
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#ftpPassword] Set parameter: index=4, 
jdbcType=VARCHAR, value=firesign-ftp-pass
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#adminRights] Set parameter: index=5, 
jdbcType=VARCHAR, value=yes
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#alterMedia] Set parameter: index=6, 
jdbcType=VARCHAR, value=yes
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#alterSegments] Set parameter: index=7, 
jdbcType=VARCHAR, value=no
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#alterSchedules] Set parameter: index=8, 
jdbcType=VARCHAR, value=no
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#alterPlayers] Set parameter: index=9, 
jdbcType=VARCHAR, value=yes
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMP2xFieldBrid
ge.User#version] Set parameter: index=10, 
jdbcType=BIGINT, value=NULL
2003-11-13 21:59:41,224 TRACE 
[org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCLongVersionFi
eldBridge.User#version] Set parameter: index=11, 
jdbcType=BIGINT, value=1
2003-11-13 21:59:41,264 ERROR 
[org.jboss.ejb.plugins.cmp.jdbc.JDBCCreateEntityComman
d.User] Could not create entity
java.sql.SQLException: General error, message from 
server: "Column 'version' specified twice"
The optimistic locking feature works fine as long as I do 
not use the same field with CMP getter and setters, but 
then how to I make sure that the client is not working 
with stale data. The test was performed on Windows XP 
PRO using JDK 1.4.2, JBoss 3.2.2, and MySQL 4.0.16


----------------------------------------------------------------------

>Comment By: Alexey Loubyansky (loubyansky)
Date: 2003-11-15 20:28

Message:
Logged In: YES 
user_id=543482

Fixed in Branch_3_2 and HEAD. Thanks.

----------------------------------------------------------------------

Comment By: Arnold Hahamyan (ahahamyan)
Date: 2003-11-15 07:31

Message:
Logged In: YES 
user_id=785553

I got this to work once I removed the cmp-field declarations 
for the version column for the entity bean in the jbossjdbc-
cmp.xml and ejb-jar.xml files. The abstract getters and 
setters in the bean class work fine. It seems that the field 
that is used for optimistic locking (version, timestamp, etc..) 
cannot also be declared as a cmp-field in the xml files even 
though it can be used as one.   

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=842237&group_id=22866


-------------------------------------------------------
This SF. Net email is sponsored by: GoToMyPC
GoToMyPC is the fast, easy and secure way to access your computer from
any Web browser or wireless device. Click here to Try it Free!
https://www.gotomypc.com/tr/OSDN/AW/Q4_2003/t/g22lp?Target=mm/g22lp.tmpl
_______________________________________________
JBoss-Development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to