1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.kernel.cache.cluster;
16  
17  import java.util.ArrayList;
18  import java.util.List;
19  
20  /**
21   * <a href="PortalCacheClusterLink.java.html"><b><i>View Source</i></b></a>
22   *
23   * @author Shuyang Zhou
24   */
25  public class PortalCacheClusterLink {
26  
27      public void afterPropertiesSet() {
28          _portalCacheClusterChannels =
29              new ArrayList<PortalCacheClusterChannel>(_channelNumber);
30  
31          for (int i = 0; i < _channelNumber; i++) {
32              _portalCacheClusterChannels.add(
33                  _portalCacheClusterChannelFactory.
34                      createPortalCacheClusterChannel());
35          }
36  
37          if (_portalCacheClusterChannelSelector == null) {
38              _portalCacheClusterChannelSelector =
39                  new UniformPortalCacheClusterChannelSelector();
40          }
41      }
42  
43      public void destroy() {
44          for (PortalCacheClusterChannel portalCacheClusterChannel :
45                  _portalCacheClusterChannels) {
46  
47              portalCacheClusterChannel.destroy();
48          }
49      }
50  
51      public long getSubmittedEventNumber() {
52          return _portalCacheClusterChannelSelector.getSelectedNumber();
53      }
54  
55      public void sendEvent(PortalCacheClusterEvent portalCacheClusterEvent) {
56          PortalCacheClusterChannel portalCacheClusterChannel =
57              _portalCacheClusterChannelSelector.select(
58                  _portalCacheClusterChannels, portalCacheClusterEvent);
59  
60          portalCacheClusterChannel.sendEvent(portalCacheClusterEvent);
61      }
62  
63      public void setChannelNumber(int channelNumber) {
64          _channelNumber = channelNumber;
65      }
66  
67      public void setPortalCacheClusterChannelFactory(
68          PortalCacheClusterChannelFactory portalCacheClusterChannelFactory) {
69  
70          _portalCacheClusterChannelFactory = portalCacheClusterChannelFactory;
71      }
72  
73      public void setPortalCacheClusterChannelSelector(
74          PortalCacheClusterChannelSelector portalCacheClusterChannelSelector) {
75  
76          _portalCacheClusterChannelSelector = portalCacheClusterChannelSelector;
77      }
78  
79      private static final int _DEFAULT_CHANNEL_NUMBER = 10;
80  
81      private int _channelNumber = _DEFAULT_CHANNEL_NUMBER;
82      private PortalCacheClusterChannelFactory _portalCacheClusterChannelFactory;
83      private List<PortalCacheClusterChannel> _portalCacheClusterChannels;
84      private PortalCacheClusterChannelSelector
85          _portalCacheClusterChannelSelector;
86  
87  }