KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > fjank > jcache > distribution > DistributionEngine


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 JavaDoc;
22 import java.util.Enumeration JavaDoc;
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 JavaDoc getCacheAddr();
43
44     public void cacheObjectUpdated(String JavaDoc region,
45                                    String JavaDoc group,
46                                    Serializable JavaDoc key,
47                                    Serializable JavaDoc 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 JavaDoc region,
57                                  String JavaDoc group,
58                                  Serializable JavaDoc key,
59                                  Serializable JavaDoc 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 JavaDoc region,
70                                        Serializable JavaDoc 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 }
144
Popular Tags