|Deyan Tsvetanov||Sep 25, 2009 11:22 pm|
|Deyan Tsvetanov||Sep 25, 2009 11:52 pm|
|Deyan Tsvetanov||Sep 26, 2009 1:22 am|
|Deyan Tsvetanov||Sep 26, 2009 1:55 am|
|Jacques Le Roux||Sep 27, 2009 8:02 am|
|Deyan Tsvetanov||Sep 29, 2009 6:03 am|
|Deyan Tsvetanov||Oct 4, 2009 2:57 am|
|Pank...@lntinfotech.com||Oct 4, 2009 10:46 pm|
|Jacques Le Roux||Oct 26, 2009 12:34 am|
|Jacques Le Roux||Oct 26, 2009 12:38 am|
|Deyan Tsvetanov||Oct 26, 2009 3:20 am|
|Jacques Le Roux||Oct 26, 2009 3:47 am|
|Jacques Le Roux||Oct 27, 2009 12:58 am|
|Hans Bakker||Oct 27, 2009 3:44 am|
|Adrian Crum||Oct 27, 2009 7:57 am|
|Jacques Le Roux||Oct 2, 2010 8:35 am|
|Subject:||Re: EntitySync issues & suggestions ( was EntitySync RMI error )|
|Date:||Oct 4, 2009 10:46:45 pm|
Hi Deyan n others
I have also worked & solved many sync problems in ofbiz in my application:
1) As you said while sync is in progress if server crashes, the status in EntitySync table gets in running state and we can't sync further until we manually change it even if we restart server it remains in running state To solve this problem: I created a new entity SyncStatus on client side to maintain the status of sync, in that ist status is Not Started, when service runEntitySync or runPullEntitySync starts I set the status of field as running and when service returns (whether fail or successful) I updated status to finish. I also added code, that if server restarts and if this field status is running change it to not started, By this I solved the above problem:
*) If client crashes, then after restart, status in SyncStatus table will be Not Started. *) If server crashes, then service will be failed and status will be finished and no further problem.
2) There were other problems like if sync(push or pull) is running, and one other job of same service is also created then we get exception "An instance is already running" By using above status in SyncStatus table when A job of sync is running, I just cancelled out all other jobs of same type.
3) I also solved "Connection refused" problem by same method even I displayed message on screen rather than giving exception on console.
4) I did not get your point of updating time stamp, I did not get this problem because In push or pull sync the successful timestamp is updated on EntitySync table on client or MCS side only if sync is successful, if server crashes or sync fails this field is not updated, but yes there are some issues: *) If we have 2 hours of sync, n sync fails on last minute. then in next sync as sync successful status has not been revisesd, next sync will pick the status of previous one, as a solution I think we need to keep updating syn status in EntitySync table after particular intervals. but how to decide these intervals b'coz tables are linked with foreign key constriants. *) One problem with connection refused in push and pull case is that, In pull sync first connection is established then data is prepared for sync while in push sync first data is prepared and then conncetion is established. So in pull sync we get connection refused problem in earlier stage than push sync. We can say in push sync if there is no MCS (Or MCS IP address is wrong), Our code is doing efforts in preparing data that effort is of no use.
5) If we place order on POS side and try to perform push sync, some time I was getting random exceptions due to order header or Order Status table, I solved the problem. Explain: In placing order (or others) if you have used a database trigger (eecas) like if an entry is created on A table create an entry on B table. Now wile sync if MCS is also having same trigger then as a entry is created (by sync) on A table , trigger is fired and an entry for B is created. Now for one A, B will be having two entries that creates random exception So I want to ask, that mean for sync there should not be ant trigger on opposite side(means for push MCS and for pull POS), how we will maintain that ???
I did not get your concept of using XML file inspite of RMI. Could you please give some details regarding that???? Even I agree with the fact that RMI takes long time.