Author: jleroux
Date: Mon Dec 7 13:00:09 2009
New Revision: 887916
URL: http://svn.apache.org/viewvc?rev=887916&view=rev
Log:
A patch from Adrian Crum "ServerHit aborts transactions when trying
to create entries with duplicate startTime(s)."
(https://issues.apache.org/jira/browse/OFBIZ-2208) - OFBIZ-2208
This add synchronization for ServerHit entities creation. Hence
startTime is no longer used.
I have also removed some comment about the problem, and added one for
startTime no longer used.
Note: If synchronization proves to slow down sites we could introduce
a properties in serverstats.properties to switch from using it or not
since I did not remove startTime from the method signature
Then we will use one or the other lines
- serverHit.set("hitStartDateTime", new
java.sql.Timestamp(startTime));
+ serverHit.set("hitStartDateTime", getNowTimestamp());
Modified:
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java
Modified:
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java?rev=887916&r1=887915&r2=887916&view=diff
==============================================================================
---
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java
(original)
+++
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java
Mon Dec 7 13:00:09 2009
@@ -618,7 +618,7 @@
GenericValue serverHit = delegator.makeValue("ServerHit");
serverHit.set("visitId", visitId);
- serverHit.set("hitStartDateTime", new
java.sql.Timestamp(startTime));
+ serverHit.set("hitStartDateTime", getNowTimestamp()); //
A change was introduced with
https://issues.apache.org/jira/browse/OFBIZ-2208. Since then
startTime is not used anymore
serverHit.set("hitTypeId", ServerHitBin.typeIds[this.type]);
if (userLogin != null) {
serverHit.set("userLoginId",
userLogin.get("userLoginId"));
@@ -651,27 +651,15 @@
Debug.logError("Unable to get localhost internet
address: " + e.toString(), module);
}
- // The problem with
- //
- // serverHit.create();
- //
- // is that if there are two requests with the same
startTime (this should only happen with MySQL see
https://issues.apache.org/jira/browse/OFBIZ-2208)
- // then this will go wrong and abort the actual
- // transaction we are interested in.
- // Another way instead of using create is to store or
update,
- // that is overwrite in case there already was an entry,
thus
- // avoiding the transaction being aborted which is not
- // less desirable than having multiple requests with the
- // same startTime overwriting each other.
- // This may not satisfy those who want to record each and
- // every server hit even with equal startTimes but that
could be
- // solved adding a counter to the ServerHit's PK (a counter
- // counting multiple hits at the same startTime).
try {
serverHit.create();
} catch (GenericEntityException e) {
- Debug.logError(e, "Could not save ServerHit:", module);
+ Debug.logError(e, "Could not save ServerHit: ",
module);
}
}
}
+
+ public synchronized java.sql.Timestamp getNowTimestamp() {
+ return new java.sql.Timestamp(System.currentTimeMillis());
+ }
}