In all honesty all drivers suck in OSGi.
If you want to do it nicely, shade a bundle like commons dbcp and
use pooling, replace the Class.forName stuff with a FrameworksUtil. and load 
the class the right way.

Just a 0.2.. :)


On Oct 11, 2013, at 6:28 PM, Freeman Fang <[email protected]> wrote:

> Hi,
> 
> Please take a look at my blog about how to use jdbc driver in OSGi container 
> [1]
> 
> [1]http://freemanfang.blogspot.com/2012/03/how-to-use-jdbc-driver-in-osgi.html
> -------------
> Freeman(Yue) Fang
> 
> Red Hat, Inc. 
> FuseSource is now part of Red Hat
> Web: http://fusesource.com | http://www.redhat.com/
> Twitter: freemanfang
> Blog: http://freemanfang.blogspot.com
> http://blog.sina.com.cn/u/1473905042
> weibo: @Freeman小屋
> 
> 
> 
> On 2013-10-11, at 下午8:28, Laurence Noton wrote:
> 
>> Hi,
>> 
>> 
>> 
>> I'm having some difficulty registering a JDBC driver, JTDS into FUSE.
>> 
>> 
>> 
>> *routes.xml*
>> 
>> 
>> 
>> <bean id="myDS"
>> class="org.springframework.jdbc.datasource.DriverManagerDataSource">
>> 
>>   <property name="driverClassName"
>> value="net.sourceforge.jtds.jdbc.Driver"/>
>> 
>>   <property name="url"
>> value="jdbc:jtds:sqlserver://?????;databaseName=?????;tds=8.0;lastupdatecount=true"
>> />
>> 
>>   <property name="username" value="fuser" />
>> 
>>   <property name="password" value="fuser" />
>> 
>> </bean>
>> 
>> 
>> 
>> *pom.xml*
>> 
>> 
>> 
>> <build>
>> 
>>   <plugins>
>> 
>>     <plugin>
>> 
>>       <groupId>org.apache.felix</groupId>
>> 
>>       <artifactId>maven-bundle-plugin</artifactId>
>> 
>>       <version>2.3.4</version>
>> 
>>       <extensions>true</extensions>
>> 
>>       <configuration>
>> 
>>         <instructions>
>> 
>>           <Bundle-SymbolicName>rest.proxy</Bundle-SymbolicName>
>> 
>> 
>> <Require-Bundle>org.apache.cxf.bundle,org.apache.camel.camel-cxf,org.springframework.beans</Require-Bundle>
>> 
>>           *<Import-Package>net.sourceforge.jtds.jdbc,*</Import-Package>*
>> 
>>         </instructions>
>> 
>>       </configuration>
>> 
>>     </plugin>
>> 
>>   </plugins>
>> 
>> </build>
>> 
>> 
>> 
>> 
>> 
>> *Fuse commands run to install drivers;*
>> 
>> 
>> 
>> osgi:install -s wrap:mvn:net.sourceforge/jtds/1.3.1
>> 
>> 
>> 
>> osgi:install -s wrap:mvn:jcifs/jcifs/1.3.17
>> 
>> 
>> 
>> *If I show exports for jtds I get:*
>> 
>> 
>> 
>> JBossFuse:karaf@root> osgi:headers 278
>> 
>> 
>> 
>> 
>> 
>> wrap_mvn_net.sourceforge_jtds_1.3.1 (278)
>> 
>> -----------------------------------------
>> 
>> Main-Class = net.sourceforge.jtds.jdbc.Driver
>> 
>> Specification-Title = JDBC
>> 
>> Tool = Bnd-0.0.357
>> 
>> Specification-Version = 3.0
>> 
>> Implementation-Version = 1.3.1
>> 
>> Generated-By-Ops4j-Pax-From = wrap:mvn:net.sourceforge/jtds/1.3.1
>> 
>> Created-By = 1.7.0_25 (Oracle Corporation)
>> 
>> Implementation-Title = jTDS JDBC Driver
>> 
>> Manifest-Version = 1.0
>> 
>> Bnd-LastModified = 1381480171800
>> 
>> Implementation-URL = http://jtds.sourceforge.net
>> 
>> Originally-Created-By = 1.7.0_21-b11 (Oracle Corporation)
>> 
>> Ant-Version = Apache Ant 1.8.2
>> 
>> 
>> 
>> 
>> 
>> Bundle-Name = wrap_mvn_net.sourceforge_jtds_1.3.1
>> 
>> Bundle-SymbolicName = wrap_mvn_net.sourceforge_jtds_1.3.1
>> 
>> Bundle-Version = 0
>> 
>> Bundle-ManifestVersion = 2
>> 
>> 
>> 
>> 
>> 
>> Import-Package =
>> 
>>       javax.crypto;resolution:=optional,
>> 
>>       javax.crypto.spec;resolution:=optional,
>> 
>>       javax.naming;resolution:=optional,
>> 
>>       javax.naming.spi;resolution:=optional,
>> 
>>       javax.net;resolution:=optional,
>> 
>>       javax.net.ssl;resolution:=optional,
>> 
>>       javax.sql;resolution:=optional,
>> 
>>       javax.transaction.xa;resolution:=optional,
>> 
>>       jcifs;resolution:=optional,
>> 
>>       jcifs.smb;resolution:=optional,
>> 
>>       net.sourceforge.jtds.jdbc;resolution:=optional,
>> 
>>       net.sourceforge.jtds.jdbc.cache;resolution:=optional,
>> 
>>       net.sourceforge.jtds.jdbcx;resolution:=optional,
>> 
>>       net.sourceforge.jtds.jdbcx.proxy;resolution:=optional,
>> 
>>       net.sourceforge.jtds.ssl;resolution:=optional,
>> 
>>       net.sourceforge.jtds.util;resolution:=optional,
>> 
>>       org.ietf.jgss;resolution:=optional
>> 
>> Export-Package =
>> 
>>       net.sourceforge.jtds.jdbc;
>> 
>>               uses:="net.sourceforge.jtds.util,
>> 
>>                       net.sourceforge.jtds.jdbc.cache,
>> 
>>                       jcifs.smb,
>> 
>>                       jcifs,
>> 
>>                       javax.net,
>> 
>>                       net.sourceforge.jtds.ssl,
>> 
>>                       org.ietf.jgss,
>> 
>>                       net.sourceforge.jtds.jdbcx,
>> 
>>                       javax.transaction.xa",
>> 
>>       net.sourceforge.jtds.jdbc.cache;uses:=net.sourceforge.jtds.jdbc,
>> 
>>       net.sourceforge.jtds.jdbcx;
>> 
>>               uses:="javax.naming,
>> 
>>                       javax.sql,
>> 
>>                       net.sourceforge.jtds.util,
>> 
>>                       net.sourceforge.jtds.jdbc,
>> 
>>                       javax.naming.spi,
>> 
>>                       javax.transaction.xa,
>> 
>>                       net.sourceforge.jtds.jdbcx.proxy",
>> 
>> 
>> net.sourceforge.jtds.jdbcx.proxy;uses:="net.sourceforge.jtds.jdbc,net.sourceforge.jtds.jdbcx",
>> 
>>       net.sourceforge.jtds.ssl;uses:="javax.net.ssl,javax.net
>> ,net.sourceforge.jtds.util",
>> 
>> 
>> net.sourceforge.jtds.util;uses:="net.sourceforge.jtds.jdbc,javax.crypto.spec,javax.crypto"
>> 
>> 
>> 
>> *And for JCIFS, which is required by JTDS*
>> 
>> 
>> 
>> JBossFuse:karaf@root> osgi:headers 283
>> 
>> 
>> 
>> 
>> 
>> wrap_mvn_jcifs_jcifs_1.3.17 (283)
>> 
>> ---------------------------------
>> 
>> Manifest-Version = 1.0
>> 
>> Bnd-LastModified = 1381486791455
>> 
>> Archiver-Version = Plexus Archiver
>> 
>> Tool = Bnd-0.0.357
>> 
>> Originally-Created-By = Apache Maven
>> 
>> Built-By = ajvanerp
>> 
>> Generated-By-Ops4j-Pax-From = wrap:mvn:jcifs/jcifs/1.3.17
>> 
>> Build-Jdk = 1.6.0_29
>> 
>> Created-By = 1.7.0_25 (Oracle Corporation)
>> 
>> 
>> 
>> 
>> 
>> Bundle-Name = wrap_mvn_jcifs_jcifs_1.3.17
>> 
>> Bundle-SymbolicName = wrap_mvn_jcifs_jcifs_1.3.17
>> 
>> Bundle-Version = 0
>> 
>> Bundle-ManifestVersion = 2
>> 
>> 
>> 
>> 
>> 
>> Import-Package =
>> 
>>       javax.servlet;resolution:=optional,
>> 
>>       javax.servlet.http;resolution:=optional,
>> 
>>       jcifs;resolution:=optional,
>> 
>>       jcifs.dcerpc;resolution:=optional,
>> 
>>       jcifs.dcerpc.msrpc;resolution:=optional,
>> 
>>       jcifs.dcerpc.ndr;resolution:=optional,
>> 
>>       jcifs.http;resolution:=optional,
>> 
>>       jcifs.https;resolution:=optional,
>> 
>>       jcifs.netbios;resolution:=optional,
>> 
>>       jcifs.ntlmssp;resolution:=optional,
>> 
>>       jcifs.smb;resolution:=optional,
>> 
>>       jcifs.util;resolution:=optional,
>> 
>>       jcifs.util.transport;resolution:=optional
>> 
>> Export-Package =
>> 
>>       jcifs;uses:="jcifs.util,jcifs.netbios",
>> 
>> 
>> jcifs.dcerpc;uses:="jcifs.util,jcifs.dcerpc.ndr,jcifs.dcerpc.msrpc,jcifs.smb",
>> 
>>       jcifs.dcerpc.msrpc;uses:="jcifs.smb,jcifs.dcerpc,jcifs.dcerpc.ndr",
>> 
>>       jcifs.dcerpc.ndr;uses:=jcifs.util,
>> 
>> 
>> jcifs.http;uses:="javax.servlet,jcifs.util,jcifs.smb,jcifs,jcifs.netbios,javax.servlet.http,jcifs.ntlmssp",
>> 
>>       jcifs.https;uses:=jcifs.http,
>> 
>>       jcifs.netbios;uses:="jcifs.util,jcifs.smb,jcifs",
>> 
>>       jcifs.ntlmssp;uses:="jcifs,jcifs.util,jcifs.netbios,jcifs.smb",
>> 
>> 
>> jcifs.smb;uses:="jcifs.util,jcifs,jcifs.ntlmssp,jcifs.dcerpc.msrpc,jcifs.dcerpc.ndr,jcifs.dcerpc,jcifs.util.transport,jcifs.netbios",
>> 
>>       jcifs.util,
>> 
>>       jcifs.util.transport;uses:=jcifs.util
>> 
>> 
>> 
>> 
>> 
>> *Now, for my bundle that I have deployed I have listed the imports, (I've
>> hightlighted the import of JTDS, so, this has come from the POM setting):*
>> 
>> 
>> 
>> 
>> 
>> JBossFuse:karaf@root> packages:imports 282
>> 
>> System Bundle (0): javax.xml.bind.annotation; version=2.2.1
>> 
>> Spring Beans (105): org.springframework.beans; version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.annotation;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory; version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory.access;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory.access.el;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory.annotation;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory.config;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory.parsing;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory.serviceloader;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory.support;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory.wiring;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.factory.xml;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.propertyeditors;
>> version=3.1.3.RELEASE
>> 
>> Spring Beans (105): org.springframework.beans.support; version=3.1.3.RELEASE
>> 
>> activemq-osgi (114): org.apache.activemq.camel.component;
>> version=5.8.0.redhat-60024
>> 
>> camel-core (130): org.apache.camel; version=2.10.0.redhat-60024
>> 
>> Apache ServiceMix :: Specs :: JSR-311 API 1.1.1 (145): javax.ws.rs;
>> version=1.1.1
>> 
>> camel-cxf (194): org.apache.camel.component.cxf; version=2.10.0.redhat-60024
>> 
>> camel-cxf (194): org.apache.camel.component.cxf.blueprint;
>> version=2.10.0.redhat-60024
>> 
>> camel-cxf (194): org.apache.camel.component.cxf.converter;
>> version=2.10.0.redhat-60024
>> 
>> camel-cxf (194): org.apache.camel.component.cxf.cxfbean;
>> version=2.10.0.redhat-60024
>> 
>> camel-cxf (194): org.apache.camel.component.cxf.feature;
>> version=2.10.0.redhat-60024
>> 
>> camel-cxf (194): org.apache.camel.component.cxf.interceptors;
>> version=2.10.0.redhat-60024
>> 
>> camel-cxf (194): org.apache.camel.component.cxf.jaxrs;
>> version=2.10.0.redhat-60024
>> 
>> camel-cxf (194): org.apache.camel.component.cxf.spring;
>> version=2.10.0.redhat-60024
>> 
>> camel-cxf (194): org.apache.camel.component.cxf.util;
>> version=2.10.0.redhat-60024
>> 
>> Spring JDBC (244): org.springframework.jdbc.datasource;
>> version=3.1.3.RELEASE
>> 
>> camel-sql (245): org.apache.camel.component.sql; version=2.10.0.redhat-60024
>> 
>> *wrap_mvn_net.sourceforge_jtds_1.3.1 (278): net.sourceforge.jtds.jdbc;
>> version=0.0.0*
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> My bundle deploys fine:
>> 
>> [ 282] [Active     ] [            ] [Started] [   60] rest.proxy
>> (0.0.1.SNAPSHOT)
>> 
>> 
>> 
>> 
>> 
>> But when I hit the rest proxy exposed by Camel (JAX-RS consumer) it has to
>> make a a database lookup.  I get this error:
>> 
>> 
>> 
>> *Caused by: java.sql.SQLException: No suitable driver found for
>> jdbc:jtds:sqlserver://?????;databaseName=?????;tds=8.0;lastupdatecount=true*
>> 
>> 
>> 
>> 
>> 
>> Now, I'm no expert on OSGI, having used it in the past a little for not for
>> a while.  I cannot see anything obvious to what I'm doing wrong.
>> 
>> 
>> 
>> I've gone through some earlier errors and fixed them by making sure the
>> JARs export the right packages, and the Import package is put in on my
>> Bundle.
>> 
>> 
>> 
>> Any help much appreciated.
> 

Reply via email to