hibernate - connecting to PostgreSQL from OSGi application deployed in Karaf container -
i'm using hibernate connect postgresql karaf 2.3.4 container, when deploy bundle there exception saying javax.naming.namenotfoundexception osgi:service/javax.sql.datasource/"(osgi.jndi.service.name=jdbc/postgresds).
here persistance.xml file
<?xml version="1.0" encoding="utf-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" version="1.0"> <persistence-unit name="hibernateosgi_containermanaged" transaction-type="jta"> <jta-data-source>osgi:service/javax.sql.datasource/(osgi.jndi.service.name=jdbc/postgresds)</jta-data-source> <class>org.hibernate.osgitest.entity.datapoint</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.postgresqldialect" /> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="hibernate.archive.autodetection" value="class" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> </properties> </persistence-unit> </persistence>
here blueprint.xml file:
<?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"> <bean id="dpservice" class="org.hibernate.osgitest.datapointserviceimpl"> <jpa:context unitname="hibernateosgi_containermanaged" property="entitymanager" /> <tx:transaction method="*" value="required" /> </bean> <service ref="dpservice" interface="org.hibernate.osgitest.datapointservice" /> <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0"> <command name="dp/add"> <action class="org.hibernate.osgitest.command.addcommand"> <property name="dpservice" ref="dpservice" /> </action> </command> <command name="dp/getall"> <action class="org.hibernate.osgitest.command.getallcommand"> <property name="dpservice" ref="dpservice" /> </action> </command> <command name="dp/deleteall"> <action class="org.hibernate.osgitest.command.deleteallcommand"> <property name="dpservice" ref="dpservice" /> </action> </command> </command-bundle> </blueprint>
and here datasource-postgres.xml file
<?xml version="1.0" encoding="utf-8"?> <!-- install driver in karaf. no bundle use wrap protocol create suitable manifest on fly: > install -s wrap:mvn:postgresql/postgresql/9.1-901.jdbc4 last step copy file deploy folder --> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> <bean id="datasource" class="org.postgresql.ds.pgpoolingdatasource" destroy-method="close"> <property name="servername" value="localhost:5432/postgres" /> <property name="user" value="postgres" /> <property name="password" value="159357123" /> <property name="datasourcename" value="postgresds" /> </bean> <service interface="javax.sql.datasource" ref="datasource"> <service-properties> <entry key="osgi.jndi.service.name" value="jdbc/postgresds" /> </service-properties> </service> </blueprint>
and here features.xml:
<?xml version="1.0" encoding="utf-8"?> <features> <feature name="hibernate-test"> <feature>karaf-framework</feature> <!-- jta --> <config name="org.apache.aries.transaction"> aries.transaction.recoverable = true aries.transaction.timeout = 600 aries.transaction.howl.logfiledir = ${karaf.data}/txlog aries.transaction.howl.maxlogfiles = 2 aries.transaction.howl.maxblocksperfile = 512 aries.transaction.howl.buffersizekbytes = 4 </config> <bundle start-level="30">mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1 </bundle> <bundle start-level="30">mvn:org.apache.aries.transaction/org.apache.aries.transaction.blueprint/1.0.0 </bundle> <bundle start-level="30">mvn:org.apache.aries.transaction/org.apache.aries.transaction.manager/1.0.1 </bundle> <!-- jpa --> <!-- <bundle start-level="30">mvn:org.hibernate.javax.persistence/hibernate-jpa-2.1-api/1.0.0-snapshot</bundle> --> <bundle start-level="30">mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/1.1 </bundle> <bundle start-level="30">mvn:org.apache.aries/org.apache.aries.util/1.0.0 </bundle> <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.api/1.0.0 </bundle> <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.blueprint.aries/1.0.0 </bundle> <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.container/1.0.0 </bundle> <bundle start-level="30">mvn:org.apache.aries.jpa/org.apache.aries.jpa.container.context/1.0.1 </bundle> <!-- jndi --> <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.api/1.0.0 </bundle> <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.core/1.0.0 </bundle> <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.rmi/1.0.0 </bundle> <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.url/1.0.0 </bundle> <bundle start-level="30">mvn:org.apache.aries.jndi/org.apache.aries.jndi.legacy.support/1.0.0 </bundle> <feature>jdbc</feature> <!-- taken karaf-tutorial --> <bundle>mvn:org.hibernate.common/com.springsource.org.hibernate.annotations.common/4.1.0.final</bundle> <bundle>mvn:commons-collections/commons-collections/3.2.1</bundle> <bundle>mvn:commons-pool/commons-pool/1.5.4</bundle> <bundle>mvn:commons-dbcp/commons-dbcp/1.4</bundle> <bundle>mvn:commons-lang/commons-lang/2.6</bundle> <bundle>wrap:mvn:net.sourceforge.serp/serp/1.13.1</bundle> <!-- these not natively support osgi, using 3rd party bundles. --> <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.antlr/2.7.7_5 </bundle> <bundle>mvn:org.jboss.javassist/com.springsource.javassist/3.15.0.ga </bundle> <bundle>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jsr303-api-1.0.0/2.2.0 </bundle> <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.ant/1.8.2_2 </bundle> <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.dom4j/1.6.1_5 </bundle> <bundle>wrap:mvn:postgresql/postgresql/9.1-901.jdbc4</bundle> <!--<bundle>mvn:mysql/mysql-connector-java/5.1.18</bundle>--> <bundle>blueprint:file:c:/users/yahya/desktop/examples/nouveau/hibernateosgi-master/datasource-postgres.xml </bundle> <!-- these not natively support osgi, wrap bnd. --> <bundle>wrap:mvn:org.jboss/jandex/1.1.0.alpha1</bundle> <bundle>wrap:mvn:org.hibernate.common/hibernate-commons-annotations/4.0.1.final</bundle> <bundle>mvn:com.fasterxml/classmate/0.5.4</bundle> <bundle>mvn:org.jboss.logging/jboss-logging/3.1.0.ga</bundle> <!-- jacc optional. --> <!--<bundle>mvn:javax.servlet/javax.servlet-api/3.0.1</bundle> <bundle>mvn:org.jboss.spec.javax.security.jacc/jboss-jacc-api_1.4_spec/1.0.2.final</bundle> --> <!-- hibernate-validator optional. --> <!--<bundle>wrap:mvn:javax.validation/validation-api/1.0.0.ga</bundle> <bundle>mvn:org.hibernate/hibernate-validator/4.2.0.final</bundle> --> <bundle>mvn:org.hibernate/hibernate-core/4.2.2.final</bundle> <bundle>mvn:org.hibernate/hibernate-entitymanager/4.2.2.final</bundle> <!-- todo: seems persistence unit bundle needs started before hibernate-osgi. when bundleactivator started, persistence unit provided though hibernateosgi_containermanaged hasn't started yet. if happens, you'll "illegal bundle state" exception. there way activator watch bundles pus before registering persistence provider? --> <bundle>mvn:org.hibernate/hibernateosgi_containermanaged/1.0.0 </bundle> <bundle>mvn:org.hibernate/hibernate-osgi/4.2.2.final</bundle> </feature> </features>
the full stacktrace is:
javax.naming.namenotfoundexception: osgi:service/javax.sql.datasource/"(osgi.jndi.service.name=jdbc/postgresds)" @ org.apache.aries.jndi.url.serviceregistrycontext.lookup(serviceregistrycontext.java:113)[72:org.apache.aries.jndi.url:1.0.0] @ org.apache.aries.jndi.url.serviceregistrycontext.lookup(serviceregistrycontext.java:144)[72:org.apache.aries.jndi.url:1.0.0] @ org.apache.aries.jndi.delegatecontext.lookup(delegatecontext.java:161)[70:org.apache.aries.jndi.core:1.0.0] @ javax.naming.initialcontext.lookup(initialcontext.java:411)[:1.7.0_51] @ org.apache.aries.jpa.container.unit.impl.jndidatasource.getds(jndidatasource.java:65)[67:org.apache.aries.jpa.container:1.0.0] @ org.apache.aries.jpa.container.unit.impl.delayedlookupdatasource.getconnection(delayedlookupdatasource.java:36)[67:org.apache.aries.jpa.container:1.0.0] @ org.hibernate.ejb.connection.injecteddatasourceconnectionprovider.getconnection(injecteddatasourceconnectionprovider.java:70)[91:org.hibernate.entitymanager:4.2.2.final] @ org.hibernate.engine.jdbc.internal.jdbcservicesimpl$connectionproviderjdbcconnectionaccess.obtainconnection(jdbcservicesimpl.java:242)[90:org.hibernate.core:4.2.2.final] @ org.hibernate.engine.jdbc.internal.jdbcservicesimpl.configure(jdbcservicesimpl.java:117)[90:org.hibernate.core:4.2.2.final] @ org.hibernate.service.internal.standardserviceregistryimpl.configureservice(standardserviceregistryimpl.java:75)[90:org.hibernate.core:4.2.2.final] @ org.hibernate.service.internal.abstractserviceregistryimpl.initializeservice(abstractserviceregistryimpl.java:159)[90:org.hibernate.core:4.2.2.final] @ org.hibernate.service.internal.abstractserviceregistryimpl.getservice(abstractserviceregistryimpl.java:131)[90:org.hibernate.core:4.2.2.final] @ org.hibernate.cfg.configuration.buildtyperegistrations(configuration.java:1797)[90:org.hibernate.core:4.2.2.final] @ org.hibernate.cfg.configuration.buildsessionfactory(configuration.java:1755)[90:org.hibernate.core:4.2.2.final] @ org.hibernate.ejb.entitymanagerfactoryimpl.(entitymanagerfactoryimpl.java:96)[91:org.hibernate.entitymanager:4.2.2.final] @ org.hibernate.ejb.ejb3configuration.buildentitymanagerfactory(ejb3configuration.java:914)[91:org.hibernate.entitymanager:4.2.2.final] @ org.hibernate.osgi.osgipersistenceprovider.createcontainerentitymanagerfactory(osgipersistenceprovider.java:99)[96:org.hibernate.osgi:4.2.2.final] @ org.apache.aries.jpa.container.impl.entitymanagerfactorymanager.createentitymanagerfactories(entitymanagerfactorymanager.java:329)[67:org.apache.aries.jpa.container:1.0.0] @ org.apache.aries.jpa.container.impl.entitymanagerfactorymanager.registerentitymanagerfactories(entitymanagerfactorymanager.java:242)[67:org.apache.aries.jpa.container:1.0.0] @ org.apache.aries.jpa.container.impl.entitymanagerfactorymanager.bundlestatechange(entitymanagerfactorymanager.java:185)[67:org.apache.aries.jpa.container:1.0.0] @ org.apache.aries.jpa.container.impl.persistencebundlemanager.setupmanager(persistencebundlemanager.java:394)[67:org.apache.aries.jpa.container:1.0.0] @ org.apache.aries.jpa.container.impl.persistencebundlemanager.addingservice(persistencebundlemanager.java:209)[67:org.apache.aries.jpa.container:1.0.0] @ org.osgi.util.tracker.servicetracker$tracked.customizeradding(servicetracker.java:932)[karaf.jar:2.3.4] @ org.osgi.util.tracker.servicetracker$tracked.customizeradding(servicetracker.java:1)[karaf.jar:2.3.4] @ org.osgi.util.tracker.abstracttracked.trackadding(abstracttracked.java:256)[karaf.jar:2.3.4] @ org.osgi.util.tracker.abstracttracked.track(abstracttracked.java:229)[karaf.jar:2.3.4] @ org.osgi.util.tracker.servicetracker$tracked.servicechanged(servicetracker.java:894)[karaf.jar:2.3.4] @ org.apache.felix.framework.util.eventdispatcher.invokeservicelistenercallback(eventdispatcher.java:932)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.util.eventdispatcher.fireeventimmediately(eventdispatcher.java:793)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.util.eventdispatcher.fireserviceevent(eventdispatcher.java:543)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.felix.fireserviceevent(felix.java:4260)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.felix.registerservice(felix.java:3275)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.bundlecontextimpl.registerservice(bundlecontextimpl.java:346)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.bundlecontextimpl.registerservice(bundlecontextimpl.java:320)[org.apache.felix.framework-4.0.3.jar:] @ org.hibernate.osgi.hibernatebundleactivator.start(hibernatebundleactivator.java:80)[96:org.hibernate.osgi:4.2.2.final] @ org.apache.felix.framework.util.secureaction.startactivator(secureaction.java:645)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.felix.activatebundle(felix.java:1977)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.felix.startbundle(felix.java:1895)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.bundleimpl.start(bundleimpl.java:944)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.felix.framework.bundleimpl.start(bundleimpl.java:931)[org.apache.felix.framework-4.0.3.jar:] @ org.apache.karaf.features.internal.featuresserviceimpl.installfeatures(featuresserviceimpl.java:488)[25:org.apache.karaf.features.core:2.3.4] @ org.apache.karaf.features.internal.featuresserviceimpl.installfeature(featuresserviceimpl.java:405)[25:org.apache.karaf.features.core:2.3.4] @ org.apache.karaf.features.internal.featuresserviceimpl.installfeature(featuresserviceimpl.java:401)[25:org.apache.karaf.features.core:2.3.4] @ org.apache.karaf.features.command.installfeaturecommand.doexecute(installfeaturecommand.java:62)[27:org.apache.karaf.features.command:2.3.4] @ org.apache.karaf.features.command.featurescommandsupport.doexecute(featurescommandsupport.java:41)[27:org.apache.karaf.features.command:2.3.4] @ org.apache.karaf.shell.console.osgicommandsupport.execute(osgicommandsupport.java:38)[14:org.apache.karaf.shell.console:2.3.4] @ org.apache.felix.gogo.commands.basic.abstractcommand.execute(abstractcommand.java:35)[14:org.apache.karaf.shell.console:2.3.4] @ org.apache.felix.gogo.runtime.commandproxy.execute(commandproxy.java:78)[14:org.apache.karaf.shell.console:2.3.4] @ org.apache.felix.gogo.runtime.closure.executecmd(closure.java:474)[14:org.apache.karaf.shell.console:2.3.4] @ org.apache.felix.gogo.runtime.closure.executestatement(closure.java:400)[14:org.apache.karaf.shell.console:2.3.4] @ org.apache.felix.gogo.runtime.pipe.run(pipe.java:108)[14:org.apache.karaf.shell.console:2.3.4] @ org.apache.felix.gogo.runtime.closure.execute(closure.java:183)[14:org.apache.karaf.shell.console:2.3.4] @ org.apache.felix.gogo.runtime.closure.execute(closure.java:120)[14:org.apache.karaf.shell.console:2.3.4] @ org.apache.felix.gogo.runtime.commandsessionimpl.execute(commandsessionimpl.java:89)[14:org.apache.karaf.shell.console:2.3.4] @ org.apache.karaf.shell.console.jline.console.run(console.java:183)[14:org.apache.karaf.shell.console:2.3.4] @ java.lang.thread.run(thread.java:744)[:1.7.0_51]
i resolved problem , updated list of files said m. cristian other strange problem : when restarting karaf , trying insert data through karaf console console print: no active transaction, tried other way using entitymanager , problem doesn't appear anymore.
your code can not work datasource published in same blueprint context persistence unit used.
the problem blueprint wait enititymanagerfactory service inject. datasource never published. aries jpa detect should create entitymanagerfactory bundle timeout trying find datasource.
so put datasource spearate bundle , should work.
Comments
Post a Comment