/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.artemis.core.server; import javax.json.JsonArrayBuilder; import javax.transaction.xa.Xid; import java.util.List; import java.util.Set; import org.apache.activemq.artemis.Closeable; import org.apache.activemq.artemis.api.core.Message; import org.apache.activemq.artemis.api.core.Pair; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.core.persistence.OperationContext; import org.apache.activemq.artemis.core.postoffice.RoutingStatus; import org.apache.activemq.artemis.core.security.SecurityAuth; import org.apache.activemq.artemis.core.server.impl.AddressInfo; import org.apache.activemq.artemis.core.transaction.Transaction; import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection; public interface ServerSession extends SecurityAuth { String getName(); int getMinLargeMessageSize(); Object getConnectionID(); /** * Certain protocols may create an internal session that shouldn't go through security checks. * make sure you don't expose this property through any protocol layer as that would be a security breach */ void enableSecurity(); void disableSecurity(); @Override RemotingConnection getRemotingConnection(); Transaction newTransaction(); boolean removeConsumer(long consumerID) throws Exception; void acknowledge(long consumerID, long messageID) throws Exception; void individualAcknowledge(long consumerID, long messageID) throws Exception; void individualCancel(final long consumerID, final long messageID, boolean failed) throws Exception; void expire(long consumerID, long messageID) throws Exception; void rollback(boolean considerLastMessageAsDelivered) throws Exception; void commit() throws Exception; void xaCommit(Xid xid, boolean onePhase) throws Exception; void xaEnd(Xid xid) throws Exception; void xaForget(Xid xid) throws Exception; void xaJoin(Xid xid) throws Exception; void xaPrepare(Xid xid) throws Exception; void xaResume(Xid xid) throws Exception; void xaRollback(Xid xid) throws Exception; void xaStart(Xid xid) throws Exception; void xaFailed(Xid xid) throws Exception; void xaSuspend() throws Exception; void markTXFailed(Throwable e); List<Xid> xaGetInDoubtXids(); int xaGetTimeout(); void xaSetTimeout(int timeout); void start(); void stop(); void addCloseable(Closeable closeable); /** * To be used by protocol heads that needs to control the transaction outside the session context. */ void resetTX(Transaction transaction); Queue createQueue(SimpleString address, SimpleString name, RoutingType routingType, SimpleString filterString, boolean temporary, boolean durable) throws Exception; /** * Create queue with default delivery mode * * @param address * @param name * @param filterString * @param temporary * @param durable * @return * @throws Exception */ Queue createQueue(SimpleString address, SimpleString name, SimpleString filterString, boolean temporary, boolean durable) throws Exception; Queue createQueue(SimpleString address, SimpleString name, RoutingType routingType, SimpleString filterString, boolean temporary, boolean durable, int maxConsumers, boolean purgeOnNoConsumers, boolean autoCreated) throws Exception; Queue createQueue(SimpleString address, SimpleString name, RoutingType routingType, SimpleString filterString, boolean temporary, boolean durable, boolean autoCreated) throws Exception; AddressInfo createAddress(final SimpleString address, Set<RoutingType> routingTypes, final boolean autoCreated) throws Exception; AddressInfo createAddress(final SimpleString address, RoutingType routingType, final boolean autoCreated) throws Exception; void deleteQueue(SimpleString name) throws Exception; ServerConsumer createConsumer(long consumerID, SimpleString queueName, SimpleString filterString, boolean browseOnly) throws Exception; ServerConsumer createConsumer(final long consumerID, final SimpleString queueName, final SimpleString filterString, final boolean browseOnly, final boolean supportLargeMessage, final Integer credits) throws Exception; QueueQueryResult executeQueueQuery(SimpleString name) throws Exception; AddressQueryResult executeAddressQuery(SimpleString name) throws Exception; BindingQueryResult executeBindingQuery(SimpleString address) throws Exception; void closeConsumer(long consumerID) throws Exception; void receiveConsumerCredits(long consumerID, int credits) throws Exception; RoutingStatus send(Transaction tx, Message message, boolean direct, boolean noAutoCreateQueue) throws Exception; RoutingStatus doSend(final Transaction tx, final Message msg, final SimpleString originalAddress, final boolean direct, final boolean noAutoCreateQueue) throws Exception; RoutingStatus send(Message message, boolean direct, boolean noAutoCreateQueue) throws Exception; RoutingStatus send(Message message, boolean direct) throws Exception; void forceConsumerDelivery(long consumerID, long sequence) throws Exception; void requestProducerCredits(SimpleString address, int credits) throws Exception; void close(boolean failed) throws Exception; void waitContextCompletion() throws Exception; void setTransferring(boolean transferring); Set<ServerConsumer> getServerConsumers(); void addMetaData(String key, String data); boolean addUniqueMetaData(String key, String data); String getMetaData(String key); String[] getTargetAddresses(); /** * Add all the producers detail to the JSONArray object. * This is a method to be used by the management layer. * * @param objs * @throws Exception */ void describeProducersInfo(JsonArrayBuilder objs) throws Exception; String getLastSentMessageID(String address); long getCreationTime(); OperationContext getSessionContext(); Transaction getCurrentTransaction(); ServerConsumer locateConsumer(long consumerID) throws Exception; boolean isClosed(); void createSharedQueue(SimpleString address, SimpleString name, final RoutingType routingType, boolean durable, SimpleString filterString) throws Exception; void createSharedQueue(SimpleString address, SimpleString name, boolean durable, SimpleString filterString) throws Exception; List<MessageReference> getInTXMessagesForConsumer(long consumerId); String getValidatedUser(); SimpleString getMatchingQueue(SimpleString address, RoutingType routingType) throws Exception; SimpleString getMatchingQueue(SimpleString address, SimpleString queueName, RoutingType routingType) throws Exception; AddressInfo getAddress(SimpleString address); /** * Strip the prefix (if it exists) from the address based on the prefixes provided to the ServerSession constructor. * * @param address the address to inspect * @return the canonical (i.e. non-prefixed) address name */ SimpleString removePrefix(SimpleString address); /** * Get the canonical (i.e. non-prefixed) address and the corresponding routing-type. * * @param address the address to inspect * @param defaultRoutingType the {@code org.apache.activemq.artemis.api.core.RoutingType} to return if no prefix * match is found. * @return a {@code org.apache.activemq.artemis.api.core.Pair} representing the canonical (i.e. non-prefixed) address * name and the {@code org.apache.activemq.artemis.api.core.RoutingType} corresponding to the that prefix. */ Pair<SimpleString, RoutingType> getAddressAndRoutingType(SimpleString address, RoutingType defaultRoutingType); /** * Get the canonical (i.e. non-prefixed) address and the corresponding routing-type. * * @param address the address to inspect * @param defaultRoutingTypes a the {@code java.util.Set} of {@code org.apache.activemq.artemis.api.core.RoutingType} * objects to return if no prefix match is found. * @return a {@code org.apache.activemq.artemis.api.core.Pair} representing the canonical (i.e. non-prefixed) address * name and the {@code java.util.Set} of {@code org.apache.activemq.artemis.api.core.RoutingType} objects * corresponding to the that prefix. */ Pair<SimpleString, Set<RoutingType>> getAddressAndRoutingTypes(SimpleString address, Set<RoutingType> defaultRoutingTypes); }