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.command; 018 019 import org.apache.activemq.state.CommandVisitor; 020 021 /** 022 * 023 * @openwire:marshaller code="6" 024 * 025 */ 026 public class ProducerInfo extends BaseCommand { 027 028 public static final byte DATA_STRUCTURE_TYPE = CommandTypes.PRODUCER_INFO; 029 030 protected ProducerId producerId; 031 protected ActiveMQDestination destination; 032 protected BrokerId[] brokerPath; 033 protected boolean dispatchAsync; 034 protected int windowSize; 035 036 public ProducerInfo() { 037 } 038 039 public ProducerInfo(ProducerId producerId) { 040 this.producerId = producerId; 041 } 042 043 public ProducerInfo(SessionInfo sessionInfo, long producerId) { 044 this.producerId = new ProducerId(sessionInfo.getSessionId(), producerId); 045 } 046 047 public ProducerInfo copy() { 048 ProducerInfo info = new ProducerInfo(); 049 copy(info); 050 return info; 051 } 052 053 public void copy(ProducerInfo info) { 054 super.copy(info); 055 info.producerId = producerId; 056 info.destination = destination; 057 } 058 059 public byte getDataStructureType() { 060 return DATA_STRUCTURE_TYPE; 061 } 062 063 /** 064 * @openwire:property version=1 cache=true 065 */ 066 public ProducerId getProducerId() { 067 return producerId; 068 } 069 070 public void setProducerId(ProducerId producerId) { 071 this.producerId = producerId; 072 } 073 074 /** 075 * @openwire:property version=1 cache=true 076 */ 077 public ActiveMQDestination getDestination() { 078 return destination; 079 } 080 081 public void setDestination(ActiveMQDestination destination) { 082 this.destination = destination; 083 } 084 085 public RemoveInfo createRemoveCommand() { 086 RemoveInfo command = new RemoveInfo(getProducerId()); 087 command.setResponseRequired(isResponseRequired()); 088 return command; 089 } 090 091 /** 092 * The route of brokers the command has moved through. 093 * 094 * @openwire:property version=1 cache=true 095 */ 096 public BrokerId[] getBrokerPath() { 097 return brokerPath; 098 } 099 100 public void setBrokerPath(BrokerId[] brokerPath) { 101 this.brokerPath = brokerPath; 102 } 103 104 public Response visit(CommandVisitor visitor) throws Exception { 105 return visitor.processAddProducer(this); 106 } 107 108 /** 109 * If the broker should dispatch messages from this producer async. Since 110 * sync dispatch could potentally block the producer thread, this could be 111 * an important setting for the producer. 112 * 113 * @openwire:property version=2 114 */ 115 public boolean isDispatchAsync() { 116 return dispatchAsync; 117 } 118 119 public void setDispatchAsync(boolean dispatchAsync) { 120 this.dispatchAsync = dispatchAsync; 121 } 122 123 /** 124 * Used to configure the producer window size. A producer will send up to 125 * the configured window size worth of payload data to the broker before 126 * waiting for an Ack that allows him to send more. 127 * 128 * @openwire:property version=3 129 */ 130 public int getWindowSize() { 131 return windowSize; 132 } 133 134 public void setWindowSize(int windowSize) { 135 this.windowSize = windowSize; 136 } 137 138 }