In the blog sample we handle this by putting the datasource bundle in
config.ini and then using fileinstall to load the rest of the
application from the load directory, so that it gets loaded second.
However, I have a feeling that we fixed things in trunk a while ago so
that we didn't have a start order dependency for datasources? Does
anyone remember for sure?
Holly
---
Enterprise OSGi in Action: http:///manning.com/cummins
On 20 Apr 2012, at 11:09, Pau Minoves <[email protected]> wrote:
Hi,
I'm having the same problem here. In my case it is intermitent and
happens mostly (maybe only) with pax exam. Sometimes integration
tests fail because of this, if we keep insisting they eventually pass.
In my case, the inner most exception is:
Caused by: javax.naming.NameNotFoundException: osgi:service/
javax.sql.DataSource/"(osgi.jndi.service.name=jdbc/opennaas-
resources)"
at org.apache.aries.jndi.url.ServiceRegistryContext.lookup
(ServiceRegistryContext.java:110)
at org.apache.aries.jndi.url.ServiceRegistryContext.lookup
(ServiceRegistryContext.java:141)
at org.apache.aries.jndi.DelegateContext.lookup
(DelegateContext.java:161)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at
org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getDs(
DelayedLookupDataSource.java:55)
... 43 more
In my case, the dataSource blueprint definition and persistence.xml
are in the same file, but I've no idea if this may impact. Any tips
welcome, thanks!
Best regards,
Pau
On Thu, Apr 19, 2012 at 5:34 PM, Brunner Basil
<[email protected]> wrote:
Hi
I have two OSGi bundles The first one contains only a Blueprint data
source definition:
====================
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<bean id="dataSource" class="org.h2.jdbcx.JdbcDataSource">
<property name="URL" value="jdbc:h2:db/database" />
</bean>
<service interface="javax.sql.DataSource" ref="dataSource">
<service-properties>
<entry key="osgi.jndi.service.name" value="jdbc/database" />
</service-properties>
</service>
</blueprint>
====================
The second bundle contains a JPA persistence file and a blueprint
file:
====================
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
<persistence-unit name="CaptureAgentCore" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</
provider>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
=jdbc/database)</jta-data-source>
<class>ch.entwine.captureagent.scheduler.RecordingEvent</class>
<class>ch.entwine.captureagent.config.ConfigOption</class>
<class>ch.entwine.captureagent.felix.configadmin.ConfigurationData</
class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
</persistence-unit>
</persistence>
<blueprint default-activation="eager"
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
"
xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0" xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0
">
<bean id="SchedulerService"
class="ch.entwine.captureagent.scheduler.Scheduler">
<jpa:context property="entityManager"
unitname="CaptureAgentCore" />
<tx:transaction method="*" value="Required" />
</bean>
<service ref="SchedulerService"
interface="ch.entwine.captureagent.scheduler.Scheduler" depends-
on="dataSource" />
</blueprint>
====================
I ran into the problem that the data source is not yet registered
when the JPA entity manager tries to get a reference to it. Error
message:
2012-04-19 16:17:38 ERROR (DelayedLookupDataSource:57) No JTA
datasource could be located using the JNDI name osgi:service/
javax.sql.DataSource/(osgi.jndi.service.name=jdbc/database)
javax.naming.NameNotFoundException: osgi:service/
javax.sql.DataSource/"(osgi.jndi.service.name=jdbc/database)"
I've now tried to set the 'depends-on' attribute on the
SchedulerService definition in the blueprint file of bundle two (see
above). Unfortunately I get the following error now:
17:19:09 ERROR (BlueprintContainerImpl:348) Unable to start
blueprint container for bundle ch.entwine.matterhorn.core
org.osgi.service.blueprint.container.ComponentDefinitionException:
Unresolved ref/idref to component: dataSource
So, my question is how I can make sure the data source gets
registered before the JPA entity manager gets started?
Thanks for your help!
--
Basil
--
Distributed Applications and Networks Area (DANA)
Fundació i2CAT, Internet i Innovació Digital a Catalunya, Barcelona,
Spain
T: +34 935 679 927 - http://dana.i2cat.net/