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.concurrent.Callable;
021 import java.util.concurrent.Future;
022 import java.util.concurrent.FutureTask;
023
024 import org.apache.activemq.broker.ConnectionContext;
025 import org.apache.activemq.command.ActiveMQDestination;
026 import org.apache.activemq.command.Message;
027 import org.apache.activemq.command.MessageAck;
028 import org.apache.activemq.command.MessageId;
029 import org.apache.activemq.usage.MemoryUsage;
030
031 abstract public class AbstractMessageStore implements MessageStore {
032 public static final FutureTask<Object> FUTURE;
033 protected final ActiveMQDestination destination;
034 protected boolean prioritizedMessages;
035
036 public AbstractMessageStore(ActiveMQDestination destination) {
037 this.destination = destination;
038 }
039
040 @Override
041 public void dispose(ConnectionContext context) {
042 }
043
044 @Override
045 public void start() throws Exception {
046 }
047
048 @Override
049 public void stop() throws Exception {
050 }
051
052 @Override
053 public ActiveMQDestination getDestination() {
054 return destination;
055 }
056
057 @Override
058 public void setMemoryUsage(MemoryUsage memoryUsage) {
059 }
060
061 @Override
062 public void setBatch(MessageId messageId) throws IOException, Exception {
063 }
064
065 /**
066 * flag to indicate if the store is empty
067 *
068 * @return true if the message count is 0
069 * @throws Exception
070 */
071 @Override
072 public boolean isEmpty() throws Exception {
073 return getMessageCount() == 0;
074 }
075
076 @Override
077 public void setPrioritizedMessages(boolean prioritizedMessages) {
078 this.prioritizedMessages = prioritizedMessages;
079 }
080
081 @Override
082 public boolean isPrioritizedMessages() {
083 return this.prioritizedMessages;
084 }
085
086 @Override
087 public void addMessage(final ConnectionContext context, final Message message, final boolean canOptimizeHint) throws IOException{
088 addMessage(context, message);
089 }
090
091 @Override
092 public Future<Object> asyncAddQueueMessage(final ConnectionContext context, final Message message) throws IOException {
093 addMessage(context, message);
094 return FUTURE;
095 }
096
097 @Override
098 public Future<Object> asyncAddQueueMessage(final ConnectionContext context, final Message message,final boolean canOptimizeHint) throws IOException {
099 addMessage(context, message, canOptimizeHint);
100 return FUTURE;
101 }
102
103 @Override
104 public Future<Object> asyncAddTopicMessage(final ConnectionContext context, final Message message,final boolean canOptimizeHint) throws IOException {
105 addMessage(context, message, canOptimizeHint);
106 return FUTURE;
107 }
108
109 @Override
110 public Future<Object> asyncAddTopicMessage(final ConnectionContext context, final Message message) throws IOException {
111 addMessage(context, message);
112 return FUTURE;
113 }
114
115 @Override
116 public void removeAsyncMessage(ConnectionContext context, MessageAck ack) throws IOException {
117 removeMessage(context, ack);
118 }
119
120 static class CallableImplementation implements Callable<Object> {
121 public Object call() throws Exception {
122 return null;
123 }
124 }
125
126 static {
127 FUTURE = new FutureTask<Object>(new CallableImplementation());
128 FUTURE.run();
129 }
130 }