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.leveldb;
018    
019    import org.apache.activemq.store.PersistenceAdapter;
020    import org.apache.activemq.store.PersistenceAdapterFactory;
021    
022    import java.io.File;
023    import java.io.IOException;
024    
025    /**
026     * A factory which can create configured LevelDBStore objects.
027     */
028    public class LevelDBStoreFactory implements PersistenceAdapterFactory {
029    
030        private int asyncBufferSize = 1024*1024*4;
031        private File directory = new File("LevelDB");
032        private int flushDelay = 1000*5;
033        private int indexBlockRestartInterval = 16;
034        private int indexBlockSize = 4 * 1024;
035        private long indexCacheSize = 1024 * 1024 * 256L;
036        private String indexCompression = "snappy";
037        private String indexFactory = "org.fusesource.leveldbjni.JniDBFactory, org.iq80.leveldb.impl.Iq80DBFactory";
038        private int indexMaxOpenFiles = 1000;
039        private int indexWriteBufferSize = 1024*1024*6;
040        private String logCompression = "none";
041        private File logDirectory;
042        private long logSize = 1024 * 1024 * 100;
043        private boolean monitorStats;
044        private boolean paranoidChecks;
045        private boolean sync = true;
046        private boolean verifyChecksums;
047    
048    
049        @Override
050        public PersistenceAdapter createPersistenceAdapter() throws IOException {
051            LevelDBStore store = new LevelDBStore();
052            store.setVerifyChecksums(verifyChecksums);
053            store.setAsyncBufferSize(asyncBufferSize);
054            store.setDirectory(directory);
055            store.setFlushDelay(flushDelay);
056            store.setIndexBlockRestartInterval(indexBlockRestartInterval);
057            store.setIndexBlockSize(indexBlockSize);
058            store.setIndexCacheSize(indexCacheSize);
059            store.setIndexCompression(indexCompression);
060            store.setIndexFactory(indexFactory);
061            store.setIndexMaxOpenFiles(indexMaxOpenFiles);
062            store.setIndexWriteBufferSize(indexWriteBufferSize);
063            store.setLogCompression(logCompression);
064            store.setLogDirectory(logDirectory);
065            store.setLogSize(logSize);
066            store.setMonitorStats(monitorStats);
067            store.setParanoidChecks(paranoidChecks);
068            store.setSync(sync);
069            return store;
070        }
071    
072        public int getAsyncBufferSize() {
073            return asyncBufferSize;
074        }
075    
076        public void setAsyncBufferSize(int asyncBufferSize) {
077            this.asyncBufferSize = asyncBufferSize;
078        }
079    
080        public File getDirectory() {
081            return directory;
082        }
083    
084        public void setDirectory(File directory) {
085            this.directory = directory;
086        }
087    
088        public int getFlushDelay() {
089            return flushDelay;
090        }
091    
092        public void setFlushDelay(int flushDelay) {
093            this.flushDelay = flushDelay;
094        }
095    
096        public int getIndexBlockRestartInterval() {
097            return indexBlockRestartInterval;
098        }
099    
100        public void setIndexBlockRestartInterval(int indexBlockRestartInterval) {
101            this.indexBlockRestartInterval = indexBlockRestartInterval;
102        }
103    
104        public int getIndexBlockSize() {
105            return indexBlockSize;
106        }
107    
108        public void setIndexBlockSize(int indexBlockSize) {
109            this.indexBlockSize = indexBlockSize;
110        }
111    
112        public long getIndexCacheSize() {
113            return indexCacheSize;
114        }
115    
116        public void setIndexCacheSize(long indexCacheSize) {
117            this.indexCacheSize = indexCacheSize;
118        }
119    
120        public String getIndexCompression() {
121            return indexCompression;
122        }
123    
124        public void setIndexCompression(String indexCompression) {
125            this.indexCompression = indexCompression;
126        }
127    
128        public String getIndexFactory() {
129            return indexFactory;
130        }
131    
132        public void setIndexFactory(String indexFactory) {
133            this.indexFactory = indexFactory;
134        }
135    
136        public int getIndexMaxOpenFiles() {
137            return indexMaxOpenFiles;
138        }
139    
140        public void setIndexMaxOpenFiles(int indexMaxOpenFiles) {
141            this.indexMaxOpenFiles = indexMaxOpenFiles;
142        }
143    
144        public int getIndexWriteBufferSize() {
145            return indexWriteBufferSize;
146        }
147    
148        public void setIndexWriteBufferSize(int indexWriteBufferSize) {
149            this.indexWriteBufferSize = indexWriteBufferSize;
150        }
151    
152        public String getLogCompression() {
153            return logCompression;
154        }
155    
156        public void setLogCompression(String logCompression) {
157            this.logCompression = logCompression;
158        }
159    
160        public File getLogDirectory() {
161            return logDirectory;
162        }
163    
164        public void setLogDirectory(File logDirectory) {
165            this.logDirectory = logDirectory;
166        }
167    
168        public long getLogSize() {
169            return logSize;
170        }
171    
172        public void setLogSize(long logSize) {
173            this.logSize = logSize;
174        }
175    
176        public boolean isMonitorStats() {
177            return monitorStats;
178        }
179    
180        public void setMonitorStats(boolean monitorStats) {
181            this.monitorStats = monitorStats;
182        }
183    
184        public boolean isParanoidChecks() {
185            return paranoidChecks;
186        }
187    
188        public void setParanoidChecks(boolean paranoidChecks) {
189            this.paranoidChecks = paranoidChecks;
190        }
191    
192        public boolean isSync() {
193            return sync;
194        }
195    
196        public void setSync(boolean sync) {
197            this.sync = sync;
198        }
199    
200        public boolean isVerifyChecksums() {
201            return verifyChecksums;
202        }
203    
204        public void setVerifyChecksums(boolean verifyChecksums) {
205            this.verifyChecksums = verifyChecksums;
206        }
207    
208    }