001    /** 
002     * 
003     * Copyright 2004 Hiram Chirino
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * 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     **/
018    package org.activemq.store.cache;
019    
020    import org.activemq.message.ActiveMQMessage;
021    import org.activemq.util.LRUCache;
022    
023    /**
024     * A simple cache that stores messages in memory.  Cache entries are evicted 
025     * when they they get to old (A LRU cache is used).
026     *
027     * @version $Revision: 1.1.1.1 $
028     */
029    public class SimpleMessageCache implements MessageCache {
030            
031            private final LRUCache messages;
032            
033            public SimpleMessageCache() {
034                    this(1000);
035            }
036    
037            public SimpleMessageCache(int cacheSize) {
038                    this.messages = new LRUCache(cacheSize);
039            }
040            
041            /**
042             * Gets a message that was previously <code>put</code> into this object.   
043             * 
044             * @param msgid
045             * @return null if the message was not previously put or if the message has expired out of the cache.
046             */
047            synchronized public ActiveMQMessage get(String msgid) {
048                    return (ActiveMQMessage) messages.get(msgid);
049            }
050    
051            /**
052             * Puts a message into the cache.
053             * 
054             * @param messageID
055             * @param message
056             */
057            synchronized public void put(String messageID, ActiveMQMessage message) {
058                    messages.put(messageID, message);               
059            }
060    
061            /**
062             * Remvoes a message from the cache.
063             * 
064             * @param messageID
065             */
066            synchronized public void remove(String messageID) {
067                    messages.remove(messageID);
068            }
069    
070        public void close() {
071            messages.clear();        
072        }
073    
074    }