You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.9 KiB
62 lines
1.9 KiB
4 years ago
|
package com.tptj.project.hg.sso;
|
||
|
|
||
|
import com.fr.log.FineLoggerFactory;
|
||
|
import com.fr.store.StateHubManager;
|
||
|
import com.fr.store.StateHubService;
|
||
|
|
||
|
/**
|
||
|
* @author 秃破天际
|
||
|
* @version 10.0
|
||
|
* Created by 秃破天际 on 2021-05-12
|
||
|
* 一个对于会过期对象的重加载对象的封装
|
||
|
**/
|
||
|
public class TimeoutObjectHolder {
|
||
|
|
||
|
private static StateHubService getService(){
|
||
|
//具体会过期的对象要保存到状态服务器,防止集群情况下冲突
|
||
|
return StateHubManager.applyForTenantService("SsoTimeoutObjectService");
|
||
|
}
|
||
|
|
||
|
private ReLoader loader;
|
||
|
private String key;
|
||
|
|
||
|
public TimeoutObjectHolder(ReLoader loader, String key) {
|
||
|
this.loader = loader;
|
||
|
this.key = key;
|
||
|
}
|
||
|
|
||
|
public static TimeoutObjectHolder init( Object object, long timeout, ReLoader loader, Class tag )throws Exception{
|
||
|
if( null == loader ){
|
||
|
throw new Exception("ReLoader Is Null");
|
||
|
}
|
||
|
if( null == tag ){
|
||
|
throw new Exception("tag Is Null");
|
||
|
}
|
||
|
TimeoutObject obj = new TimeoutObject();
|
||
|
obj.setObject(object);
|
||
|
obj.setTimeout(timeout);
|
||
|
getService().put( tag.getName(), obj );
|
||
|
return new TimeoutObjectHolder( loader, tag.getName() );
|
||
|
}
|
||
|
|
||
|
public <T> T getObj(){
|
||
|
try{
|
||
|
TimeoutObject obj = getService().get(key);
|
||
|
if( obj.isTimeout() ){
|
||
|
TimeoutObject val = (TimeoutObject) loader.reload( obj );
|
||
|
if( null != val ){
|
||
|
obj = val;
|
||
|
getService().put( key, obj );
|
||
|
}else{
|
||
|
throw new Exception( "Timeout Object Reload Failed!" );
|
||
|
}
|
||
|
}
|
||
|
return (T) obj.getObject();
|
||
|
}catch(Exception e){
|
||
|
FineLoggerFactory.getLogger().error( e, e.getMessage() );
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
}
|