Hi,

You are probably using the JBoss default commit
option A. See EJB 1.1 spec, section 9.1.10 for
details about commit options.
Commit option A is the fastest because the bean
data is not synchronized from persistent storage
at the start of every transaction. Thus two times
ejbStore() in a row with no ejbLoad() in between.
Unfortunately commit option A only works if the
container has exclusive access to the state in
the persistent storage.

If your table is only modified from your entity
bean, consider removing the check that data was
read, as the container will ensure reads when
needed.
Otherwise consider using commit option B or C
instead. The commit option can be set in the
jboss.xml file.

Best Regards,

Ole Husgaard.


John D Smothers wrote:
> I created a BMP entity bean that has a findByPrimaryKey() function that loads the 
>bean.  jBoss loads it
> correctly, but for some reason calls ejbStore() on it twice.  I figured it would call
> ejbLoad before it called ejbStore again.
> 
> This gives me a problem because I have a timestamp field in the table.  The save 
>stored
> proc expects to have the same timestamp as it had before or it throws an exception.  
>If
> it is the same, the stored proc will give the timestamp field a new value.  This is 
>to
> make sure that before record can be saved, the current record was viewed.  The 
>problem
> is that the timestamp was changed by the first ejbStore call to the stored proc, but 
>the
> entity bean was never updated with the new data, therefore the second call to 
>ejbStore
> called the stored proc with an old timestamp, and the stored proc threw an error.
> 
> So my question is two-fold.  Why did it call ejbStore twice in a row without calling
> ejbLoad?  and Why did it not automatically update my entity bean when the data in the
> database was changed?
> 
> [Container factory] Deploying Bank
> [Container factory] Deployed application:
> file:/home/johns/jBoss-2.0_FINAL/bin/../tmp/deploy/Bank.jar/ejb1006.jar
> [J2EE Deployer] J2EE application: file:/home/johns/jBoss-2.0_FINAL/deploy/Bank.jar is
> deployed.
> [Bank] ejbFindByPrimaryKey()
> [Bank]    id = 105
> [Bank] ejbLoad()
> [Bank]    timestamp = [B@56747b
> [Bank] ejbStore.store()
> [Bank]    timestamp = [B@56747b
> [Bank] ejbStore.store()
> [Bank]    timestamp = [B@56747b
> [Bank] java.rmi.RemoteException: com.sybase.jdbc2.jdbc.SybSQLException: bo_daemon
> Contact Info: : The timestamp shows that the row has been updated by another user.
> Please close this window and try again.
> [Bank]  at BankBean.ejbStore(BankBean.java:298)
> [Bank]  at java.lang.reflect.Method.invoke(Native Method)
> [Bank]  at
> 
>org.jboss.ejb.plugins.BMPPersistenceManager.storeEntity(BMPPersistenceManager.java:305)
> [Bank]  at
> 
>org.jboss.ejb.plugins.EntitySynchronizationInterceptor$InstanceSynchronization.beforeCom
> pletion(EntitySynchronizationInterceptor.java:343)
> [Bank]  at org.jboss.tm.TxCapsule.doBeforeCompletion(TxCapsule.java:1104)
> [Bank]  at org.jboss.tm.TxCapsule.commit(TxCapsule.java:278)
> [Bank]  at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:76)
> [Bank]  at
> org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:318)
> [Bank]  at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:99)
> [Bank]  at
> org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:144)
> [Bank]  at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
> [Bank]  at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:323)
> [Bank]  at
> 
>org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:
> 163)
> [Bank]  at java.lang.reflect.Method.invoke(Native Method)
> [Bank]  at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)
> [Bank]  at sun.rmi.transport.Transport$1.run(Transport.java:142)
> [Bank]  at java.security.AccessController.doPrivileged(Native Method)
> [Bank]  at sun.rmi.transport.Transport.serviceCall(Transport.java:139)
> [Bank]  at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443)
> [Bank]  at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643)
> [Bank]  at java.lang.Thread.run(Thread.java:484)
> 
> --
> --------------------------------------------------------------
> To subscribe:        [EMAIL PROTECTED]
> To unsubscribe:      [EMAIL PROTECTED]
> List Help?:          [EMAIL PROTECTED]


--
--------------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
List Help?:          [EMAIL PROTECTED]

Reply via email to