001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.kernel.cache.cluster;
016    
017    import java.util.ArrayList;
018    import java.util.List;
019    
020    /**
021     * @author Shuyang Zhou
022     */
023    public class PortalCacheClusterLink {
024    
025            public void afterPropertiesSet() {
026                    _portalCacheClusterChannels = new ArrayList<>(_channelNumber);
027    
028                    for (int i = 0; i < _channelNumber; i++) {
029                            _portalCacheClusterChannels.add(
030                                    _portalCacheClusterChannelFactory.
031                                            createPortalCacheClusterChannel());
032                    }
033    
034                    if (_portalCacheClusterChannelSelector == null) {
035                            _portalCacheClusterChannelSelector =
036                                    new UniformPortalCacheClusterChannelSelector();
037                    }
038            }
039    
040            public void destroy() {
041                    for (PortalCacheClusterChannel portalCacheClusterChannel :
042                                    _portalCacheClusterChannels) {
043    
044                            portalCacheClusterChannel.destroy();
045                    }
046            }
047    
048            public long getSubmittedEventNumber() {
049                    return _portalCacheClusterChannelSelector.getSelectedNumber();
050            }
051    
052            public void sendEvent(PortalCacheClusterEvent portalCacheClusterEvent) {
053                    PortalCacheClusterChannel portalCacheClusterChannel =
054                            _portalCacheClusterChannelSelector.select(
055                                    _portalCacheClusterChannels, portalCacheClusterEvent);
056    
057                    portalCacheClusterChannel.sendEvent(portalCacheClusterEvent);
058            }
059    
060            public void setChannelNumber(int channelNumber) {
061                    _channelNumber = channelNumber;
062            }
063    
064            public void setPortalCacheClusterChannelFactory(
065                    PortalCacheClusterChannelFactory portalCacheClusterChannelFactory) {
066    
067                    _portalCacheClusterChannelFactory = portalCacheClusterChannelFactory;
068            }
069    
070            public void setPortalCacheClusterChannelSelector(
071                    PortalCacheClusterChannelSelector portalCacheClusterChannelSelector) {
072    
073                    _portalCacheClusterChannelSelector = portalCacheClusterChannelSelector;
074            }
075    
076            private static final int _DEFAULT_CHANNEL_NUMBER = 10;
077    
078            private int _channelNumber = _DEFAULT_CHANNEL_NUMBER;
079            private PortalCacheClusterChannelFactory _portalCacheClusterChannelFactory;
080            private List<PortalCacheClusterChannel> _portalCacheClusterChannels;
081            private PortalCacheClusterChannelSelector
082                    _portalCacheClusterChannelSelector;
083    
084    }