aries-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brunner Basil <ba...@entwinemedia.com>
Subject Blueprint service dependencies
Date Thu, 19 Apr 2012 15:34:17 GMT
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



Mime
View raw message