001
014
015 package com.liferay.portal.events;
016
017 import com.liferay.portal.cache.ehcache.EhcacheStreamBootstrapCacheLoader;
018 import com.liferay.portal.jericho.CachedLoggerProvider;
019 import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
020 import com.liferay.portal.kernel.cluster.ClusterExecutorUtil;
021 import com.liferay.portal.kernel.events.ActionException;
022 import com.liferay.portal.kernel.events.SimpleAction;
023 import com.liferay.portal.kernel.log.Log;
024 import com.liferay.portal.kernel.log.LogFactoryUtil;
025 import com.liferay.portal.kernel.messaging.MessageBus;
026 import com.liferay.portal.kernel.messaging.MessageBusUtil;
027 import com.liferay.portal.kernel.messaging.sender.MessageSender;
028 import com.liferay.portal.kernel.messaging.sender.SynchronousMessageSender;
029 import com.liferay.portal.kernel.nio.intraband.Intraband;
030 import com.liferay.portal.kernel.nio.intraband.SystemDataType;
031 import com.liferay.portal.kernel.nio.intraband.cache.PortalCacheDatagramReceiveHandler;
032 import com.liferay.portal.kernel.nio.intraband.mailbox.MailboxDatagramReceiveHandler;
033 import com.liferay.portal.kernel.nio.intraband.messaging.MessageDatagramReceiveHandler;
034 import com.liferay.portal.kernel.nio.intraband.rpc.RPCDatagramReceiveHandler;
035 import com.liferay.portal.kernel.resiliency.mpi.MPIHelperUtil;
036 import com.liferay.portal.kernel.resiliency.spi.agent.annotation.Direction;
037 import com.liferay.portal.kernel.resiliency.spi.agent.annotation.DistributedRegistry;
038 import com.liferay.portal.kernel.resiliency.spi.agent.annotation.MatchType;
039 import com.liferay.portal.kernel.scheduler.SchedulerEngineHelperUtil;
040 import com.liferay.portal.kernel.search.IndexerRegistryUtil;
041 import com.liferay.portal.kernel.servlet.JspFactorySwapper;
042 import com.liferay.portal.kernel.template.TemplateManagerUtil;
043 import com.liferay.portal.kernel.util.ReleaseInfo;
044 import com.liferay.portal.plugin.PluginPackageIndexer;
045 import com.liferay.portal.security.lang.DoPrivilegedUtil;
046 import com.liferay.portal.service.BackgroundTaskLocalServiceUtil;
047 import com.liferay.portal.service.LockLocalServiceUtil;
048 import com.liferay.portal.tools.DBUpgrader;
049 import com.liferay.portal.util.WebKeys;
050 import com.liferay.portlet.messageboards.util.MBMessageIndexer;
051
052 import javax.portlet.MimeResponse;
053 import javax.portlet.PortletRequest;
054
055
060 public class StartupAction extends SimpleAction {
061
062 @Override
063 public void run(String[] ids) throws ActionException {
064 try {
065 doRun(ids);
066 }
067 catch (RuntimeException re) {
068 throw re;
069 }
070 catch (Exception e) {
071 throw new ActionException(e);
072 }
073 }
074
075 protected void doRun(String[] ids) throws Exception {
076
077
078
079 System.out.println("Starting " + ReleaseInfo.getReleaseInfo());
080
081
082
083 DistributedRegistry.registerDistributed(
084 MimeResponse.MARKUP_HEAD_ELEMENT, Direction.DUPLEX,
085 MatchType.EXACT);
086 DistributedRegistry.registerDistributed(
087 PortletRequest.LIFECYCLE_PHASE, Direction.DUPLEX, MatchType.EXACT);
088 DistributedRegistry.registerDistributed(WebKeys.class);
089
090 Intraband intraband = MPIHelperUtil.getIntraband();
091
092 intraband.registerDatagramReceiveHandler(
093 SystemDataType.MAILBOX.getValue(),
094 new MailboxDatagramReceiveHandler());
095
096 MessageBus messageBus = (MessageBus)PortalBeanLocatorUtil.locate(
097 MessageBus.class.getName());
098
099 intraband.registerDatagramReceiveHandler(
100 SystemDataType.MESSAGE.getValue(),
101 new MessageDatagramReceiveHandler(messageBus));
102
103 intraband.registerDatagramReceiveHandler(
104 SystemDataType.PORTAL_CACHE.getValue(),
105 new PortalCacheDatagramReceiveHandler());
106 intraband.registerDatagramReceiveHandler(
107 SystemDataType.RPC.getValue(), new RPCDatagramReceiveHandler());
108
109
110
111 if (_log.isDebugEnabled()) {
112 _log.debug("Clear locks");
113 }
114
115 try {
116 LockLocalServiceUtil.clear();
117 }
118 catch (Exception e) {
119 if (_log.isWarnEnabled()) {
120 _log.warn(
121 "Unable to clear locks because Lock table does not exist");
122 }
123 }
124
125
126
127 if (_log.isDebugEnabled()) {
128 _log.debug("Add shutdown hook");
129 }
130
131 Runtime runtime = Runtime.getRuntime();
132
133 runtime.addShutdownHook(new Thread(new ShutdownHook()));
134
135
136
137 if (_log.isDebugEnabled()) {
138 _log.debug("Initialize template manager");
139 }
140
141 TemplateManagerUtil.init();
142
143
144
145 IndexerRegistryUtil.register(new MBMessageIndexer());
146 IndexerRegistryUtil.register(new PluginPackageIndexer());
147
148
149
150 if (_log.isDebugEnabled()) {
151 _log.debug("Upgrade database");
152 }
153
154 DBUpgrader.upgrade();
155
156
157
158 if (_log.isDebugEnabled()) {
159 _log.debug("Initialize message bus");
160 }
161
162 MessageSender messageSender =
163 (MessageSender)PortalBeanLocatorUtil.locate(
164 MessageSender.class.getName());
165 SynchronousMessageSender synchronousMessageSender =
166 (SynchronousMessageSender)PortalBeanLocatorUtil.locate(
167 SynchronousMessageSender.class.getName());
168
169 MessageBusUtil.init(
170 DoPrivilegedUtil.wrap(messageBus),
171 DoPrivilegedUtil.wrap(messageSender),
172 DoPrivilegedUtil.wrap(synchronousMessageSender));
173
174
175
176 ClusterExecutorUtil.initialize();
177
178
179
180 EhcacheStreamBootstrapCacheLoader.start();
181
182
183
184 if (_log.isDebugEnabled()) {
185 _log.debug("Initialize scheduler engine lifecycle");
186 }
187
188 SchedulerEngineHelperUtil.initialize();
189
190
191
192 if (_log.isDebugEnabled()) {
193 _log.debug("Verify database");
194 }
195
196 DBUpgrader.verify();
197
198
199
200 JspFactorySwapper.swap();
201
202
203
204 BackgroundTaskLocalServiceUtil.cleanUpBackgroundTasks();
205
206
207
208 CachedLoggerProvider.install();
209 }
210
211 private static Log _log = LogFactoryUtil.getLog(StartupAction.class);
212
213 }