docs: public void valueHasChanged(DCache cache, Object id, long expirationTime, int inactivity) {  // CPF-Inactivity
          //final String methodName = "valueHasChanged()";
          if (expirationTime <= 0 && inactivity <=0 ) { // CPF-Inactivity
              throw new IllegalArgumentException("expirationTime or inactivity must be positive");
          }
          if ( UNIT_TEST_INACTIVITY ) {
              System.out.println(" valueHasChanged() - entry");
              System.out.println(" expirationTime="+expirationTime);
              System.out.println(" inactivity="+inactivity);
          }
          // CPF-Inactivity
          //-----------------------------------------------------------
          // Force an expriationTime if we have an inactivity timer
          //-----------------------------------------------------------
          boolean isInactivityTimeOut = false;
          if ( inactivity > 0 ) {
              // For 7.0, use QuickApproxTime.getRef.getApproxTime()
              long adjustedExpirationTime = System.currentTimeMillis() + ( inactivity * 1000 );
              if ( adjustedExpirationTime < expirationTime ||
                   expirationTime <= 0 ) {
                  expirationTime = adjustedExpirationTime;
                  isInactivityTimeOut = true;
              }
          }
          ExpirationMetaData expirationMetaData = (ExpirationMetaData)cacheInstancesTable.get(cache);
          // Just make sure expirationMetaData is NOT NULL in case of an internal-error condition
          if (expirationMetaData == null) {
              return;
          }
          synchronized (expirationMetaData) {
              InvalidationTask it = (InvalidationTask) expirationMetaData.expirationTable.get(id);
              if (it == null) {
                  it = (InvalidationTask) taskPool.remove();
                  it.id = id;
                  expirationMetaData.expirationTable.put(id, it);
              } else {
                  expirationMetaData.timeLimitHeap.delete(it);
              }
              it.expirationTime = expirationTime;
              it.isInactivityTimeOut = isInactivityTimeOut;
              expirationMetaData.timeLimitHeap.insert(it);
              //ccount++;
              //traceDebug(methodName, "cacheName=" + cache.getCacheName() + " id=" + id + " expirationTableSize=" + expirationMetaData.expirationTable.size() + " timeLimitHeapSize=" + expirationMetaData.timeLimitHeap.size() + " count=" + ccount);
          }
      }