Hello there,
to sync changes betwixt instances, I am using Remote Synchronizer with the
following setup:
===
er.extensions.ERXObjectStoreCoordinatorPool.maxCoordinators=3
er.extensions.remoteSynchronizer.enabled=true
er.extensions.remoteSynchronizer=er.jgroups.ERJGroupsSynchronizer
er.extensions.jgroupsSynchronizer.multicastAddress=230.0.0.1
er.extensions.jgroupsSynchronizer.multicastPort=9753
er.extensions.jgroupsSynchronizer.localBindAddress=127.0.0.1
er.extensions.jgroupsSynchronizer.groupName=REBOIS_SYNC
===
Most time, it works excellently.
Occassionally though, I'm getting exceptions like this
===
15:15:02.574 INFO Received 97 changes from 127.0.0.1:60979
//log:er.extensions.remoteSynchronizer.ERXRemoteSynchronizer
[Incoming-1,REBOIS_SYNC,127.0.0.1:62546]
15:15:02.985 ERROR Exception condition 379. Optimistic locking: multiple
transaction conflict detected.at
com.frontbase.jdbc.FBJErrorMetaData.errorMessageAtIndex(Unknown Source)
===
(full stack below). It does make sense: while my own save code is written to
handle optimistic exceptions properly, the Remote Synchronizer self-evidently
is not. But the outcome is rather grave, namely, instances which contain
different values in their EO stacks, and which either present the different
values to users, or even report weird errors.
(The last case, which lead me to this, was one instance removing an object from
a relationship and deleting it from the database. Another instance alas, most
probably due to the aforementioned exception, has not been informed that the
object was removed from a relationship, and fell to
databaseContextFailedToFetchObject. Ick.)
How do you solve this problem? To be frank, I can't see a solution, but for
writing my own Remote Synchronizer, which I would rather do without for time
reasons...
Thanks for any advice,
OC
=== full stack trace of the exception in case it helps any ===
15:15:02.574 INFO Received 97 changes from 127.0.0.1:60979
//log:er.extensions.remoteSynchronizer.ERXRemoteSynchronizer
[Incoming-1,REBOIS_SYNC,127.0.0.1:62546]
15:15:02.985 ERROR Exception condition 379. Optimistic locking: multiple
transaction conflict detected.at
com.frontbase.jdbc.FBJErrorMetaData.errorMessageAtIndex(Unknown Source)
at com.frontbase.jdbc.FBJErrorMetaData.getExceptionChain(Unknown Source)
at com.frontbase.jdbc.FBJConnection.checkMetaData(Unknown Source)
at com.frontbase.jdbc.FBJConnection.commit(Unknown Source)
at
com.webobjects.jdbcadaptor.JDBCContext.commitTransaction(JDBCContext.java:452)
at com.webobjects.jdbcadaptor.JDBCChannel._endFetch(JDBCChannel.java:417)
at com.webobjects.jdbcadaptor.JDBCChannel.fetchRow(JDBCChannel.java:1458)
at
com.webobjects.eoaccess.EODatabaseChannel._fetchObject(EODatabaseChannel.java:321)
at
com.webobjects.eoaccess.EODatabaseContext._objectsWithFetchSpecificationEditingContext(EODatabaseContext.java:3071)
at
er.extensions.eof.ERXDatabaseContext._objectsWithFetchSpecificationEditingContext(ERXDatabaseContext.java:68)
at
com.webobjects.eoaccess.EODatabaseContext.objectsWithFetchSpecification(EODatabaseContext.java:3195)
at
com.webobjects.eocontrol.EOObjectStoreCoordinator.objectsWithFetchSpecification(EOObjectStoreCoordinator.java:488)
at
com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4069)
at er.extensions.eof.ERXEC.objectsWithFetchSpecification(ERXEC.java:1308)
at
com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4444)
at
er.extensions.eof.ERXEOGlobalIDUtilities.fetchObjectsWithGlobalIDs(ERXEOGlobalIDUtilities.java:290)
at
er.extensions.eof.ERXObjectStoreCoordinatorSynchronizer$ProcessChangesQueue$UpdateCacheChangeProcessor.processCacheChange(ERXObjectStoreCoordinatorSynchronizer.java:393)
at
er.extensions.eof.ERXObjectStoreCoordinatorSynchronizer$ProcessChangesQueue.processRemoteChange(ERXObjectStoreCoordinatorSynchronizer.java:560)
at
er.extensions.eof.ERXObjectStoreCoordinatorSynchronizer$ProcessChangesQueue.run(ERXObjectStoreCoordinatorSynchronizer.java:622)
at java.lang.Thread.run(Thread.java:695)
Exception condition 363. Transaction rollback.
//log:er.extensions.eof.ERXObjectStoreCoordinatorSynchronizer
[ERXOSCProcessChanges]
JDBCAdaptorException: Exception condition 379. Optimistic locking: multiple
transaction conflict detected.
at
com.webobjects.jdbcadaptor.JDBCContext.commitTransaction(JDBCContext.java:455)
... skipped 4 stack elements
at
er.extensions.eof.ERXDatabaseContext._objectsWithFetchSpecificationEditingContext(ERXDatabaseContext.java:68)
... skipped 1 stack elements
at
com.webobjects.eocontrol.EOObjectStoreCoordinator.objectsWithFetchSpecification(EOObjectStoreCoordinator.java:488)
at
com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4069)
at er.extensions.eof.ERXEC.objectsWithFetchSpecification(ERXEC.java:1308)
at
com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4444)
at
er.extensions.eof.ERXEOGlobalIDUtilities.fetchObjectsWithGlobalIDs(ERXEOGlobalIDUtilities.java:290)
at
er.extensions.eof.ERXObjectStoreCoordinatorSynchronizer$ProcessChangesQueue$UpdateCacheChangeProcessor.processCacheChange(ERXObjectStoreCoordinatorSynchronizer.java:393)
at
er.extensions.eof.ERXObjectStoreCoordinatorSynchronizer$ProcessChangesQueue.processRemoteChange(ERXObjectStoreCoordinatorSynchronizer.java:560)
at
er.extensions.eof.ERXObjectStoreCoordinatorSynchronizer$ProcessChangesQueue.run(ERXObjectStoreCoordinatorSynchronizer.java:622)
... skipped 1 stack elements
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]