package com.jarvis.cache.to;
import java.io.Serializable;
import com.jarvis.cache.annotation.Cache;
import com.jarvis.cache.aop.CacheAopProxyChain;
/**
* 用于处理自动加载数据到缓存
* @author jiayu.qiu
*/
public class AutoLoadTO implements Serializable {
private static final long serialVersionUID=1L;
private final CacheAopProxyChain joinPoint;
private final Object args[];
/**
* 缓存注解
*/
private final Cache cache;
/**
* 缓存时长
*/
private int expire;
/**
* 缓存Key
*/
private final CacheKeyTO cacheKey;
/**
* 上次从DAO加载数据时间
*/
private long lastLoadTime=0L;
/**
* 上次请求数据时间
*/
private long lastRequestTime=0L;
/**
* 第一次请求数据时间
*/
private long firstRequestTime=0L;
/**
* 请求数据次数
*/
private long requestTimes=0L;
private volatile boolean loading=false;
/**
* 加载次数
*/
private long loadCnt=0L;
/**
* 从DAO中加载数据,使用时间的总和
*/
private long useTotalTime=0L;
public AutoLoadTO(CacheKeyTO cacheKey, CacheAopProxyChain joinPoint, Object args[], Cache cache, int expire) {
this.cacheKey=cacheKey;
this.joinPoint=joinPoint;
this.args=args;
this.cache=cache;
this.expire=expire;
}
public CacheAopProxyChain getJoinPoint() {
return joinPoint;
}
public long getLastRequestTime() {
return lastRequestTime;
}
public AutoLoadTO setLastRequestTime(long lastRequestTime) {
synchronized(this) {
this.lastRequestTime=lastRequestTime;
if(firstRequestTime == 0) {
firstRequestTime=lastRequestTime;
}
requestTimes++;
}
return this;
}
public long getFirstRequestTime() {
return firstRequestTime;
}
public long getRequestTimes() {
return requestTimes;
}
public Cache getCache() {
return cache;
}
public long getLastLoadTime() {
return lastLoadTime;
}
/**
* @param lastLoadTime last load time
* @return this
*/
public AutoLoadTO setLastLoadTime(long lastLoadTime) {
if(lastLoadTime > this.lastLoadTime) {
this.lastLoadTime=lastLoadTime;
}
return this;
}
public CacheKeyTO getCacheKey() {
return cacheKey;
}
public boolean isLoading() {
return loading;
}
/**
* @param loading
* @return this
*/
public AutoLoadTO setLoading(boolean loading) {
this.loading=loading;
return this;
}
public Object[] getArgs() {
return args;
}
public long getLoadCnt() {
return loadCnt;
}
public long getUseTotalTime() {
return useTotalTime;
}
/**
* 记录用时
* @param useTime 用时
* @return this
*/
public AutoLoadTO addUseTotalTime(long useTime) {
synchronized(this) {
this.loadCnt++;
this.useTotalTime+=useTotalTime;
}
return this;
}
/**
* 平均用时
* @return long 用时
*/
public long getAverageUseTime() {
if(loadCnt == 0) {
return 0;
}
return this.useTotalTime / this.loadCnt;
}
public int getExpire() {
return expire;
}
/**
* @param expire expire
* @return @return this
*/
public AutoLoadTO setExpire(int expire) {
this.expire=expire;
return this;
}
}