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;
018    
019    import java.io.IOException;
020    import java.util.Map;
021    import java.util.Set;
022    
023    import org.apache.activemq.command.ActiveMQQueue;
024    import org.apache.activemq.command.ActiveMQTopic;
025    import org.apache.activemq.command.SubscriptionInfo;
026    import org.apache.activemq.command.TransactionId;
027    import org.apache.activemq.store.amq.AMQTx;
028    
029    /**
030     * Adapter to the actual persistence mechanism used with ActiveMQ
031     * 
032     * 
033     */
034    public interface ReferenceStoreAdapter extends PersistenceAdapter {
035    
036        /**
037         * Factory method to create a new queue message store with the given
038         * destination name
039         * 
040         * @param destination
041         * @return the QueueReferenceStore
042         * @throws IOException
043         */
044        ReferenceStore createQueueReferenceStore(ActiveMQQueue destination) throws IOException;
045    
046        /**
047         * Factory method to create a new topic message store with the given
048         * destination name
049         * 
050         * @param destination
051         * @return the TopicRefererenceStore
052         * @throws IOException
053         */
054        TopicReferenceStore createTopicReferenceStore(ActiveMQTopic destination) throws IOException;
055    
056        /**
057         * @return Set of File ids in use
058         * @throws IOException
059         */
060        Set<Integer> getReferenceFileIdsInUse() throws IOException;
061    
062        /**
063         * If the store isn't valid, it can be recoverd at start-up
064         * 
065         * @return true if the reference store is in a consistent state
066         */
067        boolean isStoreValid();
068    
069        /**
070         * called by recover to clear out message references
071         * 
072         * @throws IOException
073         */
074        void clearMessages() throws IOException;
075    
076        /**
077         * recover any state
078         * 
079         * @throws IOException
080         */
081        void recoverState() throws IOException;
082    
083        /**
084         * Save prepared transactions
085         * 
086         * @param map
087         * @throws IOException
088         */
089        void savePreparedState(Map<TransactionId, AMQTx> map) throws IOException;
090    
091        /**
092         * @return saved prepared transactions
093         * @throws IOException
094         */
095        Map<TransactionId, AMQTx> retrievePreparedState() throws IOException;
096        
097        /**
098         * @return the maxDataFileLength
099         */
100        long getMaxDataFileLength();
101        
102        /**
103         * set the max data length of a reference data log - if used
104         * @param maxDataFileLength
105         */
106        void setMaxDataFileLength(long maxDataFileLength);
107        
108        /**
109         * Recover particular subscription. Used for recovery of durable consumers
110         * @param info
111         * @throws IOException
112         */
113        void recoverSubscription(SubscriptionInfo info) throws IOException;
114    }