You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2014/09/01 09:29:24 UTC

svn commit: r1621696 [10/12] - in /ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23: ./ applications/order/webapp/ordermgr/WEB-INF/actions/return/ applications/party/webapp/partymgr/party/contactmechtemplates/ applications/party/widget/partymgr...

Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java?rev=1621696&r1=1621695&r2=1621696&view=diff
==============================================================================
--- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java (original)
+++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/stats/ServerHitBin.java Mon Sep  1 07:29:23 2014
@@ -19,14 +19,13 @@
 package org.ofbiz.webapp.stats;
 
 import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.Deque;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedDeque;
+import java.util.concurrent.ConcurrentMap;
 
 import javax.servlet.http.HttpServletRequest;
 
-import javolution.util.FastList;
-import javolution.util.FastMap;
-
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilMisc;
@@ -58,18 +57,18 @@ public class ServerHitBin {
     private static final String[] typeIds = {"", "REQUEST", "EVENT", "VIEW", "ENTITY", "SERVICE"};
 
     // these Maps contain Lists of ServerHitBin objects by id, the most recent is first in the list
-    public static Map<String, List<ServerHitBin>> requestHistory = FastMap.newInstance();
-    public static Map<String, List<ServerHitBin>> eventHistory = FastMap.newInstance();
-    public static Map<String, List<ServerHitBin>> viewHistory = FastMap.newInstance();
-    public static Map<String, List<ServerHitBin>> entityHistory = FastMap.newInstance();
-    public static Map<String, List<ServerHitBin>> serviceHistory = FastMap.newInstance();
+    public static final ConcurrentMap<String, Deque<ServerHitBin>> requestHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>();
+    public static final ConcurrentMap<String, Deque<ServerHitBin>> eventHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>();
+    public static final ConcurrentMap<String, Deque<ServerHitBin>> viewHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>();
+    public static final ConcurrentMap<String, Deque<ServerHitBin>> entityHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>();
+    public static final ConcurrentMap<String, Deque<ServerHitBin>> serviceHistory = new ConcurrentHashMap<String, Deque<ServerHitBin>>();
 
     // these Maps contain ServerHitBin objects by id
-    public static Map<String, ServerHitBin> requestSinceStarted = FastMap.newInstance();
-    public static Map<String, ServerHitBin> eventSinceStarted = FastMap.newInstance();
-    public static Map<String, ServerHitBin> viewSinceStarted = FastMap.newInstance();
-    public static Map<String, ServerHitBin> entitySinceStarted = FastMap.newInstance();
-    public static Map<String, ServerHitBin> serviceSinceStarted = FastMap.newInstance();
+    public static final ConcurrentMap<String, ServerHitBin> requestSinceStarted = new ConcurrentHashMap<String, ServerHitBin>();
+    public static final ConcurrentMap<String, ServerHitBin> eventSinceStarted = new ConcurrentHashMap<String, ServerHitBin>();
+    public static final ConcurrentMap<String, ServerHitBin> viewSinceStarted = new ConcurrentHashMap<String, ServerHitBin>();
+    public static final ConcurrentMap<String, ServerHitBin> entitySinceStarted = new ConcurrentHashMap<String, ServerHitBin>();
+    public static final ConcurrentMap<String, ServerHitBin> serviceSinceStarted = new ConcurrentHashMap<String, ServerHitBin>();
 
     public static void countRequest(String id, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin) {
         countHit(id, REQUEST, request, startTime, runningTime, userLogin);
@@ -105,6 +104,35 @@ public class ServerHitBin {
         }
     }
 
+    private static long getNewBinLength() {
+        long binLength = (long) UtilProperties.getPropertyNumber("serverstats", "stats.bin.length.millis");
+
+        // if no or 0 binLength specified, set to 30 minutes
+        if (binLength <= 0) binLength = 1800000;
+        // if binLength is more than an hour, set it to one hour
+        if (binLength > 3600000) binLength = 3600000;
+        return binLength;
+    }
+
+    private static long getEvenStartingTime(long binLength) {
+        // binLengths should be a divisable evenly into 1 hour
+        long curTime = System.currentTimeMillis();
+
+        // find the first previous millis that are even on the hour
+        Calendar cal = Calendar.getInstance();
+
+        cal.setTime(new Date(curTime));
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+
+        while (cal.getTime().getTime() < (curTime - binLength)) {
+            cal.add(Calendar.MILLISECOND, (int) binLength);
+        }
+
+        return cal.getTime().getTime();
+    }
+
     private static void countHit(String baseId, int type, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin, boolean isOriginal) {
         Delegator delegator = (Delegator) request.getAttribute("delegator");
         if (delegator == null) {
@@ -118,7 +146,7 @@ public class ServerHitBin {
         String id = makeIdTenantAware(baseId, delegator);
 
         ServerHitBin bin = null;
-        List<ServerHitBin> binList = null;
+        Deque<ServerHitBin> binList = null;
 
         switch (type) {
         case REQUEST:
@@ -143,76 +171,77 @@ public class ServerHitBin {
         }
 
         if (binList == null) {
-            synchronized (ServerHitBin.class) {
-                switch (type) {
-                case REQUEST:
-                    binList = requestHistory.get(id);
-                    break;
-
-                case EVENT:
-                    binList = eventHistory.get(id);
-                    break;
-
-                case VIEW:
-                    binList = viewHistory.get(id);
-                    break;
-
-                case ENTITY:
-                    binList = entityHistory.get(id);
-                    break;
-
-                case SERVICE:
-                    binList = serviceHistory.get(id);
-                    break;
-                }
-                if (binList == null) {
-                    binList = FastList.newInstance();
-                    switch (type) {
-                    case REQUEST:
-                        requestHistory.put(id, binList);
-                        break;
-
-                    case EVENT:
-                        eventHistory.put(id, binList);
-                        break;
-
-                    case VIEW:
-                        viewHistory.put(id, binList);
-                        break;
-
-                    case ENTITY:
-                        entityHistory.put(id, binList);
-                        break;
-
-                    case SERVICE:
-                        serviceHistory.put(id, binList);
-                        break;
-                    }
-                }
+            binList = new ConcurrentLinkedDeque<ServerHitBin>();
+            Deque<ServerHitBin> listFromMap = null;
+            switch (type) {
+            case REQUEST:
+                listFromMap = requestHistory.putIfAbsent(id, binList);
+                break;
+
+            case EVENT:
+                listFromMap = eventHistory.putIfAbsent(id, binList);
+                break;
+
+            case VIEW:
+                listFromMap = viewHistory.putIfAbsent(id, binList);
+                break;
+
+            case ENTITY:
+                listFromMap = entityHistory.putIfAbsent(id, binList);
+                break;
+
+            case SERVICE:
+                listFromMap = serviceHistory.putIfAbsent(id, binList);
+                break;
             }
+            binList = listFromMap != null ? listFromMap : binList;
         }
 
-        if (binList.size() > 0) {
-            bin = binList.get(0);
-        }
-        if (bin == null) {
-            synchronized (ServerHitBin.class) {
-                if (binList.size() > 0) {
-                    bin = binList.get(0);
-                }
-                if (bin == null) {
-                    bin = new ServerHitBin(id, type, true, delegator);
-                    if (binList.size() > 0) {
-                        binList.add(0, bin);
-                    } else {
-                        binList.add(bin);
+        do {
+            bin = binList.peek();
+            if (bin == null) {
+                binList.addFirst(new ServerHitBin(id, type, true, delegator));
+            }
+        } while (bin == null);
+
+        long toTime = startTime + runningTime;
+        // advance the bin
+        // first check to see if the bin has expired, if so save and recycle it
+        while (bin.limitLength && toTime > bin.endTime) {
+            // the first in the list will be this object, remove and copy it,
+            // put the copy at the first of the list, then put this object back on
+            if (bin.getNumberHits() > 0) {
+                // persist each bin when time ends if option turned on
+                if (UtilProperties.propertyValueEqualsIgnoreCase("serverstats", "stats.persist." + ServerHitBin.typeIds[type] + ".bin", "true")) {
+                    GenericValue serverHitBin = delegator.makeValue("ServerHitBin");
+                    serverHitBin.set("contentId", bin.id);
+                    serverHitBin.set("hitTypeId", ServerHitBin.typeIds[bin.type]);
+                    serverHitBin.set("binStartDateTime", new java.sql.Timestamp(bin.startTime));
+                    serverHitBin.set("binEndDateTime", new java.sql.Timestamp(bin.endTime));
+                    serverHitBin.set("numberHits", Long.valueOf(bin.getNumberHits()));
+                    serverHitBin.set("totalTimeMillis", Long.valueOf(bin.getTotalRunningTime()));
+                    serverHitBin.set("minTimeMillis", Long.valueOf(bin.getMinTime()));
+                    serverHitBin.set("maxTimeMillis", Long.valueOf(bin.getMaxTime()));
+                    // get localhost ip address and hostname to store
+                    if (VisitHandler.address != null) {
+                        serverHitBin.set("serverIpAddress", VisitHandler.address.getHostAddress());
+                        serverHitBin.set("serverHostName", VisitHandler.address.getHostName());
+                    }
+                    try {
+                        delegator.createSetNextSeqId(serverHitBin);
+                    } catch (GenericEntityException e) {
+                        Debug.logError(e, "Could not save ServerHitBin:", module);
                     }
                 }
+            } else {
+                binList.pollFirst();
             }
+            bin = new ServerHitBin(bin, bin.endTime + 1);
+            binList.addFirst(bin);
         }
 
-        bin.addHit(startTime, runningTime);
-        if (isOriginal && !id.startsWith("GLOBAL")) {
+        bin.addHit(runningTime);
+        if (isOriginal) {
             try {
                 bin.saveHit(request, startTime, runningTime, userLogin);
             } catch (GenericEntityException e) {
@@ -221,25 +250,26 @@ public class ServerHitBin {
         }
 
         // count since start global and per id hits
-        if (!id.startsWith("GLOBAL"))
-            countHitSinceStart(id, type, startTime, runningTime, isOriginal, delegator);
+        if (!id.startsWith("GLOBAL")) {
+            countHitSinceStart(id, type, runningTime, delegator);
+            if (isOriginal) {
+                countHitSinceStart(makeIdTenantAware("GLOBAL", delegator), type, runningTime, delegator);
+            }
+        }
 
         // also count hits up the hierarchy if the id contains a '.'
         if (id.indexOf('.') > 0) {
             countHit(id.substring(0, id.lastIndexOf('.')), type, request, startTime, runningTime, userLogin, false);
         }
 
-        if (isOriginal && !id.startsWith("GLOBAL"))
-            countHit("GLOBAL", type, request, startTime, runningTime, userLogin, true);
+        if (isOriginal) {
+            countHit("GLOBAL", type, request, startTime, runningTime, userLogin, false);
+        }
     }
 
-    private static void countHitSinceStart(String baseId, int type, long startTime, long runningTime, boolean isOriginal, Delegator delegator) {
-
-        String id = makeIdTenantAware(baseId, delegator);
-
+    private static void countHitSinceStart(String id, int type, long runningTime, Delegator delegator) {
         ServerHitBin bin = null;
 
-        // save in global, and try to get bin by id
         switch (type) {
         case REQUEST:
             bin = requestSinceStarted.get(id);
@@ -263,60 +293,32 @@ public class ServerHitBin {
         }
 
         if (bin == null) {
-            synchronized (ServerHitBin.class) {
-                switch (type) {
-                case REQUEST:
-                    bin = requestSinceStarted.get(id);
-                    break;
-
-                case EVENT:
-                    bin = eventSinceStarted.get(id);
-                    break;
-
-                case VIEW:
-                    bin = viewSinceStarted.get(id);
-                    break;
-
-                case ENTITY:
-                    bin = entitySinceStarted.get(id);
-                    break;
-
-                case SERVICE:
-                    bin = serviceSinceStarted.get(id);
-                    break;
-                }
+            bin = new ServerHitBin(id, type, false, delegator);
+            ServerHitBin binFromMap = null;
+            switch (type) {
+            case REQUEST:
+                binFromMap = requestSinceStarted.putIfAbsent(id, bin);
+                break;
 
-                if (bin == null) {
-                    bin = new ServerHitBin(id, type, false, delegator);
-                    switch (type) {
-                    case REQUEST:
-                        requestSinceStarted.put(id, bin);
-                        break;
-
-                    case EVENT:
-                        eventSinceStarted.put(id, bin);
-                        break;
-
-                    case VIEW:
-                        viewSinceStarted.put(id, bin);
-                        break;
-
-                    case ENTITY:
-                        entitySinceStarted.put(id, bin);
-                        break;
-
-                    case SERVICE:
-                        serviceSinceStarted.put(id, bin);
-                        break;
-                    }
-                }
-            }
-        }
+            case EVENT:
+                binFromMap = eventSinceStarted.putIfAbsent(id, bin);
+                break;
 
-        bin.addHit(startTime, runningTime);
+            case VIEW:
+                binFromMap = viewSinceStarted.putIfAbsent(id, bin);
+                break;
+
+            case ENTITY:
+                binFromMap = entitySinceStarted.putIfAbsent(id, bin);
+                break;
 
-        if (isOriginal)
-            countHitSinceStart("GLOBAL", type, startTime, runningTime, false, delegator);
+            case SERVICE:
+                binFromMap = serviceSinceStarted.putIfAbsent(id, bin);
+                break;
+            }
+            bin = binFromMap != null ? binFromMap : bin;
+        }
+        bin.addHit(runningTime);
     }
 
     private final Delegator delegator;
@@ -324,8 +326,9 @@ public class ServerHitBin {
     private final int type;
     private final boolean limitLength;
     private final long binLength;
-    private long startTime;
-    private long endTime;
+    private final long startTime;
+    private final long endTime;
+
     private long numberHits;
     private long totalRunningTime;
     private long minTime;
@@ -337,21 +340,37 @@ public class ServerHitBin {
         this.limitLength = limitLength;
         this.delegator = delegator;
         this.binLength = getNewBinLength();
-        reset(getEvenStartingTime());
+        this.startTime = getEvenStartingTime(this.binLength);
+        if (this.limitLength) {
+            // subtract 1 millisecond to keep bin starting times even
+            this.endTime = this.startTime + this.binLength - 1;
+        } else {
+            this.endTime = 0;
+        }
+        this.numberHits = 0;
+        this.totalRunningTime = 0;
+        this.minTime = Long.MAX_VALUE;
+        this.maxTime = 0;
     }
 
-    private ServerHitBin(ServerHitBin oldBin) {
+    private ServerHitBin(ServerHitBin oldBin, long startTime) {
         this.id = oldBin.id;
         this.type = oldBin.type;
         this.limitLength = oldBin.limitLength;
         this.delegator = oldBin.delegator;
         this.binLength = oldBin.binLength;
-        this.startTime = oldBin.startTime;
-        this.endTime = oldBin.endTime;
-        this.numberHits = oldBin.numberHits;
-        this.totalRunningTime = oldBin.totalRunningTime;
-        this.minTime = oldBin.minTime;
-        this.maxTime = oldBin.maxTime;
+
+        this.startTime = startTime;
+        if (limitLength) {
+            // subtract 1 millisecond to keep bin starting times even
+            this.endTime = this.startTime + this.binLength - 1;
+        } else {
+            this.endTime = 0;
+        }
+        this.numberHits = 0;
+        this.totalRunningTime = 0;
+        this.minTime = Long.MAX_VALUE;
+        this.maxTime = 0;
     }
 
     public Delegator getDelegator() {
@@ -397,77 +416,44 @@ public class ServerHitBin {
         return (this.getBinLength()) / 60000.0;
     }
 
-    public long getNumberHits() {
+    public synchronized long getNumberHits() {
         return this.numberHits;
     }
 
-    public double getMinTimeSeconds() {
-        return (this.minTime) / 1000.0;
+    public synchronized long getMinTime() {
+        return this.minTime;
     }
 
-    public double getMaxTimeSeconds() {
-        return (this.maxTime) / 1000.0;
+    public synchronized long getMaxTime() {
+        return this.maxTime;
     }
 
-    public double getAvgTime() {
-        return ((double) this.totalRunningTime) / ((double) this.numberHits);
+    public synchronized long getTotalRunningTime() {
+        return this.totalRunningTime;
     }
 
-    public double getAvgTimeSeconds() {
-        return this.getAvgTime() / 1000.0;
+    public double getMinTimeSeconds() {
+        return (this.getMinTime()) / 1000.0;
     }
 
-    /** return the hits per minute using the entire length of the bin as returned by getBinLengthMinutes() */
-    public double getHitsPerMinute() {
-        return (this.numberHits) / this.getBinLengthMinutes();
+    public double getMaxTimeSeconds() {
+        return (this.getMaxTime()) / 1000.0;
     }
 
-    private long getNewBinLength() {
-        long binLength = (long) UtilProperties.getPropertyNumber("serverstats", "stats.bin.length.millis");
-
-        // if no or 0 binLength specified, set to 30 minutes
-        if (binLength <= 0) binLength = 1800000;
-        // if binLength is more than an hour, set it to one hour
-        if (binLength > 3600000) binLength = 3600000;
-        return binLength;
+    public synchronized double getAvgTime() {
+        return ((double) this.getTotalRunningTime()) / ((double) this.getNumberHits());
     }
 
-    private long getEvenStartingTime() {
-        // binLengths should be a divisable evenly into 1 hour
-        long curTime = System.currentTimeMillis();
-
-        // find the first previous millis that are even on the hour
-        Calendar cal = Calendar.getInstance();
-
-        cal.setTime(new Date(curTime));
-        cal.set(Calendar.MINUTE, 0);
-        cal.set(Calendar.SECOND, 0);
-        cal.set(Calendar.MILLISECOND, 0);
-
-        while (cal.getTime().getTime() < (curTime - this.binLength)) {
-            cal.add(Calendar.MILLISECOND, (int) this.binLength);
-        }
-
-        return cal.getTime().getTime();
+    public double getAvgTimeSeconds() {
+        return this.getAvgTime() / 1000.0;
     }
 
-    private void reset(long startTime) {
-        this.startTime = startTime;
-        if (limitLength) {
-            // subtract 1 millisecond to keep bin starting times even
-            this.endTime = startTime + this.binLength - 1;
-        } else {
-            this.endTime = 0;
-        }
-        this.numberHits = 0;
-        this.totalRunningTime = 0;
-        this.minTime = Long.MAX_VALUE;
-        this.maxTime = 0;
+    /** return the hits per minute using the entire length of the bin as returned by getBinLengthMinutes() */
+    public double getHitsPerMinute() {
+        return this.getNumberHits() / this.getBinLengthMinutes();
     }
 
-    private synchronized void addHit(long startTime, long runningTime) {
-        advanceBin(startTime + runningTime);
-
+    private synchronized void addHit(long runningTime) {
         this.numberHits++;
         this.totalRunningTime += runningTime;
         if (runningTime < this.minTime)
@@ -476,67 +462,6 @@ public class ServerHitBin {
             this.maxTime = runningTime;
     }
 
-    private synchronized void advanceBin(long toTime) {
-        // first check to see if this bin has expired, if so save and recycle it
-        while (limitLength && toTime > this.endTime) {
-            List<ServerHitBin> binList = null;
-
-            switch (type) {
-            case REQUEST:
-                binList = requestHistory.get(id);
-                break;
-
-            case EVENT:
-                binList = eventHistory.get(id);
-                break;
-
-            case VIEW:
-                binList = viewHistory.get(id);
-                break;
-
-            case ENTITY:
-                binList = entityHistory.get(id);
-                break;
-
-            case SERVICE:
-                binList = serviceHistory.get(id);
-                break;
-            }
-
-            // the first in the list will be this object, remove and copy it,
-            // put the copy at the first of the list, then put this object back on
-            binList.remove(0);
-            if (this.numberHits > 0) {
-                binList.add(0, new ServerHitBin(this));
-
-                // persist each bin when time ends if option turned on
-                if (UtilProperties.propertyValueEqualsIgnoreCase("serverstats", "stats.persist." + ServerHitBin.typeIds[type] + ".bin", "true")) {
-                    GenericValue serverHitBin = delegator.makeValue("ServerHitBin");
-                    serverHitBin.set("contentId", this.id);
-                    serverHitBin.set("hitTypeId", ServerHitBin.typeIds[this.type]);
-                    serverHitBin.set("binStartDateTime", new java.sql.Timestamp(this.startTime));
-                    serverHitBin.set("binEndDateTime", new java.sql.Timestamp(this.endTime));
-                    serverHitBin.set("numberHits", Long.valueOf(this.numberHits));
-                    serverHitBin.set("totalTimeMillis", Long.valueOf(this.totalRunningTime));
-                    serverHitBin.set("minTimeMillis", Long.valueOf(this.minTime));
-                    serverHitBin.set("maxTimeMillis", Long.valueOf(this.maxTime));
-                    // get localhost ip address and hostname to store
-                    if (VisitHandler.address != null) {
-                        serverHitBin.set("serverIpAddress", VisitHandler.address.getHostAddress());
-                        serverHitBin.set("serverHostName", VisitHandler.address.getHostName());
-                    }
-                    try {
-                        delegator.createSetNextSeqId(serverHitBin);
-                    } catch (GenericEntityException e) {
-                        Debug.logError(e, "Could not save ServerHitBin:", module);
-                    }
-                }
-            }
-            this.reset(this.endTime + 1);
-            binList.add(0, this);
-        }
-    }
-
     private void saveHit(HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin) throws GenericEntityException {
         // persist record of hit in ServerHit entity if option turned on
         if (UtilProperties.propertyValueEqualsIgnoreCase("serverstats", "stats.persist." + ServerHitBin.typeIds[type] + ".hit", "true")) {
@@ -572,26 +497,6 @@ public class ServerHitBin {
             
             Debug.logInfo("Visit delegatorName=" + visit.getDelegator().getDelegatorName() + ", ServerHitBin delegatorName=" + this.delegator.getDelegatorName(), module);
             
-            /* this isn't needed, the problem was better solved elsewhere, and without adding another query; leaving it here because it might be useful for something in the future
-             * else {
-                try {
-                    // see if the error was caused by a bad visitId, and if so create a new visit and try again
-                    GenericValue freshVisit = delegator.findOne("Visit", false, "visitId", visitId);
-                    if (freshVisit == null) {
-                        Debug.logInfo("Visit with ID [" + visitId + "] does not exist in the database, removing from session and making a new one", module);
-                        // something happened, have a bad visit in the session so remove it and try again
-                        request.getSession().removeAttribute("visit");
-                        visitId = VisitHandler.getVisitId(request.getSession());
-                        Debug.logInfo("After making new Visit the ID is [" + visitId + "]", module);
-                    }
-                } catch (GenericEntityException e) {
-                    // this is an error on the retry and not part of the main flow, so log it and let it go
-                    Debug.logWarning(e, "Error retrying ServerHit: " + e.toString(), module);
-                }                
-                
-            }
-            */
-
             GenericValue serverHit = delegator.makeValue("ServerHit");
 
             serverHit.set("visitId", visitId);

Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webtools/config/WebtoolsErrorUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webtools/config/WebtoolsErrorUiLabels.xml?rev=1621696&r1=1621695&r2=1621696&view=diff
==============================================================================
--- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webtools/config/WebtoolsErrorUiLabels.xml (original)
+++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webtools/config/WebtoolsErrorUiLabels.xml Mon Sep  1 07:29:23 2014
@@ -74,7 +74,7 @@
         <value xml:lang="ro">Creatie ${entityName} falita pentru entitatea</value>
         <value xml:lang="th">การสร้างของ${entityName} ล้มเหลวสำหรับเอนทิตี</value>
         <value xml:lang="zh">无法为实体创建${entityName}</value>
-        <value xml:lang="zh_TW">無法為實體創建${entityName}</value>
+        <value xml:lang="zh_TW">無法為實體新建${entityName}</value>
     </property>
     <property key="genericWebEvent.delegator_object_not_found">
         <value xml:lang="en">The delegator object was not found in the request, please check the control servlet init</value>
@@ -258,7 +258,7 @@
         <value xml:lang="ro">Toate cache-urile au fost curatate</value>
         <value xml:lang="th">เคลียร์หน่วยความจำทั้งหมด</value>
         <value xml:lang="zh">已清除全部缓存</value>
-        <value xml:lang="zh_TW">已清除全部緩存</value>
+        <value xml:lang="zh_TW">已清除全部快取</value>
     </property>
     <property key="utilCache.clearAllExpiredElements">
         <value xml:lang="en">Cleared all expired elements from all caches</value>
@@ -269,7 +269,7 @@
         <value xml:lang="ro">Au fost Curatate toate elementele expirate din toate cach-urile</value>
         <value xml:lang="th">เคลียร์สิ่งเล็กน้อยหมดอายุทั้งหมดจากหน่วยความจำทั้งหมด</value>
         <value xml:lang="zh">从全部缓存中清除了全部过期元素</value>
-        <value xml:lang="zh_TW">從全部緩存中清除了全部過期元素</value>
+        <value xml:lang="zh_TW">從全部快取中清除了全部過期元素</value>
     </property>
     <property key="utilCache.clearCache">
         <value xml:lang="en">Cleared cache with name: ${name}</value>
@@ -280,7 +280,7 @@
         <value xml:lang="ro">Curatire cache cu nume: ${name}</value>
         <value xml:lang="th">เคลียร์หน่วยความจำด้วยชื่อ: ${name}</value>
         <value xml:lang="zh">已清除缓存:${name}</value>
-        <value xml:lang="zh_TW">已清除緩存:${name}</value>
+        <value xml:lang="zh_TW">已清除快取:${name}</value>
     </property>
     <property key="utilCache.couldNotClearCache">
         <value xml:lang="en">Could not clear cache, no name specified</value>
@@ -291,7 +291,7 @@
         <value xml:lang="ro">Nu este posibila curatarea cach-ului, nici-un nume  specificat</value>
         <value xml:lang="th">ไม่สามารถเคลียร์หน่วยความจำ , ไม่ระบุชื่อ</value>
         <value xml:lang="zh">无法清除缓存,没有指定名称</value>
-        <value xml:lang="zh_TW">無法清除緩存,沒有指定名稱</value>
+        <value xml:lang="zh_TW">無法清除快取,沒有指定名稱</value>
     </property>
     <property key="utilCache.couldNotClearCacheNotFoundName">
         <value xml:lang="en">Could not clear cache, cache not found with name: ${name}</value>
@@ -302,7 +302,7 @@
         <value xml:lang="ro">Nu este posibila curatirea cache,nu gaseste nume cache: ${name}</value>
         <value xml:lang="th">ไม่สามารถเคลียร์หน่วยความจำ , ไม่พบหน่วยความจำด้วยชื่อ: ${name}</value>
         <value xml:lang="zh">无法清除缓存,没有找到缓存:${name}</value>
-        <value xml:lang="zh_TW">無法清除緩存,沒有找到緩存:${name}</value>
+        <value xml:lang="zh_TW">無法清除快取,沒有找到快取:${name}</value>
     </property>
     <property key="utilCache.couldNotRemoveElement">
         <value xml:lang="en">Could not remove cache element, cache not found with name: ${name}</value>
@@ -313,7 +313,7 @@
         <value xml:lang="ro">Nu este posibila stergerea elementului din chash, nu gaseste chash cu nume: ${name}</value>
         <value xml:lang="th">ไม่สามารถย้ายองค์ประกอบจากหน่วยความจำ, ไม่พบหน่วยความจำด้วยชื่อ: ${name}</value>
         <value xml:lang="zh">无法删除缓存元素,没有找到名称为 ${name} 的缓存</value>
-        <value xml:lang="zh_TW">無法刪除緩存元素,沒有找到名稱為 ${name} 的緩存</value>
+        <value xml:lang="zh_TW">無法刪除快取元素,沒有找到名稱為 ${name} 的快取</value>
     </property>
     <property key="utilCache.couldNotRemoveElementNumber">
         <value xml:lang="en">Could not remove cache element, element not found with cache name: ${name} , element number: ${numString}</value>
@@ -324,7 +324,7 @@
         <value xml:lang="ro">Nu este possibila stergerea elementului din chesh-ul, nu gaseste elementul cu numele cache: ${name} , element numar: ${numString}</value>
         <value xml:lang="th">ไม่สามารถย้ายองค์ประกอบจากหน่วยความจำ, ไม่พบองค์ประกอบด้วยชื่อหน่วยความจำ: ${name} , หมายเลของค์ประกอบ: ${numString}</value>
         <value xml:lang="zh">无法删除缓存元素,符合条件的元素没有找到,缓存名称:${name},元素编号:${numString}</value>
-        <value xml:lang="zh_TW">無法刪除緩存元素,符合條件的元素沒有找到,緩存名稱:${name},元素編號:${numString}</value>
+        <value xml:lang="zh_TW">無法刪除快取元素,符合條件的元素沒有找到,快取名稱:${name},元素編號:${numString}</value>
     </property>
     <property key="utilCache.couldNotUpdateCacheSetting">
         <value xml:lang="en">Could not update cache settings, no name specified</value>
@@ -335,7 +335,7 @@
         <value xml:lang="ro">Nu e posibila actualizarea setarilor cache, nici un nume specificat</value>
         <value xml:lang="th">ไม่สามารถอัพเดทการตั้งค่าหน่วยความจำ, ไม่ระบุชื่อ</value>
         <value xml:lang="zh">无法更新缓存设置,没有指定名称</value>
-        <value xml:lang="zh_TW">無法更新緩存設置,沒有指定名稱</value>
+        <value xml:lang="zh_TW">無法更新快取設置,沒有指定名稱</value>
     </property>
     <property key="utilCache.removeElementWithKey">
         <value xml:lang="en">Removed element from cache with key: ${key}</value>
@@ -346,7 +346,7 @@
         <value xml:lang="ro">A fost sters elementul din chash-ul cu cheia: ${key}</value>
         <value xml:lang="th">ย้ายองค์ประกอบจากหน่วยความจำด้วยคีย์: ${key}</value>
         <value xml:lang="zh">从缓存中删除了元素,键:${key}</value>
-        <value xml:lang="zh_TW">從緩存中刪除了元素,鍵:${key}</value>
+        <value xml:lang="zh_TW">從快取中刪除了元素,鍵:${key}</value>
     </property>
     <property key="utilCacheEvents.noCacheNameSpecified">
         <value xml:lang="en">Could not remove cache line/element, no cache name specified</value>
@@ -357,7 +357,7 @@
         <value xml:lang="ro">Nu este posibila stergerea linieri/element, nici-un nume de chash specificata</value>
         <value xml:lang="th">ไม่สามารถลบหน่วยความจำ/องค์ประกอบ, ไม่ระบุชื่อหน่วยความจำ</value>
         <value xml:lang="zh">无法删除缓存行/元素,没有指定缓存名称</value>
-        <value xml:lang="zh_TW">無法刪除緩存行/元素,沒有指定緩存名稱</value>
+        <value xml:lang="zh_TW">無法刪除快取行/元素,沒有指定快取名稱</value>
     </property>
     <property key="utilCacheEvents.noElementNumberSpecified">
         <value xml:lang="en">Could not remove cache line/element, no element number specified</value>
@@ -368,7 +368,7 @@
         <value xml:lang="ro">Nu este posibila stergerea liniei/element, nici-un numar de elemente specificate</value>
         <value xml:lang="th">ไม่สามารถลบหน่วยความจำ/องค์ประกอบ, ไม่ระบุหมายเลขหน่วยความจำ</value>
         <value xml:lang="zh">无法删除缓存行/元素,没有指定元素编号</value>
-        <value xml:lang="zh_TW">無法刪除緩存行/元素,沒有指定元素編號</value>
+        <value xml:lang="zh_TW">無法刪除快取行/元素,沒有指定元素編號</value>
     </property>
     <property key="utilCacheEvents.permissionEdit">
         <value xml:lang="en">You do not have permission to perform this operation, UTIL_CACHE_EDIT required</value>