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