com.liferay.portal.kernel.messaging.SerialDestination.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.portal.kernel.messaging.SerialDestination.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.portal.kernel.messaging;

import com.liferay.petra.lang.CentralizedThreadLocal;
import com.liferay.portal.kernel.cache.thread.local.Lifecycle;
import com.liferay.portal.kernel.cache.thread.local.ThreadLocalCacheManager;
import com.liferay.portal.kernel.concurrent.ThreadPoolExecutor;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;

import java.util.Set;

/**
 * <p>
 * Destination that delivers a message to a list of message listeners one at a
 * time.
 * </p>
 *
 * @author     Michael C. Han
 * @deprecated As of Athanasius (7.3.x), replaced by {@link
 *             com.liferay.portal.messaging.internal.SerialDestination}
 */
@Deprecated
public class SerialDestination extends BaseAsyncDestination {

    public SerialDestination() {
        setWorkersCoreSize(_WORKERS_CORE_SIZE);
        setWorkersMaxSize(_WORKERS_MAX_SIZE);
    }

    @Override
    protected void dispatch(final Set<MessageListener> messageListeners, final Message message) {

        final Thread currentThread = Thread.currentThread();

        ThreadPoolExecutor threadPoolExecutor = getThreadPoolExecutor();

        Runnable runnable = new MessageRunnable(message) {

            @Override
            public void run() {
                try {
                    populateThreadLocalsFromMessage(message);

                    for (MessageListener messageListener : messageListeners) {
                        try {
                            messageListener.receive(message);
                        } catch (MessageListenerException mle) {
                            _log.error("Unable to process message " + message, mle);
                        }
                    }
                } finally {
                    if (Thread.currentThread() != currentThread) {
                        ThreadLocalCacheManager.clearAll(Lifecycle.REQUEST);

                        CentralizedThreadLocal.clearShortLivedThreadLocals();
                    }
                }
            }

        };

        threadPoolExecutor.execute(runnable);
    }

    private static final int _WORKERS_CORE_SIZE = 1;

    private static final int _WORKERS_MAX_SIZE = 1;

    private static final Log _log = LogFactoryUtil.getLog(SerialDestination.class);

}