⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cachetodohandler.java

📁 iiitAccessServer是一个用Java编写的基于规则的企业鉴别系统。它作为一个服务器工作
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                String filter = "(& (" + ldapFormulaExpr + "=*" + expression + "*)(objectClass=" + ldapFormulaClass + "))";                long t = System.currentTimeMillis();          Vector v = ldapUtil.search(ldapFormulaBase, filter, new String[] {ldapCommonName});        t = System.currentTimeMillis() - t;                int iMax = v.size();        for (int i = 0; i < iMax; i++)        {            Vector m = ((LdapGenericObject) v.get(i)).getAttribute(ldapCommonName);                        int jMax = m.size();                        for (int j = 0; j < jMax; j++)            {                String cn = (String) m.get(j);                result.add(cn);            }        }        return result;    }        private Vector collectReferences(String expression) throws NamingException, JdbcException, CacheManagerException    {        String s, expr;                long t = System.currentTimeMillis();        // Search for direct references        Vector result = new Vector(searchReferences(expression));        if (result.contains(expression))            throw new CacheManagerException("Found circular reference inside expression <" + expression + ">");                    // Search for indirect references        for (int i = 0; i < result.size(); i++)        {            expr = (String) result.get(i);                                    Set r = searchReferences(expr);            Iterator iterator = r.iterator();            while(iterator.hasNext())            {                s = (String) iterator.next();                                if (s.equalsIgnoreCase(expression))                    throw new CacheManagerException("Found circular reference to expression <" + expression + "> in expression <" + expr + ">");                                if (!result.contains(s))                    result.add(s);            }        }                t = System.currentTimeMillis() - t;        logger.info(result.size() + " references to <" + expression + "> found, " + t + " ms");                return result;    }        private void touchReferences(String expression, Vector references) throws NamingException, JdbcException, CacheManagerException    {        int iMax = references.size();        for (int i = 0; i < iMax; i++)        {            String cn = (String) references.get(i);            logger.info("References to <" + expression + "> found in <" + cn + ">");            ToDoList todo = new ToDoList(cn, System.currentTimeMillis(), false);            todo.insertToDo(adminPool);        }    }        private void updateCache(String expression, long touchTime) throws JdbcException, ParserException    {        try        {            if (ignoreCase)                expression = expression.toLowerCase();                            long  time = System.currentTimeMillis();            String md5 = Md5Cache.get(expression);            if (md5 == null)            {                md5 = StringUtil.md5Sum(expression);                Md5Cache.put(expression, md5);            }            Parser p = new Parser();            p.setReturnEmptySets(true);                        Set s = p.evaluateExpression(expression);                    JdbcConnectionPool cachePool = manager.getCacheConnectionPool(md5);            IndexTable  index   = IndexTable.selectIndex(cachePool, md5);                    if (s != null && s.size() > 0)            {                if (index == null || index.getCreationTime() <= touchTime)                {                    String name = nextTableName(cachePool);                    CacheTable.createCacheTable(cachePool, name);                    long t = System.currentTimeMillis();                    CacheTable.insertCacheTable(cachePool, name, s, ignoreCase);                    t = System.currentTimeMillis() - t;                    logger.info(s.size() + " records written to table <" + name + ">, " + t + " ms");                                if (index != null)                    {                        String oldTable = index.getTableName();                                    index.setTableName(name);                        index.setCreationTime(time);                                        index.updateIndex(cachePool);                                        CacheTable.dropCacheTable(cachePool, oldTable);                    }                    else                    {                        index = new IndexTable(md5, name, time);                        index.insertIndex(cachePool);                    }                }                else                {                    logger.info("Cache for <" + expression + "> is uptodate");                }                        }            else if (index != null)            {                String oldTable = index.getTableName();                            index.deleteIndex(cachePool);                                CacheTable.dropCacheTable(cachePool, oldTable);            }        }        catch(NoSuchAlgorithmException nsae)        {            logger.fatal("Initialisation of MD5 digest failed.", nsae);            System.exit(1);        }    }            /** The main method of the CacheToDoHandler thread. */        public void run()    {        cachePoolCount = manager.getCachePoolCount();        adminPool = manager.getAdminPool();                initializeAdminDb();        initializeCacheDb();                  fillToDoList();                fileHandler.start();        while(running)        {            try             {                boolean loop = true;                                    do                {                    ToDoList todo = ToDoList.selectToDo(adminPool);                                                if (todo != null)                    {                        String expression = todo.getExpression();                                                logger.info("Found expr=<" + expression + ">");                                                    todo.setLocked(true);                        todo.updateToDo(adminPool);                        try                        {                            Vector references = collectReferences(expression);                            updateCache(expression, todo.getTouchTime());                            touchReferences(expression, references);                        }                        catch(CacheManagerException cme)                        {                            String msg = "Circular reference error in <" + expression + ">: " + cme.getMessage();                            logger.fatal(msg);                            manager.errorHandler().sendMail(msg);                        }                        catch(ParserException pe)                        {                            String msg = "Parser error in <" + expression + ">: " + pe.getMessage();                            logger.fatal(msg);                            manager.errorHandler().sendMail(msg);                        }                                                todo.deleteToDo(adminPool);                    }                    else                    {                        loop = false;                    }                }                while (loop);                for (int i = 0; i < cachePoolCount; i++)                    CacheTable.dropLostTables(manager.getCacheConnectionPool(i));                                try                {                    if (running)                        sleep(sleepTime);                }                catch(InterruptedException ie)                {                    // do nothing                }            }            catch(Exception e)            {                logger.error("Cought error while trying to read <todotable>", e);                try                {                    if (running)                        sleep(sleepTime);                }                catch(InterruptedException ie)                {                    // do nothing                }            }        }                running = false;    }}/** * $Log: CacheToDoHandler.java,v $ * Revision 1.27  2003/04/14 20:41:09  joerg * Setting name for thread. * * Revision 1.26  2003/04/13 21:09:56  joerg * Package structure modified * * Revision 1.25  2003/04/13 20:28:01  joerg * Package structure modified * * Revision 1.24  2003/04/13 20:16:41  joerg * Package structure modified * * Revision 1.23  2003/01/29 20:32:06  joerg * MD5-Summen werden zuerst im Cache gesucht. * * Revision 1.22  2003/01/16 21:47:01  joerg * Kleine Bugfixes * * Revision 1.21  2003/01/04 17:15:43  joerg * Zus鋞zliche Config-Option IgnoreCase * * Revision 1.20  2003/01/01 21:04:17  joerg * Copyright-Statement aktualisiert * * Revision 1.19  2002/12/27 20:22:31  joerg * Initiales Einlesen der LDAP Daten komplett ueberarbeitet, bei * LDAP-Fehlern wird nicht mehr System.exit() aufgerufen, sondern * ein reconnect versucht. * * Revision 1.18  2002/12/24 21:04:33  joerg * Umbau der Paketstruktur * iiitLdapPlugin integriert * JavaDoc-Kommentare weiter vervollstaendigt. * * Revision 1.17  2002/12/23 11:25:53  joerg * shutdown()-Methode hinzugefuegt. * * Revision 1.16  2002/12/21 19:55:03  joerg * Nicht mehr benoetigte Methoden entfernt, interne Methoden auf * private oder protected geaendert. * JavaDoc Kommentare ergaenzt. * * Revision 1.15  2002/12/19 15:54:33  joerg * Paket umbenannt in iiitLdapPlugin * * Revision 1.14  2002/12/08 16:37:33  joerg * Aufraeumungsarbeiten nach dem grossen Umbau * * Revision 1.13  2002/12/08 16:09:46  joerg * Paket-Struktur ueberarbeitet * * Revision 1.12  2002/12/08 13:55:31  joerg * Der Zugriff auf das LdapPlugin erfolgt jetzt ueber den CacheManager * und nicht mehr ueber den AccessServer * * Revision 1.11  2002/11/27 16:43:04  joerg * Parameteruebergabe geaendert, um circulaere Recursion * zu erkennen * * Revision 1.10  2002/11/27 12:13:49  joerg * Beim Erkennen fehlerhafte Ausdruecke kann jetzt automatisch * eine Fehler-Mail verschickt werden. * * Revision 1.9  2002/11/26 21:56:06  joerg * Circulaere Referenzen werden jetzt erkannt * Fehlerbehandlung verbessert * * Revision 1.8  2002/11/26 10:56:40  joerg * Package exprparser durch parser erstzt. * * Revision 1.7  2002/11/21 21:49:45  joerg * Umstellung auf JdbcConnectionPool * * Revision 1.6  2002/11/20 20:41:29  joerg * Klassen fuer das HAndling der DB-Tabellen in Packages * de.iiit.AccessServer.db.* verschoben * * Revision 1.5  2002/11/20 20:28:07  joerg * Bezuege auf Spalte 'inverted' in 'IndexTable' entfernt * * Revision 1.4  2002/11/18 22:09:00  joerg * CacheManager ausgelagert als PlugIn * * Revision 1.3  2002/11/18 21:21:52  joerg * LDAP-Anbindung auf LdapPlugin umgestellt. * * Revision 1.2  2002/11/18 15:21:41  joerg * LDAP-Suche jetzt ueber die Klasse LdapClient realisiert. * * Revision 1.1  2002/11/18 10:17:49  joerg * Klassen des CacheManagers in eigenes Package verschoben * * Revision 1.2  2002/11/18 10:13:18  joerg * CacheManager ist jetzt vollstaendig implementiert * * Revision 1.1  2002/11/17 22:03:26  joerg * Neue Klassen fuer 2nd-level Cache * */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -