Подключение к PostgreSQL из приложения OSGI развернуто в контейнере Karaf

StackOverflow https://stackoverflow.com//questions/23057562

Вопрос

Я использую Hibernate для подключения к PostgreSQL из контейнера KARAF 2.3.4, когда я развернул мой пакет, есть исключение, говоря Javax.Naming.nomenotfoundException OSGI: Service / javax.sql.dataSource / "(Osgi.jndi. .service.name= JDBC / postgresds).

Вот мой файл сохранения .xml

<?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>
.

Вот мой файл blueprint.xml:

  <?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>
.

А вот мои данные DataSource-postgres.xml файл

<?xml version="1.0" encoding="UTF-8"?>
<!--

Install the driver in Karaf. As it is no bundle we use the wrap protocol to create a suitable Manifest on the fly:
> install -s wrap:mvn:postgresql/postgresql/9.1-901.jdbc4

As a last step copy this file to the 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>
.

А вот мои особенности .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 from 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 do not natively support OSGi, so 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 do not natively support OSGi, so wrap with 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 is 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 is 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: It seems that the persistence unit bundle needs to be started 
            before hibernate-osgi. When the BundleActivator is started, the persistence 
            unit is provided even though HibernateOSGi_ContainerManaged hasn't completely 
            started yet. If that happens, you'll get an "illegal bundle state" exception. 
            Is there a way for the activator to watch for bundles with PUs before registering 
            the 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>
.

полный штабел:

