package com.fourinone;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.List;
public class CacheFacade extends MementoService//implements Cache
{
private ParkGroup pg = null;//input Groups
private String cacheService = "CacheService";
private int keysnum = 100;
public CacheFacade(String cacheService, ObjValue groups) throws RemoteException
{
this.cacheService = cacheService;
pg = new ParkGroup(groups);
keysnum = Integer.parseInt(ConfigContext.getConfig("CACHEFACADE","TRYKEYSNUM",null,"100"));
}
private ParkLocal getParkLocalFromKid(String kid)
{
String[][] servers = pg.getServers(kid);
return BeanContext.getPark(servers[0][0], Integer.parseInt(servers[0][1]), cacheService, servers);
}
@Delegate(interfaceName="com.fourinone.Cache",methodName="add",policy=DelegatePolicy.Implements)
public String addObj(String name, byte[] obj) throws RemoteException
{
String kid = null;
ObjectBean ob = null;
int i=0;
while(ob==null&&i<keysnum)//try to this keys, keys small if group big, keys big if group small
{
kid = ParkGroup.getKeyId();//attach 'cache' or 'ca' to begin
ob = getParkLocalFromKid(kid).create(kid, name, obj);
i++;
//System.out.println("I..........."+i+",keysnum:"+keysnum);
}
return kid;
}
@Delegate(interfaceName="com.fourinone.Cache",methodName="put",policy=DelegatePolicy.Implements)
public ObjectBean putObj(String keyid, String name, byte[] obj) throws RemoteException
{
ParkLocal pl = getParkLocalFromKid(keyid);
ObjectBean ob = pl.create(keyid, name, obj);
if(ob==null)
ob = pl.update(keyid, name, obj);
return ob;
}
@Delegate(interfaceName="com.fourinone.Cache",methodName="get",policy=DelegatePolicy.Implements)
public ObjectBean getObj(String keyid, String name) throws RemoteException
{
return getParkLocalFromKid(keyid).get(keyid, name);
}
@Delegate(interfaceName="com.fourinone.Cache",methodName="get",policy=DelegatePolicy.Implements)
public List<ObjectBean> getObj(String keyid) throws RemoteException
{
return getParkLocalFromKid(keyid).get(keyid);
}
@Delegate(interfaceName="com.fourinone.Cache",methodName="remove",policy=DelegatePolicy.Implements)
public ObjectBean removeObj(String keyid, String name) throws RemoteException
{
return getParkLocalFromKid(keyid).delete(keyid, name);
}
@Delegate(interfaceName="com.fourinone.Cache",methodName="remove",policy=DelegatePolicy.Implements)
public List<ObjectBean> removeObj(String keyid) throws RemoteException
{
return getParkLocalFromKid(keyid).delete(keyid);
}
/*
public String add(String type, byte[] obj) throws RemoteException
{
String kid = ParkGroup.getKeyId();
String[][] servers = pg.getServers(kid);
ParkLocal pl = BeanContext.getPark(servers[0][0], Integer.parseInt(servers[0][1]), servers);//servers
pl.create(type, kid, obj);
return kid;
//if(!)
//pl.update("Cache", String node, Serializable obj);
}
public Object get(String type, String keyid) throws RemoteException
{
String[][] servers = pg.getServers(keyid);
ParkLocal pl = BeanContext.getPark(servers[0][0], Integer.parseInt(servers[0][1]), servers);
return pl.get(type, keyid).toObject();
}
public Object putByKey(String keyId, String name, byte[] obj) throws RemoteException
{
String[][] servers = pg.getServers(keyId);
ParkLocal pl = BeanContext.getPark(servers[0][0], Integer.parseInt(servers[0][1]), servers);//servers
ObjectBean ob = pl.create(keyId, name, obj);
if(ob==null)
ob = pl.update(keyId, name, obj);
return ob.toObject();
}
public Object getByKey(String keyid, String name) throws RemoteException
{
String[][] servers = pg.getServers(keyid);
ParkLocal pl = BeanContext.getPark(servers[0][0], Integer.parseInt(servers[0][1]), servers);
return pl.get(keyid, name).toObject();
}
*/
public static void main(String[] args)
{
BeanContext.startCache();
//BeanContext.startCache("localhost",Integer.parseInt(args[0]));
/*String kid = pg.getKeyId();
System.out.println(kid);
System.out.println(turnKeyId(kid));
for(int i=0;i<5;i++){
System.out.println((System.currentTimeMillis()+"").length());
System.out.println(System.currentTimeMillis());
//String hs = Long.toHexString(System.currentTimeMillis());
//System.out.println(hs);
System.out.println();
}
for(int i=0;i<5;i++)
System.out.println(System.nanoTime());
//for(int i=0;i<5;i++){
System.out.println(System.currentTimeMillis()+""+System.nanoTime());
String hexstr = Double.toHexString(Double.valueOf(System.currentTimeMillis()+""+System.nanoTime()));
System.out.println(hexstr);
System.out.println(Double.valueOf(hexstr).toString());
//}*/
}
}