Hi,

The org.osgi.service.jdbc.DataSourceFactory service is an OSGi standard, not 
part of Karaf (hence the org.osgi package name). You can find the specification 
chapter in the OSGi compendium. If you look at the H2 bundle you'll also see 
that H2 actually implements this standard directly. 

Anyway, your problem occurs because you are passing a String class name to 
DBCP. DBCP is then attempting to dynamically load this class, which fails 
because the DBCP bundle has no visibility of the database implementation class 
(which is as it should be). Effectively the BasicDataSource can't be configured 
safely in OSGi because of this. 

You can assemble a DBCP pool in your blueprint file, using the 
DataSourceFactory service to get hold of a DataSource or Driver, and setting up 
the pool using a set of beans (this is described in the DBCP docs for custom 
pool setup). 

If you insist on not using the standard then you need to embed the whole of 
DBCP into your bundle and add the imports for the database drivers, which is 
even smellier than what was being suggested in my previous email as you will 
also drag in DBCP's dependencies. 

Another standard (technically a draft pending release later this year) that 
would probably help you is OSGi Transaction Control. This makes it a lot easier 
to safely get hold of a database connection and to use it in transactions. 
There's an implementation of this hosted at Apache Aries if you're interested.

Tim

Sent from my iPhone

> On 1 Jul 2017, at 23:17, smunro <stephen.ross.mu...@gmail.com> wrote:
> 
> Hello Timothy,
> 
> Thanks for the quick reply.
> 
> The issue is that my manager is pushing me to be container agnostic and to
> avoid tying myself to Karaf. Personally, I'd rather use pax-jdbc but I am
> not permitted to do so and I agree about your comment regarding code smells
> for tying to a specific jdbc implementation.
> 
> What I have at the moment is a blueprint file with a dbcp BasicDataSource,
> this file has two configurations. One for sql server and another for h2. I
> had a lot of of trouble getting SQL Server to work using the data source
> strategy, which was enough for my manager to push me to use a direct
> connection for both.
> 
> I've tried both setting the Bundle-Classpath and Import-Package with org.h2
> and both seem to result in an error. I have h2 defined as a pom dependency,
> is there anything else I am missing?
> 
> 
> 
> --
> View this message in context: 
> http://karaf.922171.n3.nabble.com/java-lang-ClassNotFoundException-org-h2-Driver-from-bundle-tp4050894p4050897.html
> Sent from the Karaf - User mailing list archive at Nabble.com.

Reply via email to