TangCheng
2025-02-28 d787e447e95c7b897c2cc9c0e832f8d2e5084934
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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();
    
    }
}