Backported spring configuration fix to 4.1.

https://issues.apache.org/activemq/browse/AMQ-1276

git-svn-id: https://svn.apache.org/repos/asf/activemq/branches/activemq-4.1@547274 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Adrian T. Co 2007-06-14 15:18:31 +00:00
parent 4161819944
commit e5a41a148a
8 changed files with 239 additions and 81 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-4.1.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

@ -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

@ -70,12 +70,15 @@ 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

@ -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.
*
@ -146,62 +131,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-4.1-SNAPSHOT.xsd">
http://activemq.org/config/1.0 http://activemq.apache.org/snapshot-schema/activemq-core-4.1-SNAPSHOT.xsd">
<!-- lets create an embedded ActiveMQ Broker -->
<amq:broker useJmx="false" persistent="false">