I need some help with troubleshooting why my persistence unit is not loaded in Karaf using Hibernate. The log file reports
Bundle com.vogelware.simple.remote.combined is waiting for dependencies [(&(&(org.apache.aries.jpa.proxy.factory=true)(osgi.unit.name=person)(objectClass=javax.persistence.EntityManagerFactory))].
I think the issue is the EntityManagerFactory service is not running. Based on SO message Jpa-hibernate error while starting the service all of the required services are running. See below.
I have tried starting my persistence bundle before hibernate bundles but get the same behavior.
Listed below are the blueprints for datasource, persistence and persistence.xml.
Any suggestions on how to get this simple example running?
Features and bundles with version installed
karaf@root> feature:list -i
Name | Version | Installed | Repository | Description
-------------------------------------------------------------------------------------------------------------------------
standard | 3.0.1 | x | standard-3.0.1 | Karaf standard feature
config | 3.0.1 | x | standard-3.0.1 | Provide OSGi ConfigAdmin support
region | 3.0.1 | x | standard-3.0.1 | Provide Region Support
package | 3.0.1 | x | standard-3.0.1 | Package commands and mbeans
http | 3.0.1 | x | standard-3.0.1 | Implementation of the OSGI HTTP Service
kar | 3.0.1 | x | standard-3.0.1 | Provide KAR (KARaf archive) support
ssh | 3.0.1 | x | standard-3.0.1 | Provide a SSHd server on Karaf
management | 3.0.1 | x | standard-3.0.1 | Provide a JMX MBeanServer and a set of MBeans in K
transaction | 1.0.1 | x | enterprise-3.0.1 | OSGi Transaction Manager
jpa | 1.0.1 | x | enterprise-3.0.1 | OSGi Persistence Container
hibernate | 4.3.1.Final | x | enterprise-3.0.1 | Hibernate 4.3.x JPA persistence engine support
jndi | 3.0.1 | x | enterprise-3.0.1 | OSGi Service Registry JNDI access
pax-jetty | 8.1.14.v20131031 | x | org.ops4j.pax.web-3.1.0 | Provide Jetty engine support
pax-http | 3.1.0 | x | org.ops4j.pax.web-3.1.0 | Implementation of the OSGI HTTP Service
karaf@root> bundle:list
START LEVEL 100 , List Threshold: 50
ID | State | Lvl | Version | Name
---------------------------------------------------------------------------------------
86 | Active | 80 | 3.0.1 | Apache Karaf :: JNDI :: Command
114 | Active | 80 | 2.7.7.5 | Apache ServiceMix :: Bundles :: antlr
115 | Active | 80 | 1.8.2.2 | Apache ServiceMix :: Bundles :: ant
116 | Active | 80 | 1.6.1.5 | Apache ServiceMix :: Bundles :: dom4j
117 | Active | 80 | 1.14.1.1 | Apache ServiceMix :: Bundles :: serp
118 | Active | 80 | 0.9.0 | ClassMate
119 | Active | 80 | 3.18.1.GA | Javassist
120 | Active | 80 | 1.0.2.Final | JACC 1.4 API
121 | Active | 80 | 0 | wrap_mvn_org.jboss_jandex_1.1.0.Final
122 | Active | 80 | 3.1.4.GA | JBoss Logging 3
123 | Active | 80 | 4.0.4.Final | hibernate-commons-annotations
124 | Active | 100 | 4.3.1.Final | hibernate-core
125 | Active | 100 | 4.3.1.Final | hibernate-entitymanager
126 | Active | 100 | 4.3.1.Final | hibernate-osgi
127 | Active | 80 | 10.10.1000001.1458268 | Apache Derby 10.10
128 | Active | 80 | 0.0.0 | derby-datasource.xml
129 | GracePeriod | 80 | 0.1.0.201411290933 | Remote with JPA
130 | Active | 80 | 0.1.0.201411280737 | Simple Model API
Running services for EntityManager
karaf@root(service)> list javax.transaction.TransactionManager
[org.apache.aries.transaction.AriesTransactionManager, javax.transaction.TransactionManager, javax.transaction.TransactionSynchroniz
ationRegistry, javax.transaction.UserTransaction, org.apache.geronimo.transaction.manager.RecoverableTransactionManager]
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
service.id = 662
Provided by :
Apache Aries Transaction Manager (93)
Used by:
Aries JPA Container Managed Contexts (91)
karaf@root(service)> list DataSource
[javax.sql.DataSource]
----------------------
osgi.jndi.service.name = jdbc/MotorDB
osgi.service.blueprint.compname = MotorDB
service.id = 713
Provided by :
Bundle 130 (my datasource bundle)
@root(service)> list PersistenceProvider
[javax.persistence.spi.PersistenceProvider]
-------------------------------------------
javax.persistence.provider = org.hibernate.jpa.HibernatePersistenceProvider
service.id = 708
Provided by :
hibernate-osgi (125)
Peristence XML
<?xml version="1.0" encoding="UTF-8" ?>
<persistence version="2.0"
xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit name="person" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/MotorDB)</jta-data-source>
<class>com.vogelware.simple.model.impl.jpa.Person</class>
<class>com.vogelware.simple.model.impl.jpa.Address</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
</properties>
</persistence-unit>
</persistence>
Datasource blueprint
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
default-activation="eager">
<bean id="MotorDB" class="org.apache.derby.jdbc.EmbeddedDataSource">
<property name="databaseName" value="D:\dev\projects\EASA-DB\motordb" />
</bean>
<service ref="MotorDB" interface="javax.sql.DataSource">
<service-properties>
<entry key="osgi.jndi.service.name" value="jdbc/MotorDB" />
</service-properties>
</service>
</blueprint>
Persistence beans
<?xml version="1.0" encoding="UTF-8"?>
<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"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0
http://www.w3.org/2001/XMLSchema-instance http://www.w3.org/2001/XMLSchema-instance
http://aries.apache.org/xmlns/jpa/v1.0.0 http://aries.apache.org/xmlns/jpa/v1.0.0
http://aries.apache.org/xmlns/transactions/v1.0.0 http://aries.apache.org/xmlns/transactions/v1.0.0 ">
<bean id="personService" class="com.vogelware.simple.remote.jpa.PersonEntityImplJpa">
<jpa:context unitname="person" property="entityManager" />
<tx:transaction method="*" value="Required" />
</bean>
<service ref="personService"
interface="com.vogelware.simple.service.IPersonEntity">
<service-properties>
<entry key="osgi.jndi.service.name" value="hibernate/con_managed_personService" />
</service-properties>
</service>
</blueprint>