Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] JDBC Driver Class not find using eclipseLink in OSGi

There's currently an OSGi RFC for obtaining JDBC drivers without having to require the provider bundle.  We'll be implementing this support but currently you'll  have to require the bundle that contains your declared driver class.

    Shaun

Daniel.Stucky@xxxxxxxxxxx wrote:
Hi all,

I have implemented an OSGi service using EclipseLink for persisting
data. The persistence-unit is configured to use the
org.apache.derby.jdbc.EmbeddedDriver. When the EntityManager is created
I get the following exception:

Exception [EclipseLink-4003] (Eclipse Persistence Services - 1.0.2
(Build 20081024)): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error.  Class
[org.apache.derby.jdbc.EmbeddedDriver] not found.
	at
org.eclipse.persistence.exceptions.DatabaseException.configurationErrorC
lassNotFound(DatabaseException.java:81)
	at
org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(Defaul
tConnector.java:265)
	at
org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnect
or.java:84)
	at
org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(Dat
asourceLogin.java:164)
	at
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.conne
ctInternal(DatasourceAccessor.java:324)
	at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connect
Internal(DatabaseAccessor.java:264)
	at
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.conne
ct(DatasourceAccessor.java:407)
	at
org.eclipse.persistence.sessions.server.ConnectionPool.buildConnection(C
onnectionPool.java:130)
	at
org.eclipse.persistence.sessions.server.ConnectionPool.startUp(Connectio
nPool.java:367)
	at
org.eclipse.persistence.sessions.server.ServerSession.connect(ServerSess
ion.java:500)
	at
org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(Data
baseSessionImpl.java:606)
	at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(
EntityManagerFactoryProvider.java:211)
	at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(Entit
yManagerSetupImpl.java:246)
	at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerS
ession(EntityManagerFactoryImpl.java:69)
	at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEnti
tyManagerImpl(EntityManagerFactoryImpl.java:118)
	at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEnti
tyManagerImpl(EntityManagerFactoryImpl.java:112)
	at
org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEnti
tyManager(EntityManagerFactoryImpl.java:100)
	at
org.eclipse.smila.store.recordstore.impl.RecordStoreImpl.activate(Record
StoreImpl.java:79)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at
org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceC
omponent.java:118)
	at
org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(Serv
iceComponentProp.java:149)
	at
org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(Service
ComponentProp.java:290)
	at
org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceP
rocess.java:578)
	at
org.eclipse.equinox.internal.ds.ServiceReg.getService(ServiceReg.java:50
)
	at
org.eclipse.osgi.framework.internal.core.ServiceUse$1.run(ServiceUse.jav
a:108)
	at java.security.AccessController.doPrivileged(Native Method)
	at
org.eclipse.osgi.framework.internal.core.ServiceUse.getService(ServiceUs
e.java:106)
	at
org.eclipse.osgi.framework.internal.core.ServiceRegistrationImpl.getServ
ice(ServiceRegistrationImpl.java:345)
	at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.getService(Bu
ndleContextImpl.java:884)
	at
org.eclipse.equinox.internal.ds.InstanceProcess.getService(InstanceProce
ss.java:640)
	at
org.eclipse.equinox.internal.ds.model.ComponentReference.getMethod(Compo
nentReference.java:110)
	at
org.eclipse.equinox.internal.ds.model.ComponentReference.bind(ComponentR
eference.java:301)
	at
org.eclipse.equinox.internal.ds.model.ServiceComponentProp.bindReference
(ServiceComponentProp.java:370)
	at
org.eclipse.equinox.internal.ds.InstanceProcess.dynamicBind(InstanceProc
ess.java:408)
	at
org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:313)
	at
org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.jav
a:213)
	at
org.eclipse.osgi.framework.internal.core.FilteredServiceListener.service
Changed(FilteredServiceListener.java:94)
	at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent
(BundleContextImpl.java:1224)
	at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventMana
ger.java:195)
	at
org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchrono
us(ListenerQueue.java:141)
	at
org.eclipse.osgi.framework.internal.core.Framework.publishServiceEventPr
ivileged(Framework.java:1603)
	at
org.eclipse.osgi.framework.internal.core.Framework.publishServiceEvent(F
ramework.java:1578)
	at
org.eclipse.osgi.framework.internal.core.ServiceRegistrationImpl.<init>(
ServiceRegistrationImpl.java:103)
	at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.createService
Registration(BundleContextImpl.java:657)
	at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerServi
ce(BundleContextImpl.java:609)
	at
org.eclipse.equinox.internal.ds.InstanceProcess.registerService(Instance
Process.java:492)
	at
org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(Instance
Process.java:188)
	at
org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.ja
va:443)
	at
org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:
187)
	at
org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:6
60)
	at
org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager
.java:627)
	at
org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:89)
	at java.lang.Thread.run(Thread.java:595)


If I add org.apache.derby.jdbc to the import packages of my bundle
containing the service the driver class is found, of course.
However, I don't want to add any dependencies on JDBC drivers to my
bundle manifest. That would mean that besides using EclipseLink my
bundle would only work with those databases for which JDBC drivers are
imported in my bundle.
It should be possible to switch to different databases by configuring
the properties in persistence.xml and not having to adopt imports in the
manifest!

Are there any solutions available for this problem? 

Bye,
Daniel


_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
  

--
Oracle

Shaun Smith | Principal Product Manager | Phone: +19055023094
Oracle Server Technologies, Oracle TopLink
ORACLE Canada | 110 Matheson Boulevard West, Suite 100, Mississauga, Ontario | L5R 3P4
Green Oracle Oracle is committed to developing practices and products that help protect the environment

Back to the top