001
014
015 package com.liferay.portal.upgrade;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.search.SearchEngineUtil;
020 import com.liferay.portal.kernel.upgrade.UpgradeException;
021 import com.liferay.portal.kernel.upgrade.UpgradeProcess;
022 import com.liferay.portal.util.PropsValues;
023
024
029 public class UpgradeProcessUtil {
030
031 public static boolean upgradeProcess(
032 int buildNumber, String[] upgradeProcessClassNames,
033 ClassLoader classLoader)
034 throws UpgradeException {
035
036 return upgradeProcess(
037 buildNumber, upgradeProcessClassNames, classLoader,
038 PropsValues.INDEX_ON_UPGRADE);
039 }
040
041 public static boolean upgradeProcess(
042 int buildNumber, String[] upgradeProcessClassNames,
043 ClassLoader classLoader, boolean indexOnUpgrade)
044 throws UpgradeException {
045
046 boolean ranUpgradeProcess = false;
047
048 boolean tempIndexReadOnly = SearchEngineUtil.isIndexReadOnly();
049
050 if (indexOnUpgrade) {
051 SearchEngineUtil.setIndexReadOnly(true);
052 }
053
054 try {
055 for (String upgradeProcessClassName : upgradeProcessClassNames) {
056 boolean tempRanUpgradeProcess = _upgradeProcess(
057 buildNumber, upgradeProcessClassName, classLoader);
058
059 if (tempRanUpgradeProcess) {
060 ranUpgradeProcess = true;
061 }
062 }
063 }
064 finally {
065 SearchEngineUtil.setIndexReadOnly(tempIndexReadOnly);
066 }
067
068 return ranUpgradeProcess;
069 }
070
071 private static boolean _upgradeProcess(
072 int buildNumber, String upgradeProcessClassName,
073 ClassLoader classLoader)
074 throws UpgradeException {
075
076 if (_log.isDebugEnabled()) {
077 _log.debug("Initializing upgrade " + upgradeProcessClassName);
078 }
079
080 UpgradeProcess upgradeProcess = null;
081
082 try {
083 upgradeProcess = (UpgradeProcess)classLoader.loadClass(
084 upgradeProcessClassName).newInstance();
085 }
086 catch (Exception e) {
087 _log.error(e, e);
088 }
089
090 if (upgradeProcess == null) {
091 _log.error(upgradeProcessClassName + " cannot be found");
092
093 return false;
094 }
095
096 if ((upgradeProcess.getThreshold() == 0) ||
097 (upgradeProcess.getThreshold() > buildNumber)) {
098
099 if (_log.isDebugEnabled()) {
100 _log.debug("Running upgrade " + upgradeProcessClassName);
101 }
102
103 upgradeProcess.upgrade();
104
105 if (_log.isDebugEnabled()) {
106 _log.debug("Finished upgrade " + upgradeProcessClassName);
107 }
108
109 return true;
110 }
111 else {
112 if (_log.isDebugEnabled()) {
113 _log.debug(
114 "Upgrade threshold " + upgradeProcess.getThreshold() +
115 " will not trigger upgrade");
116
117 _log.debug("Skipping upgrade " + upgradeProcessClassName);
118 }
119
120 return false;
121 }
122 }
123
124 private static Log _log = LogFactoryUtil.getLog(UpgradeProcessUtil.class);
125
126 }