001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
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 =
027                            new ArrayList<PortalCacheClusterChannel>(_channelNumber);
028    
029                    for (int i = 0; i < _channelNumber; i++) {
030                            _portalCacheClusterChannels.add(
031                                    _portalCacheClusterChannelFactory.
032                                            createPortalCacheClusterChannel());
033                    }
034    
035                    if (_portalCacheClusterChannelSelector == null) {
036                            _portalCacheClusterChannelSelector =
037                                    new UniformPortalCacheClusterChannelSelector();
038                    }
039            }
040    
041            public void destroy() {
042                    for (PortalCacheClusterChannel portalCacheClusterChannel :
043                                    _portalCacheClusterChannels) {
044    
045                            portalCacheClusterChannel.destroy();
046                    }
047            }
048    
049            public long getSubmittedEventNumber() {
050                    return _portalCacheClusterChannelSelector.getSelectedNumber();
051            }
052    
053            public void sendEvent(PortalCacheClusterEvent portalCacheClusterEvent) {
054                    PortalCacheClusterChannel portalCacheClusterChannel =
055                            _portalCacheClusterChannelSelector.select(
056                                    _portalCacheClusterChannels, portalCacheClusterEvent);
057    
058                    portalCacheClusterChannel.sendEvent(portalCacheClusterEvent);
059            }
060    
061            public void setChannelNumber(int channelNumber) {
062                    _channelNumber = channelNumber;
063            }
064    
065            public void setPortalCacheClusterChannelFactory(
066                    PortalCacheClusterChannelFactory portalCacheClusterChannelFactory) {
067    
068                    _portalCacheClusterChannelFactory = portalCacheClusterChannelFactory;
069            }
070    
071            public void setPortalCacheClusterChannelSelector(
072                    PortalCacheClusterChannelSelector portalCacheClusterChannelSelector) {
073    
074                    _portalCacheClusterChannelSelector = portalCacheClusterChannelSelector;
075            }
076    
077            private static final int _DEFAULT_CHANNEL_NUMBER = 10;
078    
079            private int _channelNumber = _DEFAULT_CHANNEL_NUMBER;
080            private PortalCacheClusterChannelFactory _portalCacheClusterChannelFactory;
081            private List<PortalCacheClusterChannel> _portalCacheClusterChannels;
082            private PortalCacheClusterChannelSelector
083                    _portalCacheClusterChannelSelector;
084    
085    }