summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2010-06-25 13:51:32 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2010-06-25 13:51:32 +0000
commit0d92262418a1623fd1755a6cedd99e8b83c6031f (patch)
tree5b956d741b9ba858a44fe9ec36d3161911055b49 /qpid/java
parent5a739e2e7ecfec0a25fc6347efe4590115cc51f0 (diff)
downloadqpid-python-0d92262418a1623fd1755a6cedd99e8b83c6031f.tar.gz
QPID-2696
Modified the PropertiesFileInitialContextFactory to allow the new addressing strings to be specified in the jndi properties file. Downgraded some "info" log messages in AMQDestination to "debug". Added a test cases to cover the issue reported in the JIRA. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@957942 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java6
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java42
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java20
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java49
4 files changed, 93 insertions, 24 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java
index a5c6f5f967..b6e433f532 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQAnyDestination.java
@@ -23,6 +23,7 @@ package org.apache.qpid.client;
import java.net.URISyntaxException;
import org.apache.qpid.framing.AMQShortString;
+import org.apache.qpid.messaging.Address;
import org.apache.qpid.url.BindingURL;
/**
@@ -46,6 +47,11 @@ public class AMQAnyDestination extends AMQDestination
super(str);
}
+ public AMQAnyDestination(Address addr) throws Exception
+ {
+ super(addr);
+ }
+
public AMQAnyDestination(AMQShortString exchangeName,AMQShortString exchangeClass,
AMQShortString routingKey,boolean isExclusive,
boolean isAutoDelete, AMQShortString queueName,
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
index e1f29087a4..55812f8e01 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
@@ -147,6 +147,8 @@ public abstract class AMQDestination implements Destination, Referenceable
defaultDestSyntax = DestSyntax.getSyntaxType(
System.getProperty(ClientProperties.DEST_SYNTAX,
DestSyntax.ADDR.toString()));
+
+
}
protected AMQDestination(Address address) throws Exception
@@ -154,14 +156,18 @@ public abstract class AMQDestination implements Destination, Referenceable
this._address = address;
getInfoFromAddress();
_destSyntax = DestSyntax.ADDR;
- _logger.info("Based on " + address + " the selected destination syntax is " + _destSyntax);
+ _logger.debug("Based on " + address + " the selected destination syntax is " + _destSyntax);
}
protected AMQDestination(String str) throws URISyntaxException
{
if (str.startsWith("BURL:") ||
(!str.startsWith("ADDR:") && defaultDestSyntax == DestSyntax.BURL))
- {
+ {
+ if (str.startsWith("BURL:"))
+ {
+ str = str.substring(5,str.length());
+ }
_destSyntax = DestSyntax.BURL;
getInfoFromBindingURL(new AMQBindingURL(str));
}
@@ -180,7 +186,7 @@ public abstract class AMQDestination implements Destination, Referenceable
throw ex;
}
}
- _logger.info("Based on " + str + " the selected destination syntax is " + _destSyntax);
+ _logger.debug("Based on " + str + " the selected destination syntax is " + _destSyntax);
}
//retained for legacy support
@@ -188,7 +194,7 @@ public abstract class AMQDestination implements Destination, Referenceable
{
getInfoFromBindingURL(binding);
_destSyntax = DestSyntax.BURL;
- _logger.info("Based on " + binding + " the selected destination syntax is " + _destSyntax);
+ _logger.debug("Based on " + binding + " the selected destination syntax is " + _destSyntax);
}
protected void getInfoFromBindingURL(BindingURL binding)
@@ -270,7 +276,11 @@ public abstract class AMQDestination implements Destination, Referenceable
_bindingKeys = bindingKeys == null || bindingKeys.length == 0 ? new AMQShortString[0] : bindingKeys;
_destSyntax = DestSyntax.BURL;
_browseOnly = browseOnly;
- _logger.info("Based on " + toString() + " the selected destination syntax is " + _destSyntax);
+
+ if (_logger.isDebugEnabled())
+ {
+ _logger.debug("Based on " + toString() + " the selected destination syntax is " + _destSyntax);
+ }
}
public DestSyntax getDestSyntax()
@@ -642,6 +652,24 @@ public abstract class AMQDestination implements Destination, Referenceable
}
}
+ public static Destination createDestination(String str) throws Exception
+ {
+ if (str.startsWith("BURL:") ||
+ (!str.startsWith("ADDR:") && defaultDestSyntax == DestSyntax.BURL))
+ {
+ if (str.startsWith("BURL:"))
+ {
+ str = str.substring(5,str.length());
+ }
+ return createDestination(new AMQBindingURL(str));
+ }
+ else
+ {
+ Address address = createAddressFromString(str);
+ return new AMQAnyDestination(address);
+ }
+ }
+
// ----- new address syntax -----------
public static class Binding
@@ -764,11 +792,11 @@ public abstract class AMQDestination implements Destination, Referenceable
this._routingKey = rk;
}
- private Address createAddressFromString(String str)
+ private static Address createAddressFromString(String str)
{
if (str.startsWith("ADDR:"))
{
- str = str.substring(str.indexOf(':')+1,str.length());
+ str = str.substring(5,str.length());
}
return Address.parse(str);
}
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java b/qpid/java/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java
index 8b702c008f..f0f9a9840c 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java
@@ -233,27 +233,15 @@ public class PropertiesFileInitialContextFactory implements InitialContextFactor
/**
* Factory method to create new Destination instances from an AMQP BindingURL
*/
- protected Destination createDestination(String bindingURL)
+ protected Destination createDestination(String str)
{
- AMQBindingURL binding;
try
{
- binding = new AMQBindingURL(bindingURL);
+ return AMQDestination.createDestination(str);
}
- catch (URISyntaxException urlse)
+ catch (Exception e)
{
- _logger.warn("Unable to create destination:" + urlse, urlse);
-
- return null;
- }
-
- try
- {
- return AMQDestination.createDestination(binding);
- }
- catch (IllegalArgumentException iaw)
- {
- _logger.warn("Binding: '" + binding + "' not supported");
+ _logger.warn("Unable to create destination:" + e, e);
return null;
}
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java
index d61388b927..d9754def3a 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java
@@ -23,19 +23,24 @@ package org.apache.qpid.test.client.destination;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.Map;
import javax.jms.Connection;
+import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.Context;
import org.apache.qpid.client.AMQAnyDestination;
import org.apache.qpid.client.AMQDestination;
import org.apache.qpid.client.AMQSession_0_10;
import org.apache.qpid.client.messaging.address.Node.ExchangeNode;
import org.apache.qpid.client.messaging.address.Node.QueueNode;
+import org.apache.qpid.jndi.PropertiesFileInitialContextFactory;
import org.apache.qpid.messaging.Address;
import org.apache.qpid.test.utils.QpidBrokerTestCase;
import org.slf4j.Logger;
@@ -79,7 +84,7 @@ public class AddressBasedDestinationTest extends QpidBrokerTestCase
AMQDestination dest = new AMQAnyDestination(addr1);
try
{
- cons = jmsSession.createConsumer(dest);
+ cons = jmsSession.createConsumer(dest);
}
catch(JMSException e)
{
@@ -398,6 +403,48 @@ public class AddressBasedDestinationTest extends QpidBrokerTestCase
}
}
+ public void testLoadingFromPropertiesFile() throws Exception
+ {
+ Hashtable<String,String> map = new Hashtable<String,String>();
+ map.put("destination.myQueue1", "ADDR:my-queue/hello; {create: always, node: " +
+ "{x-declare: {auto-delete: true,'qpid.max_size': 1000}}}");
+
+ map.put("destination.myQueue2", "ADDR:my-queue2; { create: receiver }");
+
+ map.put("destination.myQueue3", "BURL:direct://amq.direct/my-queue3?routingkey='test'");
+
+ PropertiesFileInitialContextFactory props = new PropertiesFileInitialContextFactory();
+ Context ctx = props.getInitialContext(map);
+
+ AMQDestination dest1 = (AMQDestination)ctx.lookup("myQueue1");
+ AMQDestination dest2 = (AMQDestination)ctx.lookup("myQueue2");
+ AMQDestination dest3 = (AMQDestination)ctx.lookup("myQueue3");
+
+ Session jmsSession = _connection.createSession(false,Session.CLIENT_ACKNOWLEDGE);
+ MessageConsumer cons1 = jmsSession.createConsumer(dest1);
+ MessageConsumer cons2 = jmsSession.createConsumer(dest2);
+ MessageConsumer cons3 = jmsSession.createConsumer(dest3);
+
+ assertTrue("Destination1 was not created as expected",(
+ (AMQSession_0_10)jmsSession).isQueueExist(dest1,(QueueNode)dest1.getSourceNode(), true));
+
+ assertTrue("Destination1 was not bound as expected",(
+ (AMQSession_0_10)jmsSession).isQueueBound("",
+ dest1.getAddressName(),dest1.getAddressName(), null));
+
+ assertTrue("Destination2 was not created as expected",(
+ (AMQSession_0_10)jmsSession).isQueueExist(dest2,(QueueNode)dest2.getSourceNode(), true));
+
+ assertTrue("Destination2 was not bound as expected",(
+ (AMQSession_0_10)jmsSession).isQueueBound("",
+ dest2.getAddressName(),dest2.getAddressName(), null));
+
+ MessageProducer producer = jmsSession.createProducer(dest3);
+ producer.send(jmsSession.createTextMessage("Hello"));
+ TextMessage msg = (TextMessage)cons3.receive(1000);
+ assertEquals("Destination3 was not created as expected.",msg.getText(),"Hello");
+ }
+
/*public void testBindQueueForXMLExchange() throws Exception
{
if (!isCppBroker())