Hi Blair

This is very cool. If you have the time then a blog entry how to do
this, with maybe a screenshot of the google charts as eye candy would
be awesome. We can then add a link to it from the Camel articles page.
And help spread the word on twitter etc.


On Wed, Jul 27, 2011 at 10:05 AM, Blair <blair.nils...@gmail.com> wrote:
> Ok, in the project I've been on, we have managed to do some pretty awesome
> stuff with camel, so I'd like to spend some time posting about some of the
> cool things we have done - with some example code.
>
> This is exposing a database as a google data source so that you can use
> google charts.... Its also shows why camel is made of so _very_ much win...
>
> Google's visualization kits make for some very pretty interactive eye candy,
> however we need to expose some views in a way that they can talk to it.
>
> The online instructions talk about setting up servlets, war files etc,
> however, we have the awesome power of camel, so we just don't need that at
> all... we do need jetty and visualization-datasource
> so add
>
>        <dependency>
>            <groupId>org.apache.camel</groupId>
>            <artifactId>camel-jetty</artifactId>
>            <version>${camel.version}</version>
>        </dependency>
>
> and
>
>        <dependency>
>            <groupId>com.google.visualization</groupId>
>            <artifactId>visualization-datasource</artifactId>
>            <version>1.0.2</version>
>        </dependency>
>
> to your pom file....
>
> Here is our RouteBuilder (minus security, checks for which table, filters to
> keep a user to see only their data etc) - the point being that it is trivial
> example.
>
> Make sure that the database setup so that the username and password only
> have read only access to the things you want to share, and you are ready to
> go.
>
> @Component
> public class ReportServices extends RouteBuilder {
>
>        // Values come from jdbc.properties via Spring property-placeholder
>        @Value("${jdbc.url}") private String url;
>        @Value("${jdbc.username}") private String username;
>        @Value("${jdbc.password}") private String password;
>
>    final Processor visualizationProcessor = new Processor() {
>                        public void process(Exchange exchange) throws 
> Exception {
>                                HttpMessage in = (HttpMessage) 
> exchange.getIn();
>                                
> DataSourceHelper.executeDataSourceServletFlow(in.getRequest(),
> in.getResponse(), tableGenerator, false);
>                        }
>    };
>
>    final DataTableGenerator tableGenerator = new DataTableGenerator() {
>        public Capabilities getCapabilities() {
>            return Capabilities.SQL;
>        }
>
>        public DataTable generateDataTable(Query query, HttpServletRequest
> request) throws DataSourceException {
>            SqlDatabaseDescription db = new SqlDatabaseDescription(
>                url, username, password, request.getParameter("table"));
>            return SqlDataSourceHelper.executeQuery(query, db);
>        }
>    };
>
>        @Override
>        public void configure() throws Exception {
>
> from("jetty:http://0.0.0.0/Reports";).process(visualizationProcessor).stop();
>        }
>
> }
>
> And we are done :)
>
> Camel for the win again!
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Google-Visualization-API-wire-protocol-from-camel-how-to-do-it-tp4637916p4637916.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to