|
ActiveMQ example source code file (ActiveMQDestination.java)
The ActiveMQ ActiveMQDestination.java source code/** * 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.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.StringTokenizer; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Queue; import javax.jms.TemporaryQueue; import javax.jms.TemporaryTopic; import javax.jms.Topic; import org.apache.activemq.jndi.JNDIBaseStorable; import org.apache.activemq.util.IntrospectionSupport; import org.apache.activemq.util.URISupport; /** * @openwire:marshaller * */ public abstract class ActiveMQDestination extends JNDIBaseStorable implements DataStructure, Destination, Externalizable, Comparable { public static final String PATH_SEPERATOR = "."; public static final char COMPOSITE_SEPERATOR = ','; public static final byte QUEUE_TYPE = 0x01; public static final byte TOPIC_TYPE = 0x02; public static final byte TEMP_MASK = 0x04; public static final byte TEMP_TOPIC_TYPE = TOPIC_TYPE | TEMP_MASK; public static final byte TEMP_QUEUE_TYPE = QUEUE_TYPE | TEMP_MASK; public static final String QUEUE_QUALIFIED_PREFIX = "queue://"; public static final String TOPIC_QUALIFIED_PREFIX = "topic://"; public static final String TEMP_QUEUE_QUALIFED_PREFIX = "temp-queue://"; public static final String TEMP_TOPIC_QUALIFED_PREFIX = "temp-topic://"; public static final String TEMP_DESTINATION_NAME_PREFIX = "ID:"; private static final long serialVersionUID = -3885260014960795889L; protected String physicalName; protected transient ActiveMQDestination[] compositeDestinations; protected transient String[] destinationPaths; protected transient boolean isPattern; protected transient int hashValue; protected Map<String, String> options; public ActiveMQDestination() { } protected ActiveMQDestination(String name) { setPhysicalName(name); } public ActiveMQDestination(ActiveMQDestination composites[]) { setCompositeDestinations(composites); } // static helper methods for working with destinations // ------------------------------------------------------------------------- public static ActiveMQDestination createDestination(String name, byte defaultType) { if (name.startsWith(QUEUE_QUALIFIED_PREFIX)) { return new ActiveMQQueue(name.substring(QUEUE_QUALIFIED_PREFIX.length())); } else if (name.startsWith(TOPIC_QUALIFIED_PREFIX)) { return new ActiveMQTopic(name.substring(TOPIC_QUALIFIED_PREFIX.length())); } else if (name.startsWith(TEMP_QUEUE_QUALIFED_PREFIX)) { return new ActiveMQTempQueue(name.substring(TEMP_QUEUE_QUALIFED_PREFIX.length())); } else if (name.startsWith(TEMP_TOPIC_QUALIFED_PREFIX)) { return new ActiveMQTempTopic(name.substring(TEMP_TOPIC_QUALIFED_PREFIX.length())); } switch (defaultType) { case QUEUE_TYPE: return new ActiveMQQueue(name); case TOPIC_TYPE: return new ActiveMQTopic(name); case TEMP_QUEUE_TYPE: return new ActiveMQTempQueue(name); case TEMP_TOPIC_TYPE: return new ActiveMQTempTopic(name); default: throw new IllegalArgumentException("Invalid default destination type: " + defaultType); } } public static ActiveMQDestination transform(Destination dest) throws JMSException { if (dest == null) { return null; } if (dest instanceof ActiveMQDestination) { return (ActiveMQDestination)dest; } if (dest instanceof Queue && dest instanceof Topic) { String queueName = ((Queue) dest).getQueueName(); String topicName = ((Topic) dest).getTopicName(); if (queueName != null && topicName == null) { return new ActiveMQQueue(queueName); } else if (queueName == null && topicName != null) { return new ActiveMQTopic(topicName); } throw new JMSException("Could no disambiguate on queue|Topic-name totransform pollymorphic destination into a ActiveMQ destination: " + dest); } if (dest instanceof TemporaryQueue) { return new ActiveMQTempQueue(((TemporaryQueue)dest).getQueueName()); } if (dest instanceof TemporaryTopic) { return new ActiveMQTempTopic(((TemporaryTopic)dest).getTopicName()); } if (dest instanceof Queue) { return new ActiveMQQueue(((Queue)dest).getQueueName()); } if (dest instanceof Topic) { return new ActiveMQTopic(((Topic)dest).getTopicName()); } throw new JMSException("Could not transform the destination into a ActiveMQ destination: " + dest); } public static int compare(ActiveMQDestination destination, ActiveMQDestination destination2) { if (destination == destination2) { return 0; } if (destination == null) { return -1; } else if (destination2 == null) { return 1; } else { if (destination.isQueue() == destination2.isQueue()) { return destination.getPhysicalName().compareTo(destination2.getPhysicalName()); } else { return destination.isQueue() ? -1 : 1; } } } public int compareTo(Object that) { if (that instanceof ActiveMQDestination) { return compare(this, (ActiveMQDestination)that); } if (that == null) { return 1; } else { return getClass().getName().compareTo(that.getClass().getName()); } } public boolean isComposite() { return compositeDestinations != null; } public ActiveMQDestination[] getCompositeDestinations() { return compositeDestinations; } public void setCompositeDestinations(ActiveMQDestination[] destinations) { this.compositeDestinations = destinations; this.destinationPaths = null; this.hashValue = 0; this.isPattern = false; StringBuffer sb = new StringBuffer(); for (int i = 0; i < destinations.length; i++) { if (i != 0) { sb.append(COMPOSITE_SEPERATOR); } if (getDestinationType() == destinations[i].getDestinationType()) { sb.append(destinations[i].getPhysicalName()); } else { sb.append(destinations[i].getQualifiedName()); } } physicalName = sb.toString(); } public String getQualifiedName() { if (isComposite()) { return physicalName; } return getQualifiedPrefix() + physicalName; } protected abstract String getQualifiedPrefix(); /** * @openwire:property version=1 */ public String getPhysicalName() { return physicalName; } public void setPhysicalName(String physicalName) { final int len = physicalName.length(); // options offset int p = -1; boolean composite = false; for (int i = 0; i < len; i++) { char c = physicalName.charAt(i); if (c == '?') { p = i; break; } if (c == COMPOSITE_SEPERATOR) { // won't be wild card isPattern = false; composite = true; } else if (!composite && (c == '*' || c == '>')) { isPattern = true; } } // Strip off any options if (p >= 0) { String optstring = physicalName.substring(p + 1); physicalName = physicalName.substring(0, p); try { options = URISupport.parseQuery(optstring); } catch (URISyntaxException e) { throw new IllegalArgumentException("Invalid destination name: " + physicalName + ", it's options are not encoded properly: " + e); } } this.physicalName = physicalName; this.destinationPaths = null; this.hashValue = 0; if (composite) { // Check to see if it is a composite. Set<String> l = new HashSet Other ActiveMQ examples (source code examples)Here is a short list of links related to this ActiveMQ ActiveMQDestination.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.