camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Anderson <>
Subject Re: Component Design - SMSLib
Date Fri, 27 Jan 2012 07:21:09 GMT
Hi Hadrian,

I made a mock implementation of the Java serial API specifically for
unit testing:

Do you have any practical advice for developing components, or
resources I should be reading?



On 26 January 2012 21:22, Hadrian Zbarcea <> wrote:
> Alex, smslib is distributed under ALv2, which is great. I didn't check yet
> if it's OSGi ready, we're looking for that too. All our components are now
> OSGi ready. If smslib isn't we'll try to work with them to make it OSGi
> ready or find another solution.
> The question I have for you is how to you envision the unit testing for this
> component? Is there a way to have a mock service provider? We obviously
> cannot afford using a real service for the unit tests.
> Cheers,
> Hadrian
> On 01/26/2012 09:21 AM, Alex Anderson wrote:
>> I'm working on a Camel component for SMSLib (
>> This is a Java library for communicating with mobile phones and modems
>> via a serial connection to send and receive SMS messages using the
>> Hayes (AT) command set.
>> I have a working prototype - you can see the source at
>> I have some general worries regards best-practice for designing the
>> Endpoint, Consumer and Producer for this component.  I've not come
>> across comprehensive documentation for implementing Endpoints etc.,
>> and it's hard to know which other components would have a similar
>> model to mine and therefore would be worth delving into the source of.
>> Notes on serial devices
>> -----------------------
>> * before starting to send or receive messages through a device it must
>> be initialised
>> * initialisation can fail
>> Endpoint
>> --------
>> Each Endpoint will refer to a serial port, with corresponding URIs, e.g.:
>> * Windows: smslib:COM1
>> * Linux: smslib:/dev/tty01
>> When Endpoints are initially created, settings for the port (e.g. baud
>> rate) are passed to it.  Later we may want to create endpoints for the
>> same port with different settings, but only if the original endpoint
>> is no longer in use.
>> Consumer
>> --------
>> There should be a maximum of 1 consumer per endpoint.  The serial port
>> must be polled to check for incoming SMS.  Rather than storing the SMS
>> within the Smslib service, I would like to pass them immediately
>> upstream to the Consumer's Processor.
>> Producer
>> --------
>> For my usage, I would like a single Producer per endpoint.  This is
>> primarily because when there are no active producers or consumers for
>> an endpoint, the serial connection can be closed to allow its use by
>> other programs.  It may be reasonable for other uses to have multiple
>> Producers for the same endpoint.
>> Current status
>> --------------
>> The endpoint has a Thread (implemented in a class SmslibService) which
>> controls the receiving from the serial connection - every 30 seconds
>> the thread wakes and checks the modem for new incoming messages.  This
>> SmslibService keeps a reference to a Producer and a Consumer, and
>> should shut down the serial connection when both Consumer and Producer
>> are stopped.
>> Trying to create more than one Producer or Consumer for an Endpoint
>> will cause an Exception to be thrown.
>> This causes problems when the settings used to create an endpoint
>> initially are bad - there will be an Exception thrown in
>> SmslibProducer.doStart()
>> My Questions
>> ------------
>> * are there any good resources for writing Endpoints that I should be
>> reading?
>> * does anyone know of any similarly-modelled components whose source
>> might provide guidance?
>> * are there any patterns or base classes that I should obviously be
>> using for my Component, Endpoint, Consumer or Producer
>> implementations?
>> * is there anyone else interested in this component who could cast an
>> eye over the code?
> --
> Hadrian Zbarcea
> Principal Software Architect
> Talend, Inc

View raw message