javax.naming.nomenotfoundException: OSGI: Service / javax.sql.dataSource / "(OSGI.jndi.service.name= JDBC / PostgreSds) ap org.apache.ary.jndi.url.serviceregistrycontext.lookup (serviceregistrycontext.java:113) [72: org.apache.ary.jndi.url: 1.0.0] ap org.apache.ary.jndi.url.serviceregistrycontext.lookup (serviceregistrycontext.java:144) [72: org.apache.ary.jndi.url: 1.0.0] ap org.apache.ary.jndi.delegateContext.lookup (delegateContext.java:161) [70: org.apache.ary.jndi.core: 1.0.0] на javax.naming.initialcontext.lookup (initialcontext.java:411) [: 1.7.0_51] ap org.apache.ary.jpa.container.unit.impl.jndidataSource.getds (jndidatatasource.java:65) [67: org.apache.ary.jpa.container: 1.0.0] ap org.apache.ary.jpa.container.unit.impl.delayedlookupdataSource.getconnection (delayedlookupdatasource.java:36) [67: org.apache.are.jpa.container: 1.0.0] ap org.hibernate.ejb.connection.injectedDataSourConnectionProvider.getConnection (injecteddatasourconnectionProvider.java:70) [91: org.hivernate.entitymanager: 4.2.2.fine] на org.hibernate.engine.jdbc.internal.jdbcserviceimpl $ connectionproviderjdbcondecnectionCcess.obtainconnection (JDBCSERVICESIMPL.java:242) [90: org.hibernate.core: 4.2.2.fine] в org.hibernate.engine.jdbc.internal.jdbcserviceimpl.Configure (JDBCSERVICESIMPL.java:117) [90: org.hibernate.core: 4.2.2.final] в org.hibernate.service.internal.strandardarserviceregistryImpl.ConfiguregistryImpl.configureService (ShartserviceRegistryImpl.java:75) [90: org.hibernate.core: 4.2.2.fink] в org.hibernate.service.internal.abstractserviceRegistryimpl.инициализируетervice (AbstruberserviceRegistryImpl.java:159) [90: org.hibernate.core: 4.2.2.fink] в org.hibernate.service.internal.abstractserviceRegistryImpl.getservice (AnaluberserviceregistryImpl.java:131) [90: org.hibernate.core: 4.2.2.fink] в org.hibernate.cfg.configuration.buildtyperegistrations (configuration.java:1797) [90: org.hibernate.core: 4.2.2.fink] на org.hibernate.cfg.configuration.buildsessionsistory (configuration.java:1755) [90: org.hibernate.core: 4.2.2.fine] на org.hibernate.ejb.entitymanagerfactoryimpl. (Entitymanagerfactoryimpl.java:96) [91: org.hibernate.entitymanager: 4.2.2.fine] на org.hibernate.ejb.ejb3configuration.BUildentityManagerFactory (EJB3Configuration.java:914) [91: org.hibernate.entitymanager: 4.2.2.fine] ap org.hibernate.osgi.oSgipersistenceProvider.createContaineRentityManagerFactory (OsgipersistenceProvider.java:9s) [96: org.hibernate.osgi: 4.2.2.finh] ap org.apache.iary.jpa.container.impl.entitymanagerfactorymplager.createentitymanagerfactoriatorforctoriatorfortorions (entitymanagerfactorymanager.java:329) [67: org.apache.ary.jpa.container: 1.0.0] ap org.apache.iary.jpa.container.impl.entitymanagerfactorymanager.registerentitymanagerfactorifortoringserferfactories (entitymanagerfactorymanager.java:242) [67: org.apache.ary.jpa.container: 1.0.0] ap org.apache.iary.jpa.container.impl.entitymanagerfactorymanager.bundlestatechange (entitymanagerfactorymange (entitymanagerfactorymanageer.java:185) [67: org.apache.ary.jpa.container: 1.0.0] ap org.apache.iary.jpa.container.impl.persistencebundlemanager.Setupmandlemanager.Setupmanager (persistencebundlemanager.java:394) [67: org.apache.ary.jpa.container: 1.0.0] ap org.apache.iary.jpa.container.impl.persistencebundlemanager.addingservice (persistencebundlemanager.java:209) [67: org.apache.ary.jpa.container: 1.0.0] на org.osgi.util.tracker.servicetracker $ tracked.customizerAdding (servicetracker.java:932) [Karaf.jar: 2.3.4] ap org.osgi.util.tracker.servicetracker $ tracked.customizerAdding (servicetracker.java:1) [Karaf.jar: 2.3.4] на org.osgi.util.tracker.abstracttracked.trackAdding (Abstrandtracked.java:256) [Karaf.jar: 2.3.4] ap org.osgi.util.tracker.abstracttracked.track (bonetracked.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:] ap org.apache.felix.framework.util.eventddispatcher.fireeventimeddiSpatcher.fireeventimmed (eventdispatcher.java:793) [org.apache.felix.framework-4.0.3.jar:] ap org.apache.felex.framework.util.eventdispatcher.firseviceevent (eventdispatcher.java:543) [org.apache.felix.framework-4.0.3.jar:] в org.apache.felix.framework.felix.firseviceevent (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:] ap org.apache.felix.framework.bundlecontextimpl.registerService (BundlecontextImpl.java:346) [org.apache.felix.framework-4.0.3.jar:] ap org.apache.felix.framework.bundlecontextimpl.RegisterService (Bundlecontextimpl.java:320) [org.apache.felix.framework-4.0.3.jar:] ap org.hibernate.osgi.hibernatebundleактиватор .startbundleактиватор .start (hibernatebundleактиватор.java:80) [96: org.hibernate.osgi: 4.2.2.fine] ap org.apache.felix.framework.util.securracact .startactivator (secureация.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:] ap 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.ffeatures.internal.featuresserviceImpl.installfeatures (featuresserviceimpl.java:488) [25: org.apache.karaf.features.core: 2.3.4] ap org.apache.karaf.ffeatures.internal.featuresserviceImpl.installfeature (featuresserviceImpl.java:405) [25: org.apache.karaf.features.core: 2.3.4] ap 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] ap org.apache.karaf.features.command.featurescommandsupport.doexecute (userscommandsupport.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] ap org.apache.felix.gogo.commands.basic.abstractcommand.execute (AusteCommand.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] ap org.apache.felix.gogo.runtime.clued.executeCMD (Clackure.java:474) [14: org.apache.karaf.shell.console: 2.3.4] ap org.apache.felix.gogo.runtime.Clued.executeStatement (Clackure.java:400) [14: org.apache.karaf.shell.console: 2.3.4] ap org.apache.felix.gogo.runtime.pipe.run (pipe.java:108) [14: org.apache.karaf.shell.console: 2.3.4] ap org.apache.felix.gogo.runtime.Clued.execute (Clackure.java:183) [14: org.apache.karaf.shell.console: 2.3.4] ap org.apache.felix.gogo.runtime.Clued.execute (Clackure.java:120) [14: org.apache.karaf.shell.console: 2.3.4] ap org.apache.felix.gogo.runtime.commange.ruptimpl.execute (commandsessiveImpl.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]

Я решил эту проблему, и я обновил список файлов, как сказал M. Cristian, но является другой странной проблемой: при перезапуске Karaf и попытка вставить данные через консоль Karaf Консоль Print: не активная транзакция, поэтому Я попробовал другой способ, используя EntityManager, и проблема больше не появляется.

Это было полезно?

Решение

Ваш код не может работать, так как DataSource опубликован в том же контексте чертежа, где используется блок постоянства.

Проблема в том, что план будет ждать инъекции службы EnitityManagerFactory.Таким образом, DataSource никогда не будет опубликован.Овен JPA обнаружит, что он должен создать EntityManagerFactory для вашего пакета, но время ожидания попытки найти источника данных.

Так что поставьте источник данных в пучок сковороды, и он должен работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top