added more tests for using a remote schema using the nice new URLs

git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@547211 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
James Strachan 2007-06-14 10:49:36 +00:00
parent 8a4fcd1934
commit 67310ad7dd
10 changed files with 254 additions and 104 deletions

View File

@ -0,0 +1,8 @@
# resolve remote XSD documents to local classpath schema
http\://activemq.apache.org/schema/activemq-core.xsd = activemq.xsd
http\://activemq.apache.org/schema/activemq-core-5.0.xsd = activemq.xsd
# attempt to resolve the namespace URI to a schema if no XSD is mentioned in the doc
# TODO this is EXPERIMENTAL - it might not actually be used!
http\://activemq.org/config/1.0=activemq.xsd
http\://activemq.org/config/1.0/1.0.xsd=activemq.xsd

View File

@ -17,17 +17,16 @@
*/
package org.apache.activemq.spring;
import junit.framework.Assert;
import javax.jms.Message;
import javax.jms.MessageListener;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
public class ConsumerBean extends Assert implements MessageListener {
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory
.getLog(ConsumerBean.class);
private List messages = new ArrayList();
private Object semaphore;
private boolean verbose;
@ -41,7 +40,7 @@ public class ConsumerBean extends Assert implements MessageListener {
/**
* Constructor, initialized semaphore object.
*
*
* @param semaphore
*/
public ConsumerBean(Object semaphore) {
@ -59,7 +58,7 @@ public class ConsumerBean extends Assert implements MessageListener {
/**
* Method implemented from MessageListener interface.
*
*
* @param message
*/
public synchronized void onMessage(Message message) {
@ -97,7 +96,7 @@ public class ConsumerBean extends Assert implements MessageListener {
/**
* Used to wait for a message to arrive given a particular message count.
*
*
* @param messageCount
*/
public void waitForMessagesToArrive(int messageCount) {
@ -142,7 +141,7 @@ public class ConsumerBean extends Assert implements MessageListener {
/**
* Identifies if the message is empty.
*
*
* @return
*/
protected boolean hasReceivedMessage() {
@ -151,7 +150,7 @@ public class ConsumerBean extends Assert implements MessageListener {
/**
* Identifies if the message count has reached the total size of message.
*
*
* @param messageCount
* @return
*/

View File

@ -0,0 +1,24 @@
/**
*
* 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.spring;
public class Spring2XmlNamespacesTest extends SpringTestSupport {
public void testUsingSpringXmlNamespacesWithPublicXsdLocation() throws Exception {
assertSenderConfig("spring-embedded-xbean.xml");
}
}

View File

@ -0,0 +1,24 @@
/**
*
* 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.spring;
public class Spring2XmlNamespacesWithoutRemoteSchemaTest extends SpringTestSupport {
public void testUsingSpring2NamespacesForANonExistingXsdDocument() throws Exception {
assertSenderConfig("spring-embedded-xbean-noversion.xml");
}
}

View File

@ -15,7 +15,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.spring;
import org.apache.commons.logging.Log;
@ -33,7 +32,6 @@ import javax.jms.Session;
public class SpringConsumer extends ConsumerBean implements MessageListener {
private static final Log log = LogFactory.getLog(SpringConsumer.class);
private JmsTemplate template;
private String myId = "foo";
private Destination destination;
@ -68,14 +66,16 @@ public class SpringConsumer extends ConsumerBean implements MessageListener {
}
}
public void stop() throws JMSException {
if( consumer!=null )
consumer.close();
if( session!=null )
session.close();
if( connection!=null )
connection.close();
if (consumer != null) {
consumer.close();
}
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
public void onMessage(Message message) {

View File

@ -27,15 +27,12 @@ import javax.jms.Session;
import javax.jms.TextMessage;
public class SpringProducer {
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory
.getLog(SpringProducer.class);
private JmsTemplate template;
private Destination destination;
private int messageCount = 10;
public void start() throws JMSException {
for (int i = 0; i < messageCount; i++) {
final String text = "Text for message: " + i;

View File

@ -15,27 +15,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.spring;
import java.util.Iterator;
import java.util.List;
import junit.framework.TestCase;
import org.apache.activemq.broker.BrokerService;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest extends TestCase {
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory
.getLog(SpringTest.class);
protected AbstractApplicationContext context;
protected SpringConsumer consumer;
protected SpringProducer producer;
public class SpringTest extends SpringTestSupport {
/**
* Make sure that brokers are being pooled properly.
*
@ -43,7 +28,7 @@ public class SpringTest extends TestCase {
*/
public void testSenderWithSpringXmlEmbeddedPooledBrokerConfiguredViaXml() throws Exception {
String config = "spring-embedded-pooled.xml";
Thread.currentThread().setContextClassLoader(SpringTest.class.getClassLoader());
ClassPathXmlApplicationContext context1 = new ClassPathXmlApplicationContext(config);
@ -51,7 +36,7 @@ public class SpringTest extends TestCase {
assertNotNull(bs1);
BrokerService bs2 = (BrokerService) context1.getBean("broker2");
assertNotNull(bs1);
// It should be the same broker;
assertEquals(bs1, bs2);
@ -66,18 +51,17 @@ public class SpringTest extends TestCase {
// It should be the same broker;
assertEquals(bs1, bs3);
assertEquals(bs1, bs4);
// And it should be started.
assertTrue(bs1.isStarted());
// should still be started asfter the 2nd context closes.
context2.close();
assertTrue(bs1.isStarted());
// Should stop once all contexts close.
context1.close();
assertFalse(bs1.isStarted());
}
/**
@ -113,7 +97,7 @@ public class SpringTest extends TestCase {
String config = "spring-jndi.xml";
assertSenderConfig(config);
}
/**
* Spring configured test where in the connection context is set to use
* an embedded broker. Configuration file is /resources/spring-embedded.xml
@ -125,11 +109,11 @@ public class SpringTest extends TestCase {
String config = "spring-embedded.xml";
assertSenderConfig(config);
}
/**
* Spring configured test case that tests the remotely deployed xsd
* http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-SNAPSHOT.xsd
*
*
* @throws Exception
*/
public void testSenderWithSpringXmlUsingSpring2NamespacesWithEmbeddedBrokerConfiguredViaXml() throws Exception {
@ -146,62 +130,4 @@ public class SpringTest extends TestCase {
String config = "spring-embedded-xbean-local.xml";
assertSenderConfig(config);
}
/**
* assert method that is used by all the test method to send and receive messages
* based on each spring configuration.
*
* @param config
* @throws Exception
*/
protected void assertSenderConfig(String config) throws Exception {
Thread.currentThread().setContextClassLoader(SpringTest.class.getClassLoader());
context = new ClassPathXmlApplicationContext(config);
consumer = (SpringConsumer) context.getBean("consumer");
assertTrue("Found a valid consumer", consumer != null);
consumer.start();
// Wait a little to drain any left over messages.
Thread.sleep(1000);
consumer.flushMessages();
producer = (SpringProducer) context.getBean("producer");
assertTrue("Found a valid producer", producer != null);
producer.start();
// lets sleep a little to give the JMS time to dispatch stuff
consumer.waitForMessagesToArrive(producer.getMessageCount());
// now lets check that the consumer has received some messages
List messages = consumer.flushMessages();
log.info("Consumer has received messages....");
for (Iterator iter = messages.iterator(); iter.hasNext();) {
Object message = iter.next();
log.info("Received: " + message);
}
assertEquals("Message count", producer.getMessageCount(), messages.size());
}
/**
* Clean up method.
*
* @throws Exception
*/
protected void tearDown() throws Exception {
if (consumer != null) {
consumer.stop();
}
if (producer != null) {
producer.stop();
}
if (context != null) {
context.destroy();
}
}
}

View File

@ -0,0 +1,92 @@
/**
*
* 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.spring;
import junit.framework.TestCase;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Iterator;
import java.util.List;
/**
* @version $Revision: 1.1 $
*/
public class SpringTestSupport extends TestCase {
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(SpringTest.class);
protected AbstractApplicationContext context;
protected SpringConsumer consumer;
protected SpringProducer producer;
/**
* assert method that is used by all the test method to send and receive messages
* based on each spring configuration.
*
* @param config
* @throws Exception
*/
protected void assertSenderConfig(String config) throws Exception {
Thread.currentThread().setContextClassLoader(SpringTest.class.getClassLoader());
context = new ClassPathXmlApplicationContext(config);
consumer = (SpringConsumer) context.getBean("consumer");
assertTrue("Found a valid consumer", consumer != null);
consumer.start();
// Wait a little to drain any left over messages.
Thread.sleep(1000);
consumer.flushMessages();
producer = (SpringProducer) context.getBean("producer");
assertTrue("Found a valid producer", producer != null);
producer.start();
// lets sleep a little to give the JMS time to dispatch stuff
consumer.waitForMessagesToArrive(producer.getMessageCount());
// now lets check that the consumer has received some messages
List messages = consumer.flushMessages();
log.info("Consumer has received messages....");
for (Iterator iter = messages.iterator(); iter.hasNext();) {
Object message = iter.next();
log.info("Received: " + message);
}
assertEquals("Message count", producer.getMessageCount(), messages.size());
}
/**
* Clean up method.
*
* @throws Exception
*/
protected void tearDown() throws Exception {
if (consumer != null) {
consumer.stop();
}
if (producer != null) {
producer.stop();
}
if (context != null) {
context.destroy();
}
}
}

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<!-- START SNIPPET: spring -->
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.org/config/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.org/config/1.0 http://activemq.apache.org/schema/activemq-core.xsd">
<!-- lets create an embedded ActiveMQ Broker -->
<amq:broker useJmx="false" persistent="false">
<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:0" />
</amq:transportConnectors>
</amq:broker>
<!-- ActiveMQ destinations to use -->
<amq:queue id="destination" physicalName="org.apache.activemq.spring.Test.spring.embedded"/>
<!-- JMS ConnectionFactory to use, configuring the embedded broker using XML -->
<amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost"/>
<!-- Spring JMS Template -->
<bean id="myJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<!-- lets wrap in a pool to avoid creating a connection per send -->
<bean class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory">
<ref local="jmsFactory" />
</property>
</bean>
</property>
</bean>
<bean id="consumerJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsFactory"/>
</bean>
<!-- a sample POJO which uses a Spring JmsTemplate -->
<bean id="producer" class="org.apache.activemq.spring.SpringProducer">
<property name="template">
<ref bean="myJmsTemplate"></ref>
</property>
<property name="destination">
<ref bean="destination" />
</property>
<property name="messageCount">
<value>10</value>
</property>
</bean>
<!-- a sample POJO consumer -->
<bean id="consumer" class="org.apache.activemq.spring.SpringConsumer">
<property name="template" ref="consumerJmsTemplate"/>
<property name="destination" ref="destination"/>
</bean>
</beans>
<!-- END SNIPPET: spring -->

View File

@ -22,7 +22,7 @@
xmlns:amq="http://activemq.org/config/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.org/config/1.0 http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-5.0-SNAPSHOT.xsd">
http://activemq.org/config/1.0 http://activemq.apache.org/snapshot-schema/activemq-core-5.0-SNAPSHOT.xsd">
<!-- lets create an embedded ActiveMQ Broker -->
<amq:broker useJmx="false" persistent="false">