package com.smtaiserver.smtaiserver.graph;
|
|
import org.springframework.cache.ehcache.EhCacheCacheManager;
|
|
import net.sf.ehcache.Cache;
|
import net.sf.ehcache.CacheManager;
|
import net.sf.ehcache.Element;
|
|
import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
|
import com.smtaiserver.smtaiserver.database.SMTDatabase;
|
import com.smtservlet.core.SMTApp;
|
import com.smtservlet.util.SMTStatic;
|
|
public class SMTAIGraphManager
|
{
|
public static class DBCache
|
{
|
private SMTDatabase _db;
|
|
public SMTDatabase allocDatabase() throws Exception
|
{
|
if(_db == null)
|
_db = SMTAIServerApp.getApp().allocDatabase();
|
return _db;
|
}
|
|
public void close()
|
{
|
if(_db != null)
|
{
|
_db.close();
|
_db = null;
|
}
|
}
|
}
|
|
private String _tableNode = "graph_node";
|
private String _tableLink = "graph_link";
|
private Cache _cacheNode;
|
@SuppressWarnings("unused")
|
private Cache _cacheLink;
|
|
|
public SMTAIGraphManager()
|
{
|
EhCacheCacheManager springCacheManager = SMTApp.getBean(EhCacheCacheManager.class);
|
CacheManager cacheManager = springCacheManager.getCacheManager();
|
{
|
String cacheNodeId = SMTStatic.newUUID();
|
cacheManager.addCache(new Cache(cacheNodeId, 10000, false, true, 100, 100));
|
_cacheNode = cacheManager.getCache(cacheNodeId);
|
}
|
{
|
String cacheLinkId = SMTStatic.newUUID();
|
cacheManager.addCache(new Cache(cacheLinkId, 10000, false, true, 100, 100));
|
_cacheLink = cacheManager.getCache(cacheLinkId);
|
}
|
}
|
|
public void initInstance() throws Exception
|
{
|
|
}
|
|
public SMTAIGraphNode getGraphNode(String recId) throws Exception
|
{
|
DBCache dbCache = new DBCache();
|
try
|
{
|
return getGraphNode(recId, dbCache);
|
}
|
finally
|
{
|
dbCache.close();
|
}
|
}
|
|
public SMTAIGraphNode getGraphNode(String recId, DBCache dbCache) throws Exception
|
{
|
if(recId == null)
|
recId = "__GRAPH_ROOT__";
|
|
Element element = _cacheNode.get(recId);
|
if(element == null)
|
{
|
_cacheNode.acquireWriteLockOnKey(recId);
|
try
|
{
|
element = _cacheNode.get(recId);
|
if(element == null)
|
{
|
SMTDatabase db = dbCache.allocDatabase();
|
SMTAIGraphNode graphNode = new SMTAIGraphNode(this, db, recId, this._tableNode, this._tableLink);
|
element = new Element(graphNode.getRecId(), graphNode);
|
_cacheNode.put(element);
|
}
|
}
|
finally
|
{
|
_cacheNode.releaseWriteLockOnKey(recId);
|
}
|
}
|
return (SMTAIGraphNode)element.getObjectValue();
|
|
}
|
}
|