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.store.amq;
018
019 import java.io.File;
020 import org.apache.activemq.kaha.impl.async.AsyncDataManager;
021 import org.apache.activemq.kaha.impl.index.hash.HashIndex;
022 import org.apache.activemq.store.PersistenceAdapter;
023 import org.apache.activemq.store.PersistenceAdapterFactory;
024 import org.apache.activemq.store.ReferenceStoreAdapter;
025 import org.apache.activemq.thread.TaskRunnerFactory;
026 import org.apache.activemq.util.IOHelper;
027
028 /**
029 * An implementation of {@link PersistenceAdapterFactory}
030 *
031 * @org.apache.xbean.XBean element="amqPersistenceAdapterFactory"
032 *
033 *
034 */
035 public class AMQPersistenceAdapterFactory implements PersistenceAdapterFactory {
036 static final int DEFAULT_MAX_REFERNCE_FILE_LENGTH=2*1024*1024;
037 private File dataDirectory;
038 private int journalThreadPriority = Thread.MAX_PRIORITY;
039 private String brokerName = "localhost";
040 private ReferenceStoreAdapter referenceStoreAdapter;
041 private boolean syncOnWrite;
042 private boolean syncOnTransaction=true;
043 private boolean persistentIndex=true;
044 private boolean useNio = true;
045 private int maxFileLength = AsyncDataManager.DEFAULT_MAX_FILE_LENGTH;
046 private long cleanupInterval = AsyncDataManager.DEFAULT_CLEANUP_INTERVAL;
047 private int indexBinSize = HashIndex.DEFAULT_BIN_SIZE;
048 private int indexKeySize = HashIndex.DEFAULT_KEY_SIZE;
049 private int indexPageSize = HashIndex.DEFAULT_PAGE_SIZE;
050 private int indexMaxBinSize = HashIndex.MAXIMUM_CAPACITY;
051 private int indexLoadFactor = HashIndex.DEFAULT_LOAD_FACTOR;
052 private int maxReferenceFileLength=DEFAULT_MAX_REFERNCE_FILE_LENGTH;
053 private boolean recoverReferenceStore=true;
054 private boolean forceRecoverReferenceStore=false;
055 private long checkpointInterval = 1000 * 20;
056 private boolean useDedicatedTaskRunner;
057 private TaskRunnerFactory taskRunnerFactory;
058
059
060 /**
061 * @return a AMQPersistenceAdapter
062 * @see org.apache.activemq.store.PersistenceAdapterFactory#createPersistenceAdapter()
063 */
064 public PersistenceAdapter createPersistenceAdapter() {
065 AMQPersistenceAdapter result = new AMQPersistenceAdapter();
066 result.setDirectory(getDataDirectory());
067 result.setTaskRunnerFactory(getTaskRunnerFactory());
068 result.setBrokerName(getBrokerName());
069 result.setSyncOnWrite(isSyncOnWrite());
070 result.setPersistentIndex(isPersistentIndex());
071 result.setReferenceStoreAdapter(getReferenceStoreAdapter());
072 result.setUseNio(isUseNio());
073 result.setMaxFileLength(getMaxFileLength());
074 result.setCleanupInterval(getCleanupInterval());
075 result.setCheckpointInterval(getCheckpointInterval());
076 result.setIndexBinSize(getIndexBinSize());
077 result.setIndexKeySize(getIndexKeySize());
078 result.setIndexPageSize(getIndexPageSize());
079 result.setIndexMaxBinSize(getIndexMaxBinSize());
080 result.setIndexLoadFactor(getIndexLoadFactor());
081 result.setMaxReferenceFileLength(getMaxReferenceFileLength());
082 result.setForceRecoverReferenceStore(isForceRecoverReferenceStore());
083 result.setRecoverReferenceStore(isRecoverReferenceStore());
084 result.setUseDedicatedTaskRunner(isUseDedicatedTaskRunner());
085 result.setJournalThreadPriority(getJournalThreadPriority());
086 return result;
087 }
088
089 public long getCleanupInterval() {
090 return cleanupInterval;
091 }
092
093 public void setCleanupInterval(long val) {
094 cleanupInterval = val;
095 }
096
097 /**
098 * @return the dataDirectory
099 */
100 public File getDataDirectory() {
101 if (this.dataDirectory == null) {
102 this.dataDirectory = new File(IOHelper.getDefaultDataDirectory(), IOHelper.toFileSystemSafeName(brokerName));
103 }
104 return this.dataDirectory;
105 }
106
107 /**
108 * @param dataDirectory the dataDirectory to set
109 */
110 public void setDataDirectory(File dataDirectory) {
111 this.dataDirectory = dataDirectory;
112 }
113
114 public boolean isUseDedicatedTaskRunner() {
115 return useDedicatedTaskRunner;
116 }
117
118 public void setUseDedicatedTaskRunner(boolean useDedicatedTaskRunner) {
119 this.useDedicatedTaskRunner = useDedicatedTaskRunner;
120 }
121
122 /**
123 * @return the taskRunnerFactory
124 */
125 public TaskRunnerFactory getTaskRunnerFactory() {
126 return taskRunnerFactory;
127 }
128
129 /**
130 * @param taskRunnerFactory the taskRunnerFactory to set
131 */
132 public void setTaskRunnerFactory(TaskRunnerFactory taskRunnerFactory) {
133 this.taskRunnerFactory = taskRunnerFactory;
134 }
135
136 /**
137 * @return the journalThreadPriority
138 */
139 public int getJournalThreadPriority() {
140 return this.journalThreadPriority;
141 }
142
143 /**
144 * @param journalThreadPriority the journalThreadPriority to set
145 */
146 public void setJournalThreadPriority(int journalThreadPriority) {
147 this.journalThreadPriority = journalThreadPriority;
148 }
149
150 /**
151 * @return the brokerName
152 */
153 public String getBrokerName() {
154 return this.brokerName;
155 }
156
157 /**
158 * @param brokerName the brokerName to set
159 */
160 public void setBrokerName(String brokerName) {
161 this.brokerName = brokerName;
162 }
163
164 /**
165 * @return the referenceStoreAdapter
166 */
167 public ReferenceStoreAdapter getReferenceStoreAdapter() {
168 return this.referenceStoreAdapter;
169 }
170
171 /**
172 * @param referenceStoreAdapter the referenceStoreAdapter to set
173 */
174 public void setReferenceStoreAdapter(ReferenceStoreAdapter referenceStoreAdapter) {
175 this.referenceStoreAdapter = referenceStoreAdapter;
176 }
177
178 public boolean isPersistentIndex() {
179 return persistentIndex;
180 }
181
182 public void setPersistentIndex(boolean persistentIndex) {
183 this.persistentIndex = persistentIndex;
184 }
185
186 public boolean isSyncOnWrite() {
187 return syncOnWrite;
188 }
189
190 public void setSyncOnWrite(boolean syncOnWrite) {
191 this.syncOnWrite = syncOnWrite;
192 }
193
194 public boolean isSyncOnTransaction() {
195 return syncOnTransaction;
196 }
197
198 public void setSyncOnTransaction(boolean syncOnTransaction) {
199 this.syncOnTransaction = syncOnTransaction;
200 }
201
202 public boolean isUseNio() {
203 return useNio;
204 }
205
206 public void setUseNio(boolean useNio) {
207 this.useNio = useNio;
208 }
209
210 public int getMaxFileLength() {
211 return maxFileLength;
212 }
213
214 public void setMaxFileLength(int maxFileLength) {
215 this.maxFileLength = maxFileLength;
216 }
217
218 /**
219 * @return the indexBinSize
220 */
221 public int getIndexBinSize() {
222 return indexBinSize;
223 }
224
225 /**
226 * @param indexBinSize the indexBinSize to set
227 */
228 public void setIndexBinSize(int indexBinSize) {
229 this.indexBinSize = indexBinSize;
230 }
231
232 /**
233 * @return the indexKeySize
234 */
235 public int getIndexKeySize() {
236 return indexKeySize;
237 }
238
239 /**
240 * @param indexKeySize the indexKeySize to set
241 */
242 public void setIndexKeySize(int indexKeySize) {
243 this.indexKeySize = indexKeySize;
244 }
245
246 /**
247 * @return the indexPageSize
248 */
249 public int getIndexPageSize() {
250 return indexPageSize;
251 }
252
253 /**
254 * @param indexPageSize the indexPageSize to set
255 */
256 public void setIndexPageSize(int indexPageSize) {
257 this.indexPageSize = indexPageSize;
258 }
259
260 /**
261 * @return the indexMaxBinSize
262 */
263 public int getIndexMaxBinSize() {
264 return indexMaxBinSize;
265 }
266
267 /**
268 * @param indexMaxBinSize the indexMaxBinSize to set
269 */
270 public void setIndexMaxBinSize(int indexMaxBinSize) {
271 this.indexMaxBinSize = indexMaxBinSize;
272 }
273
274 /**
275 * @return the indexLoadFactor
276 */
277 public int getIndexLoadFactor() {
278 return indexLoadFactor;
279 }
280
281 /**
282 * @param indexLoadFactor the indexLoadFactor to set
283 */
284 public void setIndexLoadFactor(int indexLoadFactor) {
285 this.indexLoadFactor = indexLoadFactor;
286 }
287
288 /**
289 * @return the maxReferenceFileLength
290 */
291 public int getMaxReferenceFileLength() {
292 return maxReferenceFileLength;
293 }
294
295 /**
296 * @param maxReferenceFileLength the maxReferenceFileLength to set
297 */
298 public void setMaxReferenceFileLength(int maxReferenceFileLength) {
299 this.maxReferenceFileLength = maxReferenceFileLength;
300 }
301
302 /**
303 * @return the recoverReferenceStore
304 */
305 public boolean isRecoverReferenceStore() {
306 return recoverReferenceStore;
307 }
308
309 /**
310 * @param recoverReferenceStore the recoverReferenceStore to set
311 */
312 public void setRecoverReferenceStore(boolean recoverReferenceStore) {
313 this.recoverReferenceStore = recoverReferenceStore;
314 }
315
316 /**
317 * @return the forceRecoverReferenceStore
318 */
319 public boolean isForceRecoverReferenceStore() {
320 return forceRecoverReferenceStore;
321 }
322
323 /**
324 * @param forceRecoverReferenceStore the forceRecoverReferenceStore to set
325 */
326 public void setForceRecoverReferenceStore(boolean forceRecoverReferenceStore) {
327 this.forceRecoverReferenceStore = forceRecoverReferenceStore;
328 }
329
330 /**
331 * @return the checkpointInterval
332 */
333 public long getCheckpointInterval() {
334 return checkpointInterval;
335 }
336
337 /**
338 * @param checkpointInterval the checkpointInterval to set
339 */
340 public void setCheckpointInterval(long checkpointInterval) {
341 this.checkpointInterval = checkpointInterval;
342 }
343 }