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

📄 idgenerator.java

📁 java实现的可配置的工作流引擎,采用jsp+javabean实现
💻 JAVA
字号:
package com.hongsoft.res.util;

import java.util.HashMap;

import org.hibernate.Session;

import com.hongsoft.res.database.ObjectID;

public class IDGenerator {

    private static HashMap keygens = new HashMap(20);

    private static final int POOL_SIZE = 1;

    // private static final int LEST_SIZE=5;
    private static int errorTime = 5;

    private static KeyInfo keyinfo;

    private IDGenerator(Session session, String keyName) {
        keyinfo = new KeyInfo(session, POOL_SIZE, keyName);
    }

    /**
     * 取ID,提供下一个合适的ID值,tableName为表名
     *
     * @return
     */
    public synchronized static int newID(Session session, String tableName) {

        if (keygens.containsKey(tableName)) {
            KeyInfo value = ((KeyInfo) keygens.get(tableName));
            return value.getNextKey(session);
        } else {
            new IDGenerator(session, tableName);
            return keyinfo.getNextKey(session);
        }

    }

    private class KeyInfo {
        private int keyMax;

        private int keyMin;

        private int nextKey;

        private int poolSize;

        private String keyName;

        public KeyInfo(Session session, int poolSize, String keyName) {
            this.poolSize = poolSize;
            this.keyName = keyName;
            retriveFromDB(session, poolSize, keyName);
        }

        public int getNextKey(Session session) {
            if (nextKey > keyMax) {
                retriveFromDB(session, poolSize, keyName);
            }
            return nextKey++;
        }

        /**
         * 从数据库提取ID值
         */
        /*
         * private void retriveFromDB(int poolSize,String keyName) { try{ ObjectID
         * objectID=(ObjectID)ac.getHibernateSession().load(ObjectID.class,keyName);
         * objectID.setValue(objectID.getValue()+poolSize); ac.getHibernateSession().save(objectID);
         * keyMax=Integer.parseInt(Long.toString(objectID.getValue())); keyMin=keyMax-poolSize+1; nextKey=keyMin;
         * //将本keyInfo放入hashmap中 keygens.put(keyName,this); }catch(Exception qe){ if(errorTime-->0){
         * retriveFromDB(poolSize,keyName); } } }
         */
        /**
         * 从数据库提取ID值
         */
        private void retriveFromDB(Session session, int poolSize, String keyName) {
            try {
                ObjectID objectID = (ObjectID) session.load(ObjectID.class, keyName);
                objectID.setValue(objectID.getValue() + poolSize);
                session.save(objectID);
                keyMax = Integer.parseInt(Long.toString(objectID.getValue()));
                keyMin = keyMax - poolSize + 1;
                nextKey = keyMin;
                // 将本keyInfo放入hashmap中
                keygens.put(keyName, this);
            } catch (Exception qe) {
                if (errorTime-- > 0) {
                    retriveFromDB(session, poolSize, keyName);
                }
            }
        }

    }

}

⌨️ 快捷键说明

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