Bugs item #791946, was opened at 2003-08-20 09:39
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=791946&group_id=22866
Category: JBossServer
Group: v3.2
Status: Open
Resolution: None
Priority: 5
Submitted By: Jerrold E Eads (jeeads)
Assigned to: Nobody/Anonymous (nobody)
Summary: Optimistic Locking Problem with v.3.2.1
Initial Comment:
All updates fail if any locked field has been intialized with
null as its value.
Windows XP client
Windows 2000 Server
MicroSoft SQL Server 2000
JBoss 3.2.1
JAVA j2sdk1.4.1_01
Server error log:
2003-08-19 10:57:13,366 DEBUG
[org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreEntityCommand
.Project] Executing SQL: UPDATE Project SET Priority=?,
Status=?, AssignedTo=? WHERE ID=? AND Priority=? AND
Status=? AND AssignedTo=?
2003-08-19 10:57:13,382 DEBUG
[com.genecodes.dfa.project.project.ProjectBean]
ejbPassivate
2003-08-19 10:57:13,382 DEBUG
[com.genecodes.dfa.project.folder.FolderBean]
ejbPassivate
2003-08-19 10:57:13,382 ERROR
[org.jboss.ejb.plugins.LogInterceptor]
TransactionRolledbackException, causedBy:
javax.ejb.EJBException: Update failed. Expected one
affected row: rowsAffected=0id=Primary key: 731
at
org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreEntityCommand.
execute(JDBCStoreEntityCommand.java:165)
at
org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.storeEn
tity(JDBCStoreManager.java:649)
at
org.jboss.ejb.plugins.CMPPersistenceManager.storeEntity
(CMPPersistenceManager.java:434)
at
org.jboss.resource.connectionmanager.CachedConnection
Interceptor.storeEntity
(CachedConnectionInterceptor.java:388)
at org.jboss.ejb.EntityContainer.storeEntity
(EntityContainer.java:702)
at
org.jboss.ejb.GlobalTxEntityMap.synchronizeEntities
(GlobalTxEntityMap.java:163)
at
org.jboss.ejb.GlobalTxEntityMap$GlobalTxEntityMapCleanu
p.beforeCompletion(GlobalTxEntityMap.java:227)
at
org.jboss.tm.TransactionImpl.doBeforeCompletion
(TransactionImpl.java:1297)
at org.jboss.tm.TransactionImpl.commit
(TransactionImpl.java:338)
at
org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction
(TxInterceptorCMT.java:369)
at
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransacti
ons(TxInterceptorCMT.java:253)
at
org.jboss.ejb.plugins.TxInterceptorCMT.invoke
(TxInterceptorCMT.java:104)
at
org.jboss.ejb.plugins.SecurityInterceptor.invoke
(SecurityInterceptor.java:117)
at org.jboss.ejb.plugins.LogInterceptor.invoke
(LogInterceptor.java:191)
at
org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invok
e(ProxyFactoryFinderInterceptor.java:122)
at
org.jboss.ejb.StatelessSessionContainer.internalInvoke
(StatelessSessionContainer.java:322)
at org.jboss.ejb.Container.invoke
(Container.java:674)
at
sun.reflect.GeneratedMethodAccessor86.invoke
(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke
(Method.java:324)
at
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke
(ReflectedMBeanDispatcher.java:284)
at org.jboss.mx.server.MBeanServerImpl.invoke
(MBeanServerImpl.java:549)
at
org.jboss.invocation.jrmp.server.JRMPInvoker.invoke
(JRMPInvoker.java:359)
at
sun.reflect.GeneratedMethodAccessor85.invoke
(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke
(Method.java:324)
at sun.rmi.server.UnicastServerRef.dispatch
(UnicastServerRef.java:261)
at sun.rmi.transport.Transport$1.run
(Transport.java:148)
at java.security.AccessController.doPrivileged
(Native Method)
at sun.rmi.transport.Transport.serviceCall
(Transport.java:144)
at
sun.rmi.transport.tcp.TCPTransport.handleMessages
(TCPTransport.java:460)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.ru
n(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:536)
When using SQL Server with JBoss 3.2.1 the following
problem occurs.
When updating an optimistically locked field that has an
initial value of null the update fails.
Code related:
JDBCStoreCommand.java line 00108
sql.append(" WHERE").append(SQLUtil.getWhereClause
(whereFields));
The where fields are the primary key field and the
optimistically locked fields.
String jdbc::SQLUtil::getWhereClause(List fields) [inline
static]
Returns columnName0=? [AND columnName1=? [AND
columnName2=? [....]]]
In SQL Server 2000 if a field is null the syntax has to be
columnName0 is ? where ? is null
The columnName=? syntax fails the update.
The call on line 00108 should not be completed until the
values for the lockedFields are
known. This could be done in the for loop between lines
00142 and 00147. After getting
the values a call to SQLUtil.getWhereClause
(JDBCFieldBridge field) or
SQLUtil.getIsNullClause(boolean not, JDBCFieldBridge
field, String identifier) could be
appended to make the SQL statement correct.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=791946&group_id=22866
-------------------------------------------------------
This SF.net email is sponsored by Dice.com.
Did you know that Dice has over 25,000 tech jobs available today? From
careers in IT to Engineering to Tech Sales, Dice has tech jobs from the
best hiring companies. http://www.dice.com/index.epl?rel_code=104
_______________________________________________
JBoss-Development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development