View Javadoc

1   /*    Open Source Java Caching Service
2   *    Copyright (C) 2002 Frank Karlstrøm
3   *    This library is free software; you can redistribute it and/or
4   *    modify it under the terms of the GNU Lesser General Public
5   *    License as published by the Free Software Foundation; either
6   *    version 2.1 of the License, or (at your option) any later version.
7   *
8   *    This library is distributed in the hope that it will be useful,
9   *    but WITHOUT ANY WARRANTY; without even the implied warranty of
10  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  *    Lesser General Public License for more details.
12  *
13  *    You should have received a copy of the GNU Lesser General Public
14  *    License along with this library; if not, write to the Free Software
15  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16  *
17  *    The author can be contacted by email: fjankk@users.sourceforge.net
18  */
19  package org.fjank.jcache.distribution;
20  
21  import java.io.Serializable;
22  import java.util.Enumeration;
23  import javax.util.jcache.CacheException;
24  import org.fjank.jcache.CacheImpl;
25  
26  /**
27   * Created by IntelliJ IDEA.
28   * User: Philippe
29   * Date: Jun 7, 2004
30   * Time: 11:39:37 PM
31   * To change this template use Options | File Templates.
32   */
33  public abstract class DistributionEngine
34  {
35      public static DistributionEngine getInstance(CacheImpl cache) 
36      {
37          // TODO: allows instanciation of any Distribution Engine. For now, just use the JGroups based one
38          // In future, can support JMS as well
39          return JGroupsDistributionEngine.instanceOf(cache);
40      }
41  
42      public abstract Enumeration getCacheAddr();
43  
44      public void cacheObjectUpdated(String region,
45                                     String group,
46                                     Serializable key,
47                                     Serializable data) 
48      {
49          sendNotification(new ClusterNotification(region,
50                                                   group,
51                                                   ClusterNotification.OBJECT_UPDATED,
52                                                   new SerializableCacheObject(key, data)));
53      }
54  
55  
56      public void cacheObjectAdded(String region,
57                                   String group,
58                                   Serializable key,
59                                   Serializable data) throws CacheException
60      {
61          sendNotification(new ClusterNotification(region,
62                                                   group,
63                                                   ClusterNotification.OBJECT_ADDED,
64                                                   new SerializableCacheObject(key, data)));
65  
66      }
67  
68  
69      public void cacheObjectInvalidated(String region,
70                                         Serializable key) 
71      {
72          sendNotification(new ClusterNotification(region,
73                                                   null,
74                                                   ClusterNotification.OBJECT_INVALIDATED,
75                                                   key));
76      }
77  
78      protected void handleClusterNotification(ClusterNotification clusterNotification)
79      {
80  //        try
81  //        {
82  //            CacheLogger logger = CacheAccessFactory.getInstance().getCache().getAttributes().getLogger();
83  //            logger.log("handleClusterNotification - message received");
84  //
85  //            CacheMap cacheAccess = CacheAccessFactory.getInstance().getMapAccess(clusterNotification.getRegionName());
86  //            SerializableCacheObject cacheObject;
87  //            switch (clusterNotification.getType())
88  //            {
89  //                case ClusterNotification.OBJECT_ADDED:
90  //                    cacheObject = (SerializableCacheObject) clusterNotification.getData();
91  //                    logger.log("handleClusterNotification - object added: " + cacheObject.getKey());
92  //                    // Add object to the cache if it does not exist
93  //                    try
94  //                    {
95  //                        Object object = cacheAccess.get(cacheObject.getKey());
96  //                    }
97  //                    catch (ObjectNotFoundException e)
98  //                    {
99  //                        cacheAccess.putWithoutDistribution(cacheObject.getKey(),
100 //                                                           clusterNotification.getGroupName(),
101 //                                                           null,
102 //                                                           cacheObject.getValue());
103 //                    }
104 //                    break;
105 //
106 //                case ClusterNotification.OBJECT_UPDATED:
107 //                    cacheObject = (SerializableCacheObject) clusterNotification.getData();
108 //                    logger.log("handleClusterNotification - object updated: " + cacheObject.getKey());
109 //                    if (clusterNotification.getGroupName() == null)
110 //                    {
111 //                        Object name = cacheObject.getKey();
112 //                        cacheAccess.replaceWithoutDistribution(name, cacheObject.getValue());
113 //                    }
114 //                    else
115 //                    {
116 //                        Object name = cacheObject.getKey();
117 //                        cacheAccess.replaceWithoutDistribution(name, clusterNotification.getGroupName(), cacheObject.getValue());
118 //                    }
119 //                    break;
120 //
121 //                case ClusterNotification.OBJECT_INVALIDATED:
122 //                    Object key = clusterNotification.getData();
123 //                    logger.log("handleClusterNotification - object invalidated: " + key);
124 //                    Attributes attributes = cacheAccess.getAttributes(key);
125 //                    cacheAccess.invalidateWithoutDistribution(key);
126 //                    if (attributes.getListener() != null)
127 //                        attributes.getListener().handleEvent(new CacheEventImpl(Attributes.INVALIDATE_EVENT,
128 //                                                                                key));
129 //                    break;
130 //
131 //            }
132 //        }
133 //        catch (CacheException e)
134 //        {
135 //            e.printStackTrace();
136 //        }
137     }
138 
139     public abstract void sendNotification(ClusterNotification clusterNotification); 
140     
141 
142     protected CacheImpl cache;
143 }