diff --git a/NOTES b/NOTES index 8a76512..43cdd6b 100644 --- a/NOTES +++ b/NOTES @@ -351,3 +351,30 @@ begin: } } + + +----------------- + + public void setPurpose(String purpose) { + purpose_ = purpose; + } + + public void logTimers(String what) { + LOG.info(String.format("UOW(%s) %s %s (total: %.3fµs db: %.3fµs or %2.2f%% of total time)", + hashCode(), purpose_, what, + elapsedTime_.elapsed(TimeUnit.MICROSECONDS) / 1000.0, + databaseTime_.elapsed(TimeUnit.MICROSECONDS) / 1000.0, + (elapsedTime_.elapsed(TimeUnit.MICROSECONDS) / databaseTime_.elapsed(TimeUnit.MICROSECONDS)) * 100.0)); + } + +--- postCommitFunction + elapsedTime_.stop(); + if (purpose_ != null) { + logTimers("committed"); + } + +--- abort + elapsedTime_.stop(); + if (purpose_ != null) { + logTimers("aborted"); + } diff --git a/src/main/java/net/helenus/core/AbstractUnitOfWork.java b/src/main/java/net/helenus/core/AbstractUnitOfWork.java index 1bc6683..bea74ca 100644 --- a/src/main/java/net/helenus/core/AbstractUnitOfWork.java +++ b/src/main/java/net/helenus/core/AbstractUnitOfWork.java @@ -18,6 +18,7 @@ package net.helenus.core; import java.util.*; import com.diffplug.common.base.Errors; +import com.google.common.cache.Cache; import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table; import com.google.common.collect.TreeTraverser; @@ -33,6 +34,10 @@ public abstract class AbstractUnitOfWork implements UnitOfW private boolean aborted = false; private boolean committed = false; + private String purpose_; + private Stopwatch elapsedTime_; + public Stopwatch databaseTime_; + // Cache: private final Table cache = HashBasedTable.create(); @@ -86,7 +91,11 @@ public abstract class AbstractUnitOfWork implements UnitOfW // Be sure to check all enclosing UnitOfWork caches as well, we may be nested. if (parent != null) { return parent.cacheLookup(facets); - } + } else { + Cache cache = session.getSessionCache(); + + cache.getIfPresent(key) + } } return result; } @@ -141,9 +150,10 @@ public abstract class AbstractUnitOfWork implements UnitOfW // Merge UOW cache into parent's cache. if (parent != null) { parent.mergeCache(cache); - } // else { - // TODO... merge into session cache objects marked cacheable - // } + } else { + Cache cache = session.getSessionCache(); + cache.put + } // Apply all post-commit functions for if (parent == null) {