001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.activemq.kaha;
018
019 import java.io.IOException;
020 import java.util.Set;
021
022 /**
023 * A Store is holds persistent containers
024 *
025 *
026 */
027 public interface Store {
028 /**
029 * Defauly container name
030 */
031 String DEFAULT_CONTAINER_NAME = "kaha";
032
033 /**
034 * Byte Marshaller
035 */
036 Marshaller BYTES_MARSHALLER = new BytesMarshaller();
037
038 /**
039 * Object Marshaller
040 */
041 Marshaller OBJECT_MARSHALLER = new ObjectMarshaller();
042
043 /**
044 * String Marshaller
045 */
046 Marshaller STRING_MARSHALLER = new StringMarshaller();
047
048 /**
049 * Command Marshaller
050 */
051 Marshaller COMMAND_MARSHALLER = new CommandMarshaller();
052
053 /**
054 * MessageId marshaller
055 */
056 Marshaller MESSAGEID_MARSHALLER = new MessageIdMarshaller();
057
058 /**
059 * close the store
060 *
061 * @throws IOException
062 */
063 void close() throws IOException;
064
065 /**
066 * Force all writes to disk
067 *
068 * @throws IOException
069 */
070 void force() throws IOException;
071
072 /**
073 * empty all the contents of the store
074 *
075 * @throws IOException
076 */
077 void clear() throws IOException;
078
079 /**
080 * delete the store
081 *
082 * @return true if the delete was successful
083 * @throws IOException
084 */
085 boolean delete() throws IOException;
086
087 /**
088 * Checks if a MapContainer exists in the default container
089 *
090 * @param id
091 * @return new MapContainer
092 * @throws IOException
093 */
094 boolean doesMapContainerExist(Object id) throws IOException;
095
096 /**
097 * Checks if a MapContainer exists in the named container
098 *
099 * @param id
100 * @param containerName
101 * @return new MapContainer
102 * @throws IOException
103 */
104 boolean doesMapContainerExist(Object id, String containerName) throws IOException;
105
106 /**
107 * Get a MapContainer with the given id - the MapContainer is created if
108 * needed
109 *
110 * @param id
111 * @return container for the associated id or null if it doesn't exist
112 * @throws IOException
113 */
114 MapContainer getMapContainer(Object id) throws IOException;
115
116 /**
117 * Get a MapContainer with the given id - the MapContainer is created if
118 * needed
119 *
120 * @param id
121 * @param containerName
122 * @return container for the associated id or null if it doesn't exist
123 * @throws IOException
124 */
125 MapContainer getMapContainer(Object id, String containerName) throws IOException;
126
127 /**
128 * Get a MapContainer with the given id - the MapContainer is created if
129 * needed
130 *
131 * @param id
132 * @param containerName
133 * @param persistentIndex
134 * @return container for the associated id or null if it doesn't exist
135 * @throws IOException
136 */
137 MapContainer getMapContainer(Object id, String containerName, boolean persistentIndex) throws IOException;
138
139 /**
140 * delete a container from the default container
141 *
142 * @param id
143 * @throws IOException
144 */
145 void deleteMapContainer(Object id) throws IOException;
146
147 /**
148 * delete a MapContainer from the name container
149 *
150 * @param id
151 * @param containerName
152 * @throws IOException
153 */
154 void deleteMapContainer(Object id, String containerName) throws IOException;
155
156 /**
157 * Delete Map container
158 *
159 * @param id
160 * @throws IOException
161 */
162 void deleteMapContainer(ContainerId id) throws IOException;
163
164 /**
165 * Get a Set of call MapContainer Ids
166 *
167 * @return the set of ids
168 * @throws IOException
169 */
170 Set<ContainerId> getMapContainerIds() throws IOException;
171
172 /**
173 * Checks if a ListContainer exists in the default container
174 *
175 * @param id
176 * @return new MapContainer
177 * @throws IOException
178 */
179 boolean doesListContainerExist(Object id) throws IOException;
180
181 /**
182 * Checks if a ListContainer exists in the named container
183 *
184 * @param id
185 * @param containerName
186 * @return new MapContainer
187 * @throws IOException
188 */
189 boolean doesListContainerExist(Object id, String containerName) throws IOException;
190
191 /**
192 * Get a ListContainer with the given id and creates it if it doesn't exist
193 *
194 * @param id
195 * @return container for the associated id or null if it doesn't exist
196 * @throws IOException
197 */
198 ListContainer getListContainer(Object id) throws IOException;
199
200 /**
201 * Get a ListContainer with the given id and creates it if it doesn't exist
202 *
203 * @param id
204 * @param containerName
205 * @return container for the associated id or null if it doesn't exist
206 * @throws IOException
207 */
208 ListContainer getListContainer(Object id, String containerName) throws IOException;
209
210 /**
211 * Get a ListContainer with the given id and creates it if it doesn't exist
212 *
213 * @param id
214 * @param containerName
215 * @param persistentIndex
216 * @return container for the associated id or null if it doesn't exist
217 * @throws IOException
218 */
219 ListContainer getListContainer(Object id, String containerName, boolean persistentIndex) throws IOException;
220
221 /**
222 * delete a ListContainer from the default container
223 *
224 * @param id
225 * @throws IOException
226 */
227 void deleteListContainer(Object id) throws IOException;
228
229 /**
230 * delete a ListContainer from the named container
231 *
232 * @param id
233 * @param containerName
234 * @throws IOException
235 */
236 void deleteListContainer(Object id, String containerName) throws IOException;
237
238 /**
239 * delete a list container
240 *
241 * @param id
242 * @throws IOException
243 */
244 void deleteListContainer(ContainerId id) throws IOException;
245
246 /**
247 * Get a Set of call ListContainer Ids
248 *
249 * @return the set of ids
250 * @throws IOException
251 */
252 Set<ContainerId> getListContainerIds() throws IOException;
253
254 /**
255 * @return the maxDataFileLength
256 */
257 long getMaxDataFileLength();
258
259 /**
260 * @param maxDataFileLength the maxDataFileLength to set
261 */
262 void setMaxDataFileLength(long maxDataFileLength);
263
264
265 /**
266 * @return true if the store has been initialized
267 */
268 boolean isInitialized();
269
270 /**
271 * @return the amount of disk space the store is occupying
272 */
273 long size();
274
275 /**
276 * @return true if persistent indexes are used by default
277 */
278 public boolean isPersistentIndex();
279
280 /**
281 * Set a persistent index as the default if the parameter is true
282 * @param persistentIndex
283 */
284 public void setPersistentIndex(boolean persistentIndex);
285
286 /**
287 * @return the default container name
288 */
289 public String getDefaultContainerName();
290
291 /**
292 * set the default container name
293 * @param defaultContainerName
294 */
295 public void setDefaultContainerName(String defaultContainerName);
296
297
298 /**
299 * An explict call to initialize - this will also be called
300 * implicitly for any other operation on the store.
301 * @throws IOException
302 */
303 public void initialize() throws IOException;
304
305 }