Creating a DataSource Service without writing code

One thing that I did not see in HiveMind was any examples on how to easily implement a DataSource into my project using HiveMind. I then took it upon myself "again" to fix this so called deficiency. Looking thru the docs and getting real excited about contributing to a new and kewl framework, I tried to use every neat little keyword, factory and builder to create a totally reusable service that of course everyone should have. I go to the HiveMind JIRA and submit my request for an enhancement to HiveMind library, sitting back and patting myself on the back I realize that I really over thought the process, I retracted my request and went into hiding until now.

What I realized is that I was recoding all the things that HiveMind already does for me. I went back to the code and deleted it and went to my hivemodule.sdl now .xml and did this

    <service-point id="DefaultDataSource" interface="javax.sql.DataSource">
        <invoke-factory service-id="hivemind.BuilderFactory">
            <construct class="org.apache.commons.dbcp.BasicDataSource">
                <set property="driverClassName" value="org.firebirdsql.jdbc.FBDriver"/>
                <set property="url" value="jdbc:firebirdsql:localhost/3050:D:/Firebird/data/etstore.gdb"/>
                <set property="username" value="SYSDBA"/>
                <set property="password" value="masterkey"/>
            </construct>
        </invoke-factory>
    </service-point>       

What I like about this is that the construct class can contain any class that implements javax.sql.DataSource and I can configure it thru its own setters or I can include this into a service that will do it for me or whatever.

Here is an example implementation:

    Registry r = getRegistry();
    DataSource datasource = (DataSource) r.getService( "datasource.DefaultDataSource", javax.sql.DataSource.class );
    Connection conn = datsource.getConnection();

In conclusion what I learned is there is a lot of power built into HiveMind and the other is not to junk up the core with what I thought was neat, instead write a Wiki and hope someone reads it.


Contributed by KurtHoehn

  • No labels