1.4 Let me do a test with 1.5
On Tue, Sep 30, 2008 at 10:10 AM, Claus Ibsen <[EMAIL PROTECTED]> wrote: > Hi Mick > > What version are you using? > > The unit test I created is with camel 1.5-SNAPSHOT. > > > > > 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: 30. september 2008 18:39 > To: camel-user@activemq.apache.org > Subject: Re: issue routing Exchange to custom method in Processor > > *I took the exact test method and create Route you had in that test:* > > > *protected RouteBuilder createRouteBuilder() throws Exception { > return new RouteBuilder() { > public void configure() throws Exception { > from("direct:start") > > .errorHandler(deadLetterChannel("mock:error").maximumRedeliveries(1)) > .process(new Processor() { > public void process(Exchange exchange) throws > Exception { > String body = > exchange.getIn().getBody(String.class); > if ("Boom".equals(body)) { > throw new > IllegalArgumentException("Forced exception by unit test"); > } > exchange.getIn().setBody("Bye World"); > } > }) > .to("mock:result"); > } > }; > } > > @Test(groups = {"functional"}) > public void testError() throws Exception { > > camelContext.addRoutes(createRouteBuilder()); > > log.debug("----------------------------------------------------"); > log.debug("----------------------------------------------------"); > log.debug("----------------------------------------------------"); > log.debug("----------------------------------------------------"); > log.debug("----------------------------------------------------"); > MockEndpoint error = getMockEndpoint("mock:error"); > MockEndpoint result = getMockEndpoint("mock:result"); > error.expectedMessageCount(1); > result.expectedMessageCount(0); > > try { > producerTemplate.sendBody("direct:start", "Boom"); > Assert.fail("Should have thrown a RuntimeCamelException"); > } catch (RuntimeCamelException e) { > //assertIsInstanceOf(IllegalArgumentException.class, > e.getCause()); > } > > MockEndpoint.assertIsSatisfied(error, result); > log.debug("----------------------------------------------------"); > log.debug("----------------------------------------------------"); > log.debug("----------------------------------------------------"); > log.debug("----------------------------------------------------"); > log.debug("----------------------------------------------------"); > } > * > > > > > > > *And ran that in my TestNG and no failure occures:* > > *<test name="MockTest"> > <class name="com.servepath.changerequest.ChangeRequestTest"> > <test-method status="FAIL" signature="testError()" name="testError" > duration-ms="375" started-at="2008-09-30T09:34:04Z" > finished-at="2008-09-30T09:34:04Z"> > <exception class="java.lang.AssertionError"> > <message> > <![CDATA[Should have thrown a RuntimeCamelException]]> > </message> > <full-stacktrace> > <![CDATA[java.lang.AssertionError: Should have thrown a > RuntimeCamelException > at org.testng.Assert.fail(Assert.java:84) > at > > com.servepath.changerequest.ChangeRequestTest.testError(ChangeRequestTest.java:73) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:580) > at > org.testng.internal.MethodHelper$1.runTestMethod(MethodHelper.java:698) > at > > org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:140) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.testng.internal.MethodHelper.invokeHookable(MethodHelper.java:706) > at org.testng.internal.Invoker.invokeMethod(Invoker.java:468) > at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:617) > at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:885) > at > > org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126) > at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:110) > at org.testng.TestRunner.runWorkers(TestRunner.java:712) > at org.testng.TestRunner.privateRun(TestRunner.java:582) > at org.testng.TestRunner.run(TestRunner.java:477) > at org.testng.SuiteRunner.runTest(SuiteRunner.java:324) > at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:319) > at org.testng.SuiteRunner.privateRun(SuiteRunner.java:292) > at org.testng.SuiteRunner.run(SuiteRunner.java:198) > at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:821) > at org.testng.TestNG.runSuitesLocally(TestNG.java:788) > at org.testng.TestNG.run(TestNG.java:708) > at > org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:74) > at > > org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:92) > at org.apache.maven.surefire.Surefire.run(Surefire.java:177) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > > org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338) > at > > org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997) > ]]> > </full-stacktrace> > * > > > *Here is the console trace for this test: > * > *tson/camel,route=[direct]start,type=route,name=[direct]start > [myproject] DEBUG [main] DefaultCamelContext.addRoutes(341) | Adding routes > from: Routes: [Route[ [From[direct:start]] -> [Interceptor[Delegate(Pipeli > > ne[DeadLetterChannel[Delegate([EMAIL PROTECTED] > ), > sendTo(Endpoint[mock:error]), RedeliveryPolicy[maximumRedeli > veries=1]], DeadLetterChannel[Delegate(sendTo(Endpoint[mock:result])), > sendTo(Endpoint[mock:error]), > RedeliveryPolicy[maximumRedeliveries=1]]])]]]] > ro > utes: [] > [myproject] DEBUG [main] ProducerCache.sendExchange(147) | >>>> > Endpoint[direct:start] Exchange[Message: Boom] > [myproject] ERROR [main] DeadLetterChannel.log(189) | Failed delivery for > exchangeId: ID-mickknutson/2161-1222792429368/0-0. On delivery attempt: 0 > ca > ught: java.lang.IllegalArgumentException: Forced exception by unit test > java.lang.IllegalArgumentException: Forced exception by unit test > at > > com.servepath.changerequest.ChangeRequestTest$1$1.process(ChangeRequestTest.java:46) > at > > org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69) > at > > org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:155) > at > > org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:91) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:101) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:85) > at > > org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:57) > at > > org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:39) > at > > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41) > at > > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66) > at > > org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:47) > at > org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:149) > at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:86) > at > > org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:84) > at > > org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:101) > at > > org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:107) > at > > com.servepath.changerequest.ChangeRequestTest.testError(ChangeRequestTest.java:72) > * > > > > On Mon, Sep 29, 2008 at 9:49 PM, Claus Ibsen <[EMAIL PROTECTED]> wrote: > > > Hi Mick > > > > Check out this unit test I just added: > > > > If you are using 1.5-SNAPSHOT remember that the producer template now > > rethrows the exception that caused the failure in the routing. So you > should > > try .. catch this no. See the ErrorHandlerTest#testError() method. > > > > http://svn.apache.org/viewvc?view=rev&revision=700334 > > > > > > > > Med venlig hilsen > > > > Claus Ibsen > > ...................................... > > Silverbullet > > Skovsgårdsvænget 21 > > 8362 Hørning > > Tlf. +45 2962 7576 > > Web: www.silverbullet.dk > > > > -----Original Message----- > > From: Claus Ibsen [mailto:[EMAIL PROTECTED] > > Sent: 30. september 2008 06:25 > > To: camel-user@activemq.apache.org > > Subject: RE: issue routing Exchange to custom method in Processor > > > > Hi > > > > Could you put the error handler outside the from, so its like this: > > > > errorHandler(xxx); > > from(yyy).process(zzz); > > > > > > > > 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: 30. september 2008 00:33 > > To: camel-user@activemq.apache.org > > Subject: Re: issue routing Exchange to custom method in Processor > > > > I have looked through this whole thing, and there is nothing different > than > > what I am doing. > > > > My valid tests work fine. They get the expected messages and validate > > accordingly. But the issue seems to be with processing deadLetter > channels > > in Mocks. > > > > So basically, in my test, the message is sent through to the > > *resultEndpoint > > *instead of the *resultErrorEndpoint *which is causing my test to fail. > > > > > > Now just before I test my Mock's, I added this code to: > > > > *Assert.assertNotNull(camelContext); > > Assert.assertNotNull(resultEndpoint); > > Assert.assertNotNull(resultErrorEndpoint); > > > > //MockEndpoint.assertIsSatisfied(camelContext); > > > > // lets show the endpoints in the test > > List<MockEndpoint> list = > > CamelContextHelper.getSingletonEndpoints(camelContext, > MockEndpoint.class); > > log.info("Found endpoints: " + list); > > > > // lets dump the messages sent to our test endpoint > > List<Exchange> exchanges = resultEndpoint.getReceivedExchanges(); > > log.info > > > > > ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); > > for (Exchange exchange : exchanges) { > > log.info("Received resultEndpoint: [" + exchange + "]\n"); > > } > > > > // lets dump the messages sent to our test endpoint > > List<Exchange> exchangesMock = > > resultErrorEndpoint.getReceivedExchanges(); > > log.info > > > > > ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); > > for (Exchange exchange : exchangesMock) { > > log.info("Received resultErrorEndpoint: [" + exchange + > "]\n"); > > } > > log.info > > > > > ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); > > * > > > > > > *And there is nothing happening to my error mock at all.* > > > > > > *[myproject] INFO [main] ChangeRequestTest.testMocksAreValid(152) | > > testMocksAreValid > > [myproject] INFO [main] ChangeRequestTest.testMocksAreValid(162) | Found > > endpoints: [Endpoint[mock:outputDestinationURI], > > Endpoint[mock:outputErrorDes > > tinationURI]] > > [myproject] DEBUG [VMTransport] AbstractRegion.addConsumer(215) | Adding > > consumer: ID:mickknutson-3837-1222725262920-2:21:1:1 > > [myproject] INFO [main] ChangeRequestTest.testMocksAreValid(166) | > > > > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% > > %%%%%%%%%%% > > [myproject] INFO [main] ChangeRequestTest.testMocksAreValid(168) | > Received > > resultEndpoint: [Exchange[JmsMessage: > {"changeRequestId":"99907","custId": > > "70999","requestType":"provision","quota":"102400","backend":" > > 192.168.0.0/16 > > ","password":"abcd1234"}]] > > > > [myproject] INFO [main] ChangeRequestTest.testMocksAreValid(168) | > Received > > resultEndpoint: [Exchange[JmsMessage: ActiveMQTextMessage {commandId = 5, > > responseRequired = true, messageId = > > ID:mickknutson-3837-1222725262920-2:12:1:1:1, originalDestination = null, > > originalTransactionId = null, producerI > > d = ID:mickknutson-3837-1222725262920-2:12:1:1, destination = > > queue://channel/gogrid/cloudstorage/command/status, transactionId = null, > > expiration = 0 > > , timestamp = 1222725273779, arrival = 0, brokerInTime = 1222725273779, > > brokerOutTime = 1222725273779, correlationId = null, replyTo = null, > > persisten > > t = true, type = null, priority = 4, groupID = null, groupSequence = 0, > > targetConsumerId = null, compressed = false, userID = null, content = > null, > > ma > > rshalledProperties = null, dataStructure = null, redeliveryCounter = 0, > > size > > = 1024, properties = null, readOnlyProperties = true, readOnlyBody = true > > , droppable = false, text = > > > > > {"commandType":"jobCreated","changeRequestId":"1234567890","timeout":0,"jobId":"bdceca38-8bba-11dd-b4f0-0030488bd1fd"}}]] > > > > [myproject] INFO [main] ChangeRequestTest.testMocksAreValid(173) | > > > > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% > > %%%%%%%%%%% > > [myproject] INFO [main] ChangeRequestTest.testMocksAreValid(177) | > > > > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% > > %%%%%%%%%%% > > * > > > > So there are 2 exchanges only. The first in green was for my initial add > > request which was successful. The second for for my status update in > > orange, > > which was also successful. > > > > What I do NOT have is any exchange whatsoever for my failed request. > > > > > > > > So according to my <test name="*InvalidProvisionChangeRequest*"> > > *<message> > > * > > * <![CDATA[mock:outputDestinationURI Received message > > count. Expected: > > <0> but was: <1>]]> > > </message>* > > > > Which means that nothing is getting routed to my deadLetter Channel in my > > tests only. > > > > > > > > > > On Mon, Sep 29, 2008 at 11:21 AM, Claus Ibsen <[EMAIL PROTECTED]> > wrote: > > > > > > > > > > > https://svn.apache.org/repos/asf/activemq/camel/trunk/components/camel-testng/ > > > > > > It is in fact not promoted too much (or not at all) on our camel wiki > > > documentation. > > > > > > > > > > > > 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: 29. september 2008 19:57 > > > To: camel-user@activemq.apache.org > > > Subject: Re: issue routing Exchange to custom method in Processor > > > > > > I deploy this as a war to Tomcat and use a single > applicationContext.xml > > to > > > start camel like: > > > > > > *<import resource="classpath:META-INF/spring/camel-context.xml"/> > > > > > > <camelContext id="camel" > > > xmlns="http://activemq.apache.org/camel/schema/spring > "> > > > <!-- The routes are defined in --> > > > <package>com.servepath.gogrid.changerequest</package> > > > > > > </camelContext> > > > * > > > > > > > > > The same as in my applicationContext-test.xml except I do not include > any > > > routing declarations as I have my test create the route like: > > > > > > > > > public void setRoutes(final String inputUri, final Processor > > processor) > > > throws Exception { > > > // Add Routes to Camel Context > > > camelContext.addRoutes(new RouteBuilder() { > > > public void configure() { > > > from(inputUri) > > > .errorHandler( > > > > > > deadLetterChannel(MOCK_OUTPUT_DESTINATION_URI) > > > > .loggingLevel(LoggingLevel.TRACE) > > > > > > ) > > > .process(changeRequestController) > > > .to(MOCK_OUTPUT_DESTINATION_URI); > > > } > > > }); > > > > > > }//setRoutes > > > > > > > > > PS, where can I find this camel TestNG component you are talking about? > > > > > > > > > > > > > > > > > > On Mon, Sep 29, 2008 at 10:34 AM, Claus Ibsen <[EMAIL PROTECTED]> > > wrote: > > > > > > > Hi > > > > > > > > I think it could be how you start camel. When you deploy to Jetty do > > you > > > > deploy it as OSGi bundles, or as a web application? > > > > > > > > Either way then its usually Spring that is starting up as normal and > it > > > > will starup Camel properly. > > > > > > > > I am not sure this is happening correctly in your unit tests. > > > > > > > > Your BaseCamelTestNG class also starts Camel. It is only supposed to > be > > > > started once. As well as stopped, let Spring handle this. > > > > > > > > There must be a hook somewhere where you can add your routes. However > > we > > > > use either plain junit or spring junit based in the testing of camel > > > itself > > > > - not TestNG so I am afraid I have not used it that much. > > > > > > > > Could you check out the camel-testng component. It might have some > > > pointers > > > > there. > > > > > > > > > > > > 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: 29. september 2008 19:26 > > > > To: camel-user@activemq.apache.org > > > > Subject: Re: issue routing Exchange to custom method in Processor > > > > > > > > I have seperated them and that solves the first item. Thanks. > > > > But I still can't seem to get my errorMock to work. > > > > > > > > But when I deploy this to Jetty, the route and errors act as > expected. > > > > > > > > > > > > On Mon, Sep 29, 2008 at 10:22 AM, Claus Ibsen <[EMAIL PROTECTED]> > > > wrote: > > > > > > > > > Hi > > > > > > > > > > I don't think you should have both @MessageDriven and Processor in > > the > > > > same > > > > > java class. You should separate these two. This is not commonly > used. > > > > > > > > > > > > > > > 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: 29. september 2008 18:12 > > > > > To: Camel; Active MQ > > > > > Subject: Re: issue routing Exchange to custom method in Processor > > > > > > > > > > Can someone help me? > > > > > > > > > > On Fri, Sep 26, 2008 at 3:10 PM, Mick Knutson < > > [EMAIL PROTECTED] > > > > > >wrote: > > > > > > > > > > > The funny thing is, when I have an error with the message coming > > from > > > > > this > > > > > > queue, which I do because process(Exchange) does not expect my > > > message > > > > > body, > > > > > > the message gets routed to the proper deadLetter channel. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Sep 26, 2008 at 12:22 PM, Mick Knutson < > > > [EMAIL PROTECTED] > > > > > >wrote: > > > > > > > > > > > >> I have a Processor with 2 different methods: > > > > > >> > > > > > >> The standard: > > > > > >> *public void process(Exchange exchange) { > > > > > >> * > > > > > >> > > > > > >> and a custom: > > > > > >> > > > > > >> [EMAIL PROTECTED](uri = > Constants.CHANNEL_GG_CS_COMMAND_STATUS) > > > > > >> public void onMessage(Exchange exchange) * > > > > > >> > > > > > >> Now here is my route: > > > > > >> > > > > > >> * from(Constants.CHANNEL_GG_CS_CR_ADD) > > > > > >> .errorHandler( > > > > > >> > > > > > >> deadLetterChannel(Constants.CHANNEL_GG_CS_CR_ADD_ERROR) > > > > > >> //.maximumRedeliveries(2) > > > > > >> //.initialRedeliveryDelay(1) > > > > > >> > .loggingLevel(LoggingLevel.DEBUG) > > > > > >> ).processRef("changeRequestController") > > > > > >> .to(Constants.CHANNEL_GG_CS_COMMAND_CLUSTER); > > > > > >> > > > > > >> > > > > > >> // Route for command status updates. > > > > > >> from(Constants.CHANNEL_GG_CS_COMMAND_STATUS) > > > > > >> .errorHandler( > > > > > >> > > > > > >> > > > > > > > > > > > > > > > deadLetterChannel(Constants.CHANNEL_GG_CS_COMMAND_STATUS_ERROR).maximumRedeliveries(2) > > > > > >> .initialRedeliveryDelay(1) > > > > > >> .loggingLevel(LoggingLevel.INFO) > > > > > >> > > > > > ).to("bean:changeRequestController?methodName=onMessage"); > > > > > >> * > > > > > >> > > > > > >> So when I get a message on *Constants.CHANNEL_GG_CS_CR_ADD my > > > > > >> process(Exchange) method is called, and that rout is fine. > > > > > >> > > > > > >> However, I get a response message back on > > > > > **Constants.CHANNEL_GG_CS_COMMAND_STATUS > > > > > >> but it is also processed by *the *process(Exchange) instead of > my > > > > > >> onMessage**(Exchange)* > > > > > >> > > > > > >> I have tried @MessageDriven annotation as well as the route > > builder > > > > but > > > > > >> neither works. > > > > > >> > > > > > >> Am I forced to have each process in a single class? > > > > > >> > > > > > >> > > > > > >> > > > > > >> -- > > > > > >> --- > > > > > >> 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 > > > > > > -- > --- > 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