/** * 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.command; import java.io.IOException; import java.util.Properties; import org.apache.activemq.state.CommandVisitor; import org.apache.activemq.util.MarshallingSupport; /** * When a client connects to a broker, the broker send the client a BrokerInfo * so that the client knows which broker node he's talking to and also any peers * that the node has in his cluster. This is the broker helping the client out * in discovering other nodes in the cluster. * * @openwire:marshaller code="2" * */ public class BrokerInfo extends BaseCommand { private static final String PASSIVE_SLAVE_KEY = "passiveSlave"; public static final byte DATA_STRUCTURE_TYPE = CommandTypes.BROKER_INFO; BrokerId brokerId; String brokerURL; boolean slaveBroker; boolean masterBroker; boolean faultTolerantConfiguration; boolean networkConnection; boolean duplexConnection; BrokerInfo peerBrokerInfos[]; String brokerName; long connectionId; String brokerUploadUrl; String networkProperties; transient int refCount = 0; public BrokerInfo copy() { BrokerInfo copy = new BrokerInfo(); copy(copy); return copy; } private void copy(BrokerInfo copy) { super.copy(copy); copy.brokerId = this.brokerId; copy.brokerURL = this.brokerURL; copy.slaveBroker = this.slaveBroker; copy.masterBroker = this.masterBroker; copy.faultTolerantConfiguration = this.faultTolerantConfiguration; copy.networkConnection = this.networkConnection; copy.duplexConnection = this.duplexConnection; copy.peerBrokerInfos = this.peerBrokerInfos; copy.brokerName = this.brokerName; copy.connectionId = this.connectionId; copy.brokerUploadUrl = this.brokerUploadUrl; copy.networkProperties = this.networkProperties; } @Override public boolean isBrokerInfo() { return true; } @Override public byte getDataStructureType() { return DATA_STRUCTURE_TYPE; } /** * @openwire:property version=1 cache=true */ public BrokerId getBrokerId() { return brokerId; } public void setBrokerId(BrokerId brokerId) { this.brokerId = brokerId; } /** * @openwire:property version=1 */ public String getBrokerURL() { return brokerURL; } public void setBrokerURL(String brokerURL) { this.brokerURL = brokerURL; } /** * @openwire:property version=1 testSize=0 */ public BrokerInfo[] getPeerBrokerInfos() { return peerBrokerInfos; } public void setPeerBrokerInfos(BrokerInfo[] peerBrokerInfos) { this.peerBrokerInfos = peerBrokerInfos; } /** * @openwire:property version=1 */ public String getBrokerName() { return brokerName; } public void setBrokerName(String brokerName) { this.brokerName = brokerName; } @Override public Response visit(CommandVisitor visitor) throws Exception { return visitor.processBrokerInfo(this); } /** * @openwire:property version=1 */ public boolean isSlaveBroker() { return slaveBroker; } public void setSlaveBroker(boolean slaveBroker) { this.slaveBroker = slaveBroker; } /** * @openwire:property version=1 */ public boolean isMasterBroker() { return masterBroker; } /** * @param masterBroker The masterBroker to set. */ public void setMasterBroker(boolean masterBroker) { this.masterBroker = masterBroker; } /** * @openwire:property version=1 * @return Returns the faultTolerantConfiguration. */ public boolean isFaultTolerantConfiguration() { return faultTolerantConfiguration; } /** * @param faultTolerantConfiguration The faultTolerantConfiguration to set. */ public void setFaultTolerantConfiguration(boolean faultTolerantConfiguration) { this.faultTolerantConfiguration = faultTolerantConfiguration; } /** * @openwire:property version=2 * @return the duplexConnection */ public boolean isDuplexConnection() { return this.duplexConnection; } /** * @param duplexConnection the duplexConnection to set */ public void setDuplexConnection(boolean duplexConnection) { this.duplexConnection = duplexConnection; } /** * @openwire:property version=2 * @return the networkConnection */ public boolean isNetworkConnection() { return this.networkConnection; } /** * @param networkConnection the networkConnection to set */ public void setNetworkConnection(boolean networkConnection) { this.networkConnection = networkConnection; } /** * The broker assigns a each connection it accepts a connection id. * * @openwire:property version=2 */ public long getConnectionId() { return connectionId; } public void setConnectionId(long connectionId) { this.connectionId = connectionId; } /** * The URL to use when uploading BLOBs to the broker or some other external * file/http server * * @openwire:property version=3 */ public String getBrokerUploadUrl() { return brokerUploadUrl; } public void setBrokerUploadUrl(String brokerUploadUrl) { this.brokerUploadUrl = brokerUploadUrl; } /** * @openwire:property version=3 cache=false * @return the networkProperties */ public String getNetworkProperties() { return this.networkProperties; } /** * @param networkProperties the networkProperties to set */ public void setNetworkProperties(String networkProperties) { this.networkProperties = networkProperties; } public boolean isPassiveSlave() { boolean result = false; Properties props = getProperties(); if (props != null) { result = Boolean.parseBoolean(props.getProperty(PASSIVE_SLAVE_KEY, "false")); } return result; } public void setPassiveSlave(boolean value) { Properties props = new Properties(); props.put(PASSIVE_SLAVE_KEY, Boolean.toString(value)); try { this.networkProperties=MarshallingSupport.propertiesToString(props); } catch (IOException e) { e.printStackTrace(); } } public Properties getProperties() { Properties result = null; try { result = MarshallingSupport.stringToProperties(getNetworkProperties()); } catch (IOException e) { e.printStackTrace(); } return result; } public int getRefCount() { return refCount; } public void incrementRefCount() { refCount++; } public int decrementRefCount() { return --refCount; } }