I am trying to use the mock framework, but can't seem to get
resultEndpoint.expectedBodiesReceived(messageOutputBody); to work. I keep
getting ...
*<exception class="java.lang.IndexOutOfBoundsException">
<message>
<![CDATA[Index: 0, Size: 0]]>
</message>
<full-stacktrace>
<![CDATA[java.lang.IndexOutOfBoundsException: Index: 0, Size:
0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at
org.apache.camel.component.mock.MockEndpoint$3.run(MockEndpoint.java:325)
at
org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied(MockEndpoint.java:247)
at
org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied(MockEndpoint.java:212)
at
org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied(MockEndpoint.java:122)
at
com.servepath.changerequest.ChangeRequestTest.testCreateValidRequest(ChangeRequestTest.java:103)
*
*Here is my test method:*
* public static final String MOCK_OUTPUT_DESTINATION_URI =
"mock:outputDestinationURI";
public static final String MOCK_OUTPUT_ERROR_DESTINATION_URI =
"mock:outputErrorDestinationURI";
@EndpointInject(uri = MOCK_OUTPUT_DESTINATION_URI)
public MockEndpoint resultEndpoint;
@EndpointInject(uri = MOCK_OUTPUT_ERROR_DESTINATION_URI)
public MockEndpoint resultErrorEndpoint;
@Test(groups = {"functional"})
@Parameters({"inputDestinationURI", "messageInputBody",
"messageOutputBody"})
public void testCreateValidRequest(@Optional String inputDestinationURI,
@Optional String messageInputBody,
@Optional String messageOutputBody
)
throws Exception {
log.info("testCreateValidRequest");
resultEndpoint = MockEndpoint.resolve(camelContext,
MOCK_OUTPUT_DESTINATION_URI);
resultEndpoint.expectedMessageCount(1);
resultEndpoint.expectedBodiesReceived(messageOutputBody); //comment
this out, and it validates fine*
*
resultErrorEndpoint = MockEndpoint.resolve(camelContext,
MOCK_OUTPUT_ERROR_DESTINATION_URI);
resultErrorEndpoint.expectedMessageCount(0);
// setup RouteBuilder...
setRoutes(inputDestinationURI, changeRequestInputTransformer,
MOCK_OUTPUT_DESTINATION_URI);
// Create and Send message to input queue
createMessage(inputDestinationURI, messageInputBody);
Assert.assertNotNull(resultEndpoint, "Should have a resultEndpoint
endpoint");
Assert.assertNotNull(resultErrorEndpoint, "Should have a
resultErrorEndpoint endpoint");
MockEndpoint.assertIsSatisfied(resultEndpoint, resultErrorEndpoint);
//**(ChangeRequestTest.java:103)*
*
log.debug("----------------------------------------------------");
}
*
Can you help with this?
On Sat, Sep 20, 2008 at 11:39 PM, Claus Ibsen <[EMAIL PROTECTED]> wrote:
> Hi
>
> 1)
> When you put you message on the "final destination" with .to("destination")
> you can just add the mock as well .to("mock:result", "destination");
>
> Kinda like the wire tap:
> http://activemq.apache.org/camel/wire-tap.html
>
> The order doesn't matter so you can use: .to("destination", "mock:result");
> instead
>
>
> 2)
> Or you could probably add an interceptor on the final destination:
>
> intercept("desintation").to("mock:result").proceed();
> // here is your regular routes
>
> proceed() makes sure the routing continues on the normal path. If you want
> it you can use .stop() to terminate the routing.
>
> BTW: proceed() is default in Camel 1.4+ so you can omit it:
> intercept("desintation").to("mock:result")
>
>
>
>
> Med venlig hilsen
>
> Claus Ibsen
> ......................................
> Silverbullet
> Skovsgårdsvænget 21
> 8362 Hørning
> Tlf. +45 2962 7576
> Web: www.silverbullet.dk
>
> -----Original Message-----
> From: Mick Knutson [mailto:[EMAIL PROTECTED]
> Sent: 21. september 2008 02:38
> To: [email protected]
> Subject: Re: testNG test harness for Camel, sending and receiving messages
>
> I started trying to use the mock, but it does not seem to work the way I
> envision.
>
> I have a message I create, that gets consumed by my transformer, then the
> transformer put the new message on another queue. So I need the final queue
> to be the mock. But I am not sure how to define the destination endpoint.
>
>
>
>
>
> On Fri, Sep 19, 2008 at 9:24 PM, Claus Ibsen <[EMAIL PROTECTED]> wrote:
>
> > Hi
> >
> > Camel has the mock endpoint to be used for unit testing.
> > http://activemq.apache.org/camel/mock.html
> >
> > It is used extensively in unit testing Camel itself and has great assert
> > methods for all kind of assertions.
> >
> > BTW: the producerTemplate can also return the response from Camel if its
> an
> > InOut exchange (request-reply such as a web service call etc.). Then you
> can
> > assert the returned payload if it's expected. You have to use requestBody
> > for InOut. sendBody is for InOnly.
> >
> > Object out = producerTemplate.requestBody("myEndpoint", "Hello World");
> > assertEquals("Bye World", out);
> >
> > But check out the mock endpoint it's a killer for unit testing with
> Camel.
> >
> > There are even some similar components for unit testing, however not used
> > as much:
> > http://activemq.apache.org/camel/dataset.html
> > for sending a lot of messages and expecting ordering
> >
> > And this one as well: Where you can get the message bodies from another
> > endpoint, such as a file or database.
> > http://activemq.apache.org/camel/test.html
> >
> >
> > But start with the mock endpoint!
> >
> >
> >
> > Med venlig hilsen
> >
> > Claus Ibsen
> > ......................................
> > Silverbullet
> > Skovsgårdsvænget 21
> > 8362 Hørning
> > Tlf. +45 2962 7576
> > Web: www.silverbullet.dk
> >
> > -----Original Message-----
> > From: Mick Knutson [mailto:[EMAIL PROTECTED]
> > Sent: 20. september 2008 03:54
> > To: [email protected]
> > Subject: Re: testNG test harness for Camel, sending and receiving
> messages
> >
> > I have added my baseCamelTestNGTest class below, along with my
> > implementation class because I want some design help.
> > My issue is that I seem to be able to use a parameter in testng to send
> my
> > initial message uri to start my process. But what I am not sure about, is
> > how to use a parameter in testng to define a channel to look for my test
> > message on, consume, and Assert the outcome.
> >
> >
> > *BaseCamelTestNG.class:*
> > *package com.servepath;
> >
> > import org.apache.camel.CamelTemplate;
> > import org.apache.camel.CamelContext;
> > import org.apache.camel.ProducerTemplate;
> > import org.apache.camel.builder.RouteBuilder;
> >
> >
> > import org.apache.camel.impl.DefaultCamelContext;
> > import org.apache.commons.logging.Log;
> > import org.apache.commons.logging.LogFactory;
> > import org.springframework.test.context.ContextConfiguration;
> > import org.springframework.beans.factory.annotation.Autowired;
> > import com.baselogic.test.SpringTestNGBase;
> > import com.servepath.gogrid.changerequest.ChangeRequestRouteBuilder;
> > import org.testng.annotations.*;
> >
> >
> > /**
> > * This is the base class for all my Camel Tests.
> > */
> > @ContextConfiguration(
> > locations = {"classpath:applicationContext-test.xml"}
> > )
> > public abstract class BaseCamelTestNGTest
> > extends SpringTestNGBase {
> >
> > public transient Log log = LogFactory.getLog(this.getClass());
> >
> >
> > @Autowired
> > protected CamelContext camelContext;
> >
> > //CamelTemplate camelTemplate;
> >
> >
> > @BeforeClass(groups = {"init"})
> > public void startCamel() {
> > try {
> >
> > log.debug("*****************************************************");
> > log.debug("Start Camel Context");
> > // create the camel context: // This is actually setup in the
> > camel-context.xml
> > //camelContext = new DefaultCamelContext();
> >
> > // add the routes to the camel Context.
> > setRoutes();
> >
> > // start Camel Context
> > // create a camel template for sending messages:
> > //camelTemplate = new CamelTemplate(camelContext);
> >
> > // start the camel context
> > camelContext.start();
> >
> > log.debug("*****************************************************");
> > } catch (Exception e) {
> > // this is an example -> don't handle exceptions:
> > e.printStackTrace();
> > }
> >
> > }//
> >
> > @AfterClass(groups = {"init"})
> > public void stopCamel() {
> > try {
> >
> > log.debug("----------------------------------------------------");
> > log.debug("Stop Camel Context");
> > //stop Camel Context
> > camelContext.stop();
> >
> > log.debug("----------------------------------------------------");
> > } catch (Exception e) {
> > // this is an example -> don't handle exceptions:
> > e.printStackTrace();
> > }
> > }//
> >
> >
> > /**
> > * Must add a route for each test.
> > */
> > public abstract void setRoutes()
> > throws Exception;
> >
> >
> > } // The End...
> >
> > *
> > *ChangeRequestTest.class:*
> > *package com.servepath.changerequest;
> >
> > import java.sql.Date;
> > import java.util.ArrayList;
> > import java.util.Collection;
> > import java.util.GregorianCalendar;
> > import java.util.HashMap;
> > import java.util.Map;
> > import java.net.URL;
> >
> > import javax.annotation.Resource;
> >
> > import org.springframework.beans.factory.InitializingBean;
> > import org.springframework.beans.factory.annotation.Autowired;
> > import org.springframework.beans.factory.annotation.Qualifier;
> > import org.springframework.test.context.ContextConfiguration;
> > import org.testng.Assert;
> > import org.testng.annotations.Test;
> > import org.testng.annotations.Parameters;
> > import org.testng.annotations.Optional;
> > import org.apache.camel.EndpointInject;
> > import org.apache.camel.ProducerTemplate;
> > import org.apache.camel.MessageDriven;
> > import org.apache.camel.Body;
> > import org.apache.camel.builder.RouteBuilder;
> > import org.apache.camel.component.mock.MockEndpoint;
> > import org.codehaus.jettison.json.JSONObject;
> > import com.servepath.gogrid.changerequest.ChangeRequestRouteBuilder;
> > import com.servepath.gogrid.changerequest.Constants;
> > import com.servepath.BaseCamelTestNGTest;
> >
> >
> > @ContextConfiguration(
> > locations = {"classpath:applicationContext-test.xml"}
> > )
> > public class ChangeRequestTest
> > extends BaseCamelTestNGTest
> > implements InitializingBean {
> >
> >
> > public ChangeRequestTest() {
> > super();
> > }
> >
> > @Override
> > public void prepareSettings() {
> > log.debug("prepareSettings called");
> > }
> >
> > @Override
> > public void setRoutes()
> > throws Exception {
> > // Add Routes to Camel Context
> > camelContext.addRoutes(new ChangeRequestRouteBuilder());
> > }//
> >
> >
> >
> //=======================================================================//
> > //===== Start the Unit Tests
> > ============================================//
> >
> >
> //=======================================================================//
> >
> > @EndpointInject(uri = "mock:foo")
> > protected MockEndpoint foo;
> >
> >
> > @Test(groups = {"functional"})
> > //@Parameters({ "customerId" })
> > @Parameters({ "inputDestinationURI", "outputDestinationURI",
> > "messageInputBody", "messageOutputBody" })
> > public void testCreateAndTransformJSONProvisionRequest(@Optional
> String
> > inputDestinationURI,
> > @Optional
> String
> > outputDestinationURI,
> > @Optional
> String
> > messageInputBody,
> > @Optional
> String
> > messageOutputBody
> > )
> > throws Exception {
> > log.debug("----------------------------------------------------");
> > log.info("["+inputDestinationURI+"]\n");
> > log.info("["+outputDestinationURI+"]\n");
> > log.info("["+messageInputBody+"]\n");
> > log.info("["+messageOutputBody+"]\n");
> > log.info("testCreateAndTransformJSONProvisionRequest");
> >
> > // setup RouteBuilder...
> >
> > // Create and Send message to input queue
> > createMessage(inputDestinationURI, messageInputBody);
> >
> > // not sure how to verify that my component gets the message.
> > //camelContext.
> >
> > // verify that the destination channel
> > log.debug("----------------------------------------------------");
> > }
> >
> >
> >
> >
> > @EndpointInject(uri = Constants.CR_INPUT_CHANNEL)
> > ProducerTemplate producerTemplate;
> >
> > public void createMessage(String inputDestinationURI, String
> > messageInputBody)
> > throws Exception {
> > log.debug("----------------------------------------------------");
> > log.debug("----------------------------------------------------");
> > log.debug("inputDestinationURI: " + inputDestinationURI);
> > log.debug("messageInputBody: " + messageInputBody);
> > log.debug("----------------------------------------------------");
> > log.debug("----------------------------------------------------");
> >
> > producerTemplate.sendBody(inputDestinationURI, messageInputBody);
> >
> > Thread.sleep(3000); // wait for 3 seconds. Not sure why though...
> >
> > }//
> >
> >
> >
> >
> > @MessageDriven(uri = Constants.CR_OUTPUT_CHANNEL)
> > public void verifyDestinationEndpoint(@Body String body) {
> > log.debug("----------------------------------------------------");
> > log.debug("verifyDestinationEndpoint");
> > log.debug("["+body+"]");
> > // process the inbound message here
> > log.debug("----------------------------------------------------");
> > }
> >
> > @MessageDriven(uri = Constants.CR_INPUT_ERROR_CHANNEL)
> > public void verifyErrorEndpoint(@Body String body) {
> > log.debug("----------------------------------------------------");
> > log.debug("verifyErrorEndpoint");
> > log.debug("["+body+"]");
> > // process the inbound message here
> > log.debug("----------------------------------------------------");
> > }
> >
> >
> > } // The End...
> > *
> >
> >
> > I bolded the 2 methods that I would want to validate the message on the
> > respective channel, but want to dynamically inject the uri from a testng
> > parameter so I can reuse this logic...
> >
> >
> >
> >
> > On Fri, Sep 19, 2008 at 3:47 PM, Mick Knutson <[EMAIL PROTECTED]
> > >wrote:
> >
> > > Here is what I do to run just my jarred components (paraphrased)...
> > >
> > > I have a baseCamelTest class that uses the SpringTestNG support to
> > start-up
> > > a spring context.
> > >
> > > Then, in my applicationContext-test.xml, I start my test broker and
> will
> > > add my test routes.
> > >
> > > Now when i plan to go into a real system, like dev, stage, prod, I have
> > my
> > > 'live' routes in my applicationContextProd.xml that has my live broker,
> > and
> > > my live routes.
> > >
> > >
> > > I guess the way you are mentioning would alos work, but means I have to
> > > maintain an application.properties, or a filter. I guess i feel because
> I
> > am
> > > already using the applicationContext-test.xml to replace my broker, it
> > just
> > > seems more natural to me to switch the routes the same way.
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > On Fri, Sep 19, 2008 at 9:44 AM, Claus Ibsen <[EMAIL PROTECTED]>
> wrote:
> > >
> > >> Hi
> > >>
> > >> Mick can you give an example how you can easily switch between test
> and
> > >> prod routes using Spring? I am looking into best practices as well
> using
> > >> Spring and having Java DSL routing.
> > >>
> > >> What I was doing is to use Java DSL with alias names for the
> endpoints,
> > >> and have the endpoints properly configured in spring XML. Then I can
> > have
> > >> spring XML with property placeholders.
> > >> <endpoint id="input1" uri="activemq:${someQueueName}"/>
> > >>
> > >> Then I can use the "input1" alias in my java DSL.
> > >> from("input1").to("xxx");
> > >>
> > >>
> > >>
> > >> Med venlig hilsen
> > >>
> > >> Claus Ibsen
> > >> ......................................
> > >> Silverbullet
> > >> Skovsgårdsvænget 21
> > >> 8362 Hørning
> > >> Tlf. +45 2962 7576
> > >> Web: www.silverbullet.dk
> > >>
> > >> -----Original Message-----
> > >> From: Mick Knutson [mailto:[EMAIL PROTECTED]
> > >> Sent: 19. september 2008 18:29
> > >> To: [email protected]
> > >> Subject: Re: testNG test harness for Camel, sending and receiving
> > messages
> > >>
> > >> The tcp issue was because in my @BeforeClass(), I had camelContext =
> new
> > >> DefaultCamelContext(); whiche seemed to start the default tcp broker.
> > But
> > >> I
> > >> am actually using Spring to start my broker, so I just removed that
> line
> > >> and
> > >> it worked fine.
> > >>
> > >> For the producer, I am using:
> > >> @EndpointInject(uri = Constants.CR_INPUT_CHANNEL)
> > >> ProducerTemplate producerTemplate;
> > >>
> > >> This works fine, but I would like some design input as to how to
> inject
> > >> routes in TestNG for testing when I see that DSL is prefered over
> Spring
> > >> Routing. With Spring Routing I can easily switch test, and prod
> routes.
> > >> But
> > >> not sure how easily to do this with dsl.
> > >>
> > >>
> > >>
> > >>
> > >>
> > >> On Thu, Sep 18, 2008 at 10:44 PM, Claus Ibsen <[EMAIL PROTECTED]>
> > wrote:
> > >>
> > >> > Hi
> > >> >
> > >> > You get the ProducerTemplate from the CamelContext directly with the
> > >> > createProducerTemplate() method.
> > >> >
> > >> > I have no clue why ActiveMQ embeds the TCP listener, maybe there is
> > >> > somekind of spring .xml files included in one of the .jars or on
> your
> > >> > classpath when running the test.
> > >> >
> > >> >
> > >> >
> > >> > Med venlig hilsen
> > >> >
> > >> > Claus Ibsen
> > >> > ......................................
> > >> > Silverbullet
> > >> > Skovsgårdsvænget 21
> > >> > 8362 Hørning
> > >> > Tlf. +45 2962 7576
> > >> > Web: www.silverbullet.dk
> > >> >
> > >> > -----Original Message-----
> > >> > From: Mick Knutson [mailto:[EMAIL PROTECTED]
> > >> > Sent: 18. september 2008 20:59
> > >> > To: [email protected]
> > >> > Subject: Re: testNG test harness for Camel, sending and receiving
> > >> messages
> > >> >
> > >> > I am making some headway.
> > >> >
> > >> > I have create a startup method:
> > >> > [EMAIL PROTECTED](groups = {"init"})
> > >> > public void startCamel() {
> > >> > try {
> > >> > log.debug("Start Camel Context");
> > >> > // create the camel context:
> > >> > camelContext = new DefaultCamelContext();
> > >> >
> > >> > // add the routes to the camel Context
> > >> > camelContext.addRoutes(new ChangeRequestRouteBuilder());
> > >> >
> > >> > // start Camel Context
> > >> > // create a camel template for sending messages:
> > >> > camelTemplate = new CamelTemplate(camelContext);
> > >> >
> > >> > // I added this as the recommendation to the deprecated
> > >> > // camelTemplate above...
> > >> > //producerTemplate = new ProducerTemplate();
> > >> >
> > >> > // start the camel context
> > >> > camelContext.start();
> > >> > } catch (Exception e) {
> > >> > // this is an example -> don't handle exceptions:
> > >> > e.printStackTrace();
> > >> > }
> > >> > }//
> > >> > *
> > >> >
> > >> > But I have an issue. *CamelTemplate is deprecated, and
> > >> **ProducerTemplate
> > >> > is
> > >> > abstract*. How how do I start using the *ProducerTemplate instead?
> > >> >
> > >> > *Also, in my SpringTestNG base, I start up my test context:*
> > >> > [EMAIL PROTECTED](*
> > >> > * locations = {"classpath:applicationContext-test.xml"}*
> > >> > *)*
> > >> >
> > >> > That includes:*
> > >> > **<import resource="classpath:META-INF/spring/camel-context.xml" />*
> > >> >
> > >> > and I am using the embedded broker:
> > >> >
> > >> > *<!-- lets configure the default ActiveMQ broker URL -->*
> > >> > * <bean id="activemq"
> > >> > class="org.apache.camel.component.jms.JmsComponent">*
> > >> > * <property name="connectionFactory">*
> > >> > * <bean
> > >> class="org.apache.activemq.ActiveMQConnectionFactory">*
> > >> > * <property name="brokerURL"
> > >> >
> > >>
> > value="vm://localhost?broker.persistent=false&broker.useJmx=false"/>*
> > >> > * </bean>*
> > >> > * </property>*
> > >> > * </bean>*
> > >> >
> > >> > so why do i keep getting the full default broker being searched for:
> > >> >
> > >> > *[myproject] DEBUG [ActiveMQ Task]
> FailoverTransport.doReconnect(671)
> > |
> > >> > Attempting connect to: tcp://localhost:61616
> > >> > [myproject] DEBUG [ActiveMQ Task] FailoverTransport.doReconnect(699)
> |
> > >> > Connect fail to: tcp://localhost:61616, reason:
> > >> java.net.ConnectException:
> > >> > Connection refused
> > >> > [myproject] DEBUG [ActiveMQ Task] FailoverTransport.doReconnect(732)
> |
> > >> > Waiting 30000 ms before attempting connection.
> > >> > *
> > >> >
> > >> >
> > >> >
> > >> > On Wed, Sep 17, 2008 at 10:49 PM, James Strachan
> > >> > <[EMAIL PROTECTED]>wrote:
> > >> >
> > >> > > I agree with everything Claus just said :) But another thing you
> can
> > >> > > do is run the TestNG test case directly in your IDE as well
> without
> > >> > > using Maven at all.
> > >> > >
> > >> > >
> > >> > > 2008/9/18 Mick Knutson <[EMAIL PROTECTED]>:
> > >> > > > I have created a base class extending
> > >> AbstractTestNGSpringContextTests
> > >> > as
> > >> > > > you mentioned. I actually did the same to support bdunit.
> > >> > > >
> > >> > > > But there are a few things, related to camel that I am just not
> > >> getting
> > >> > > yet.
> > >> > > >
> > >> > > >
> > >> > > >
> > >> > > > * What does the camel-maven-plugin doing that my base class will
> > not
> > >> by
> > >> > > > initializing the camel-context.xml?
> > >> > > >
> > >> > > > I tried to run my mvn install without the camel-maven-plugin. I
> > get
> > >> the
> > >> > > > camel-context initialized, but does not run the same as when I
> run
> > >> mvn
> > >> > > > camel:run.
> > >> > > >
> > >> > > > *There is:*
> > >> > > > *public class CRRouteBuilder extends RouteBuilder {
> > >> > > > ....
> > >> > > > public static void main(String[] args) {
> > >> > > > new Main().run(args);
> > >> > > > }
> > >> > > > *
> > >> > > >
> > >> > > > in my RouteBuilder and I guess I am not sure if this is started
> by
> > >> the
> > >> > > > plugin to run or not.
> > >> > > >
> > >> > > > I tried mvn camel:run and keep getting a poll loop:
> > >> > > >
> > >> > > > *[myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > FileConsumer.pollFileOrDirectory(81) | Polling directory
> src/data
> > >> > > > [myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > FileConsumer.isChanged(231) | file:src/data/message1.xml
> > >> > isChanged:false
> > >> > > > sizeCheck:false(0) lastModifiedCheck:false(0)
> > >> > > > [myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > FileConsumer.isChanged(231) | file:src/data/message2.xml
> > >> > isChanged:false
> > >> > > > sizeCheck:false(0) lastModifiedCheck:false(0)
> > >> > > > [myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > FileConsumer.isChanged(231) | file:src/data/message3.xml
> > >> > isChanged:false
> > >> > > > sizeCheck:false(0) lastModifiedCheck:false(0)
> > >> > > > *
> > >> > > >
> > >> > > > so should I not use the plugin at all? And just start the
> > >> camelContext
> > >> > by
> > >> > > > itself?
> > >> > > >
> > >> > > > Do I just need to have my testNG send a message to initiate the
> > >> > process?
> > >> > > >
> > >> > > >
> > >> > > > It seems that the process is initiated:
> > >> > > >
> > >> > > > *[myproject] DEBUG [VMTransport]
> > >> > > ActiveMQConnection.onAsyncException(1695) |
> > >> > > > Async exception with no exception listener:
> > >> > > > org.apache.activemq.transport.TransportDisposedIOException: Peer
> > >> > > > (vm://localhost#1) disposed.
> > >> > > > org.apache.activemq.transport.TransportDisposedIOException: Peer
> > >> > > > (vm://localhost#1) disposed.
> > >> > > > at
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:203)
> > >> > > > at
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
> > >> > > > at
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
> > >> > > > at
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> > >> > > > at
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> > >> > > > at java.lang.Thread.run(Thread.java:613)
> > >> > > > [myproject] DEBUG [ActiveMQ Transport Stopper: vm://localhost#0]
> > >> > > > TransportConnection.doStop(994) | Connection Stopped:
> > >> vm://localhost#0
> > >> > > > [myproject] INFO [ActiveMQ ShutdownHook]
> > >> TransportConnector.stop(273) |
> > >> > > > Connector vm://localhost Stopped
> > >> > > > [myproject] DEBUG [Thread-2]
> > >> > DefaultListableBeanFactory.destroyBean(447)
> > >> > > |
> > >> > > > Retrieved dependent beans for bean
> > >> > > > 'org.apache.activemq.ActiveMQConnectionFactory#3dc0f4':
> [activemq]
> > >> > > > [myproject] DEBUG [Thread-2]
> > >> > DefaultListableBeanFactory.destroyBean(447)
> > >> > > |
> > >> > > > Retrieved dependent beans for bean 'camel:beanPostProcessor':
> > >> [camel]
> > >> > > > [myproject] DEBUG [Thread-2]
> > >> > DefaultListableBeanFactory.destroyBean(447)
> > >> > > |
> > >> > > > Retrieved dependent beans for bean 'camel':
> > >> [camel:beanPostProcessor,
> > >> > > > org.apache.camel.component.file.FileComponent,
> > >> > > > com.servepath.ChangeRequestTest]
> > >> > > > myproject] DEBUG [Thread-2] DisposableBeanAdapter.destroy(148) |
> > >> > Invoking
> > >> > > > destroy() on bean with name 'camel'
> > >> > > > [myproject] INFO [ActiveMQ ShutdownHook] BrokerService.stop(512)
> |
> > >> > > ActiveMQ
> > >> > > > JMS Message Broker (localhost,
> > >> > > > ID:mick-knutsons-macbook.local-50355-1221698401973-0:0) stopped
> > >> > > > [myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > ScheduledPollConsumer.run(62) | Starting to poll:
> > >> > > > Endpoint[file:src/data?noop=true]
> > >> > > > [myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > FileConsumer.pollFileOrDirectory(81)
> > >> > > > | Polling directory src/data
> > >> > > > [myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > FileConsumer.isChanged(231) | file:src/data/message1.xml
> > >> isChanged:true
> > >> > > > sizeCheck:false(0) lastModifiedCheck:true(0)
> > >> > > > [myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > FileEndpoint.getFileStrategy(158) | Using file process strategy:
> > >> > > >
> > >>
> [EMAIL PROTECTED]
> > >> > > > [myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > FileConsumer.pollFile(122) | About to process file:
> > >> > src/data/message1.xml
> > >> > > > using exchange: Exchange[FileMessage: src/data/message1.xml]
> > >> > > > [myproject] DEBUG [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > FileProcessStrategySupport.begin(62) | Locking the file:
> > >> > > > src/data/message1.xml using the lock file name:
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> /opt/projects/changerequest/camel-example-spring/src/data/message1.xml.cameLock
> > >> > > > [myproject] ERROR [Thread: 1
> > >> > > > [EMAIL PROTECTED]
> > >> > > > BrokerService.start(466) | Failed to start ActiveMQ JMS Message
> > >> Broker.
> > >> > > > Reason: java.lang.IllegalStateException: Shutdown in progress
> > >> > > >
> > >> > > > *
> > >> > > >
> > >> > > > But there is an error in bold above.
> > >> > > >
> > >> > > >
> > >> > > >
> > >> > > >
> > >> > > >
> > >> > > > On Tue, Sep 16, 2008 at 11:14 PM, James Strachan
> > >> > > > <[EMAIL PROTECTED]>wrote:
> > >> > > >
> > >> > > >> 2008/9/16 Mick Knutson <[EMAIL PROTECTED]>:
> > >> > > >> > I am trying to setup camel within Maven to start my camel
> > context
> > >> > via
> > >> > > the
> > >> > > >> > <plugin>
> > >> > > >> > <groupId>org.apache.camel</groupId>
> > >> > > >> > <artifactId>camel-maven-plugin</artifactId>
> > >> > > >> > <version>1.4.0</version>
> > >> > > >> > </plugin>
> > >> > > >> >
> > >> > > >> > Now I was hoping that someone has already created a
> > >> baseCamelTestNG
> > >> > > class
> > >> > > >> to
> > >> > > >> > start/stop camel, then helper class to send and receive
> > messages.
> > >> > > >> >
> > >> > > >> > Then after the tests have run, the plugin can shutdown.
> > >> > > >>
> > >> > > >> BTW there's a Camel user list, I've CC'd so other camel users
> can
> > >> > listen
> > >> > > >> too...
> > >> > > >> http://activemq.apache.org/camel/discussion-forums.html
> > >> > > >>
> > >> > > >> The best approach for unit testing and sending & receiving
> > messages
> > >> is
> > >> > > >> to use the Spring Testing mechanism which works with JUnit 3.x,
> > 4.x
> > >> or
> > >> > > >> TestNG
> > >> > > >> http://activemq.apache.org/camel/spring-testing.html
> > >> > > >>
> > >> > > >> for TestNG you might want to derive from
> > >> > > AbstractTestNGSpringContextTests
> > >> > > >> see
> > >> > > >>
> > >> > > >>
> > >> > >
> > >> >
> > >>
> >
> http://static.springframework.org/spring/docs/2.5.x/reference/testing.html#testcontext-fixture-di
> > >> > > >>
> > >> > > >> this then does the dependency injection with Spring and runs
> your
> > >> test
> > >> > > >> case.
> > >> > > >>
> > >> > > >> To send messages you can inject a ProducerTemplate; then to
> > receive
> > >> > > >> messages you can then use the @MessageDriven annotation on a
> > method
> > >> -
> > >> > > >> see the examples here
> > >> > > >> http://activemq.apache.org/camel/bean-integration.html
> > >> > > >>
> > >> > > >> plus you can then inject mock endpoints for testing as well as
> > >> > described
> > >> > > >> here
> > >> > > >> http://activemq.apache.org/camel/spring-testing.html
> > >> > > >> http://activemq.apache.org/camel/mock.html
> > >> > > >>
> > >> > > >> --
> > >> > > >> James
> > >> > > >> -------
> > >> > > >> http://macstrac.blogspot.com/
> > >> > > >>
> > >> > > >> Open Source Integration
> > >> > > >> http://open.iona.com
> > >> > > >>
> > >> > > >
> > >> > > >
> > >> > > >
> > >> > > > --
> > >> > > > ---
> > >> > > > Thank You...
> > >> > > >
> > >> > > > Mick Knutson
> > >> > > > BASE Logic, inc.
> > >> > > > (415) 354-4215
> > >> > > >
> > >> > > > Website: http://baselogic.com
> > >> > > > Blog: http://baselogic.com/blog
> > >> > > > BLiNC Magazine: http://blincmagazine.com
> > >> > > > Linked IN: http://linkedin.com/in/mickknutson
> > >> > > > DJ Mick: http://djmick.com
> > >> > > > MySpace: http://myspace.com/mickknutson
> > >> > > > Vacation Rental: http://tahoe.baselogic.com
> > >> > > >
> > >> > >
> > >> > >
> > >> > >
> > >> > > --
> > >> > > James
> > >> > > -------
> > >> > > http://macstrac.blogspot.com/
> > >> > >
> > >> > > Open Source Integration
> > >> > > http://open.iona.com
> > >> > >
> > >> >
> > >> >
> > >> >
> > >> > --
> > >> > ---
> > >> > Thank You...
> > >> >
> > >> > Mick Knutson
> > >> > BASE Logic, inc.
> > >> > (415) 354-4215
> > >> >
> > >> > Website: http://baselogic.com
> > >> > Blog: http://baselogic.com/blog
> > >> > BLiNC Magazine: http://blincmagazine.com
> > >> > Linked IN: http://linkedin.com/in/mickknutson
> > >> > DJ Mick: http://djmick.com
> > >> > MySpace: http://myspace.com/mickknutson
> > >> > Vacation Rental: http://tahoe.baselogic.com
> > >> >
> > >>
> > >>
> > >>
> > >> --
> > >> ---
> > >> Thank You...
> > >>
> > >> Mick Knutson
> > >> BASE Logic, inc.
> > >> (415) 354-4215
> > >>
> > >> Website: http://baselogic.com
> > >> Blog: http://baselogic.com/blog
> > >> BLiNC Magazine: http://blincmagazine.com
> > >> Linked IN: http://linkedin.com/in/mickknutson
> > >> DJ Mick: http://djmick.com
> > >> MySpace: http://myspace.com/mickknutson
> > >> Vacation Rental: http://tahoe.baselogic.com
> > >>
> > >
> > >
> > >
> > > --
> > > ---
> > > Thank You...
> > >
> > > Mick Knutson
> > > BASE Logic, inc.
> > > (415) 354-4215
> > >
> > > Website: http://baselogic.com
> > > Blog: http://baselogic.com/blog
> > > BLiNC Magazine: http://blincmagazine.com
> > > Linked IN: http://linkedin.com/in/mickknutson
> > > DJ Mick: http://djmick.com
> > > MySpace: http://myspace.com/mickknutson
> > > Vacation Rental: http://tahoe.baselogic.com
> > >
> > >
> >
> >
> > --
> > ---
> > Thank You...
> >
> > Mick Knutson
> > BASE Logic, inc.
> > (415) 354-4215
> >
> > Website: http://baselogic.com
> > Blog: http://baselogic.com/blog
> > BLiNC Magazine: http://blincmagazine.com
> > Linked IN: http://linkedin.com/in/mickknutson
> > DJ Mick: http://djmick.com
> > MySpace: http://myspace.com/mickknutson
> > Vacation Rental: http://tahoe.baselogic.com
> >
>
>
>
> --
> ---
> Thank You...
>
> Mick Knutson
> BASE Logic, inc.
> (415) 354-4215
>
> Website: http://baselogic.com
> Blog: http://baselogic.com/blog
> BLiNC Magazine: http://blincmagazine.com
> Linked IN: http://linkedin.com/in/mickknutson
> DJ Mick: http://djmick.com
> MySpace: http://myspace.com/mickknutson
> Vacation Rental: http://tahoe.baselogic.com
>
--
---
Thank You…
Mick Knutson
BASE Logic, inc.
(415) 354-4215
Website: http://baselogic.com
Blog: http://baselogic.com/blog
BLiNC Magazine: http://blincmagazine.com
Linked IN: http://linkedin.com/in/mickknutson
DJ Mick: http://djmick.com
MySpace: http://myspace.com/mickknutson
Vacation Rental: http://tahoe.baselogic.com