001
014
015 package com.liferay.portal.kernel.dao.db;
016
017 import com.liferay.portal.kernel.util.StringPool;
018 import com.liferay.portal.kernel.util.StringUtil;
019
020 import java.util.concurrent.ConcurrentHashMap;
021 import java.util.concurrent.ConcurrentMap;
022
023
026 public abstract class BaseDBFactory implements DBFactory {
027
028 @Override
029 public DB create(int dbMajorVersion, int dbMinorVersion) {
030 String majorVersion = StringUtil.toHexString(dbMajorVersion);
031 String minorVersion = StringUtil.toHexString(dbMinorVersion);
032
033 String version = majorVersion.concat(StringPool.POUND).concat(
034 minorVersion);
035
036 DB db = _dbs.get(version);
037
038 if (db == null) {
039 db = doCreate(dbMajorVersion, dbMinorVersion);
040
041 DB previousDB = _dbs.putIfAbsent(version, db);
042
043 if (previousDB != null) {
044 db = previousDB;
045 }
046 }
047
048 return db;
049 }
050
051 protected abstract DB doCreate(int dbMajorVersion, int dbMinorVersion);
052
053 private final ConcurrentMap<String, DB> _dbs = new ConcurrentHashMap<>();
054
055 }