Pregunta

Estoy usando Hibernate para conectarme a PostgreSQL desde un contenedor Karaf 2.3.4, cuando implemento mi paquete hay una excepción que dice javax.naming.amenotfoundException OSGI: Service / Javax.SQL.DataSource / "(Osgi.jndi .Service.name= JDBC / Postgresds).

Aquí está mi archivo Persistance.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>

Aquí está mi archivo 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>

y aquí está mi archivo 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>

y aquí está mis características.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>

El stacktrace completo es:

javax.naming.amenotfoundException: OSGI: Service / Javax.SQL.DataSource / "(Osgi.jndi.service.name= JDBC / Postgress)" en org.apache.ars.jndi.url.serviceregistryContext.lookup (ServiceRegistryContext.Java :113) [72: org.apache.ars.jndi.url: 1.0.0] en org.apache.ars.jndi.url.serviceregistryContext.lookup (ServiceRegistryContext.Java:144) [72: org.apache.ars.jndi.url: 1.0.0] en org.apache.arios.jndi.delegatecontext.lookup (Delegatecontext.Java:161) [70: org.apache.aries.jndi.core: 1.0.0] en javax.naming.initialcontext.lookup (InicialContext.Java:411) [: 1.7.0_51] en org.apache.aries.jpa.containener.unit.impl.jndidataurce.getds (jndidatasurce.java:65) [67: org.apache.aries.jpa.container: 1.0.0] en org.apache.aries.jpa.container.unit.impl.delayedlookupdatasource.getconnection (retardedlookupdatasource.java:36) [67: org.apache.aries.jpa.container: 1.0.0] en org.hibernate.ejb.connection.inycheddatasourceconnectionprovider.getconnectection (inyecteddatasourceconnectionprovider.java:70) [91: org.hibernate.entitymanager: 4.2.2.final] en org.hibernate.engine.jdbc.internal.jdbcservicesimpl $ ConnectionProviderjdbcConnectionAccess.ObtainConnection (jdbcservicesimpl.java:242) [90: org.hibernate.core: 4.2.2.final] en org.hibernate.engine.jdbc.internal.jdbcservicesimpl.configure (jdbcservicesimpl.java:117) [90: org.hibernate.core: 4.2.2.final] en org.hibernate.service.internal.standardserviceergistryimpl.configureservice (estándareserviceergistryimpl.java:75) [90: org.hibernate.core: 4.2.2.final] en org.hibernate.service.internal.abstractserviceregistryimpl.initializeservice (abstractserviceregistryimpl.java:159) [90: org.hibernate.core: 4.2.2.final] en org.hibernate.service.internal.abstractserviceregistryimpl.getservice (abstractserviceregistryimpl.java:131) [90: org.hibernate.core: 4.2.2.final] en org.hibernate.cfg.configuration.buildTyPeregistrations (Configuration.Java:1797) [90: org.hibernate.core: 4.2.2.final] en org.hibernate.cfg.configuration.buildSessionFactory (Configuration.Java:1755) [90: org.hibernate.core: 4.2.2.final] en org.HiberNate.EJB.EntityManagerFactoryImpl. (EntityManagerFactoryImpl.Java:96) [91: org.HiberNate.EntityManager: 4.2.2.Final] en org.hibernate.ejb.ejb3configuration.buildentitymanagerfactory (ejb3configuration.java:914) [91: org.hibernate.entitymanager: 4.2.2.final] en org.hibernate.osgi.osgipersistenceProvider.createContanerEntityManagerFactory (OsgipersistenceProvider.Java:99) [96: org.hiberNate.OSGI: 4.2.2.final] en org.apache.aries.jpa.container.impl.entitymanagerfactorymanager.creeEntityManagerFactories (EntityManagerFactoryManager.Java:329) [67: org.apache.aries.jpa.container: 1.0.0] en org.apache.aries.jpa.container.impl.entitymanagerfactorymanager.registerEntityManagerFactories (EntityManagerFactoryManager.Java:242) [67: org.apache.aries.jpa.container: 1.0.0] en org.apache.aries.jpa.container.impl.entitymanagerfactorymanager.bundlestatechange (EntityManagerFactoryManager.Java:185) [67: org.apache.aries.jpa.container: 1.0.0] en org.apache.ies.jpa.containener.impl.persistenceBundlemanager.setupManager (PersistenceBundlemanager.Java:394) [67: org.apache.aries.jpa.container: 1.0.0] en org.apache.aries.jpa.containener.impl.persistenceBundlemanager.AdingService (PersistenceBundLemanager.Java:209) [67: org.apache.aries.jpa.container: 1.0.0] en org.osgi.util.tracker.serviceTracker $ seguimiento.Customizeradding (ServiceTracker.Java:932) [Karaf.jar: 2.3.4] en org.osgi.util.tracker.serviceTracker $ seguimiento.Customizeradding (ServiceTracker.Java:1) [Karaf.jar: 2.3.4] en org.osgi.util.tracker.abstractTracked.Trackadding (AbstractTracked.Java:256) [karaf.jar: 2.3.4] en org.osgi.util.tracker.abstracttracked.track (abstracttracked.java:229) [karaf.jar: 2.3.4] en org.osgi.util.tracker.serviceTracker $ seguimiento.servicechanged (ServiceTracker.Java:894) [Karaf.jar: 2.3.4] en org.apache.felix.framework.util.eventdispatcher.invokeservicelistenercallback (eventdispatcher.java:932) [org.apache.felix.framework-4.0.3.jar:] en org.apache.felix.Framework.Util.Eventdispatcher.fireeVentDispatcher.FireEVentImMediate (EventDispatcher.Java:793) [org.apache.felix.framework-4.0.3.jar:] en org.apache.felix.framework.util.eventdispatcher.fireserviceevent (eventdispatcher.java:543) [org.apache.felix.framework-4.0.3.jar:] en org.apache.felix.framework.felix.fireserviceEvent (felix.java:4260) [org.apache.felix.framework-4.0.3.jar:] en org.apache.felix.Framework.felix.Registerservice (Felix.Java:3275) [org.apache

.felix.Framework-4.0.3.jar:] en org.apache.felix.framework.bundlecontextimpl.registerservice (bundlecontextimpl.java:346) [org.apache.felix.framework-4.0.3.jar:] en org.apache.felix.framework.bundlecontextimpl.Registerservice (bundlecontextimpl.java:320) [org.apache.felix.framework-4.0.3.jar:] en org.hibernate.osgi.hiberNateBundleactivator.start (HibernateBundleActivator.Java:80) [96: org.hiberNate.OSGI: 4.2.2.final] en org.apache.felix.framework.util.secureaction.startactivator (Securex.Java:645) [org.apache.felix.framework-4.0.3.jar:] en org.apache.felix.framework.felix.activatebundle (felix.java:1977) [org.apache.felix.framework-4.0.3.jar:] en org.apache.felix.framework.felix.startBundle (Felix.Java:1895) [org.apache.felix.Framework-4.0.3.jar:] en org.apache.felix.framework.bundleimpl.start (bundleimpl.java:944) [org.apache.felix.framework-4.0.3.jar:] en org.apache.felix.framework.bundleimpl.start (bundleimpl.java:931) [org.apache.felix.framework-4.0.3.jar:] en org.apache.karaf.features.internal.featuresserviceimpl.installfeatures (featuresserviceimpl.java:488) [25: org.apache.karaaf.features.core: 2.3.4] en org.apache.karaaf.features.internal.featuresserviceimpl.installfeature (featuresserviceimpl.java:405) [25: org.apache.karaaf.features.core: 2.3.4] en org.apache.karaf.features.internal.featuresserviceimpl.installfeature (featuresserviceimpl.java:401) [25: org.apache.karaf.features.core: 2.3.4] en org.apache.karaf.features.command.installfeatureComand.DoExecute (installfeaturecommand.java:62) [27: org.apache.karaf.features.command: 2.3.4] en org.apache.karaf.features.command.featurescommandsupport.doexecute (característicasCommandsupport.java:41) [27: org.apache.karaaf.features.command: 2.3.4] en org.apache.karaf.shell.console.esgicommandsupport.execute (Osgicommandsupport.java:38) [14: org.apache.karaaf.Shell.Console: 2.3.4] en org.apache.felix.gogo.commands.basic.abstractcommand.execute (abstractcommand.java:35) [14: org.apache.karaf.Shell.Console: 2.3.4] en org.apache.felix.gogo.runtime.commandproxy.execute (commandproxy.java:78) [14: org.apache.karaf.shell.console: 2.3.4] en org.apache.felix.gogo.runtime.clidos.executecmd (Closure.Java:474) [14: org.apache.karaaf.Shell.Console: 2.3.4] en org.apache.felix.gogo.runtime.clidos.executestatement (Closure.Java:400) [14: org.apache.karaf.shell.console: 2.3.4] en org.apache.felix.gogo.runtime.pipe.run (pipe.java:108) [14: org.apache.karaf.shell.console: 2.3.4] en org.apache.felix.gogo.runtime.cliendo.exeCUTE.EXECUTE (CLOURE.JAVA:183) [14: org.apache.karaf.Shell.Console: 2.3.4] en org.apache.felix.gogo.runtime.clidos.execute (Closure.Java:120) [14: org.apache.karaf.Shell.Console: 2.3.4] en org.apache.felix.gogo.runtime.comMandSessionImpl.Execute (CommandSessionImpl.Java:89) [14: org.apache.karaf.shell.console: 2.3.4] en org.apache.karaf.shell.console.jline.console.run (console.java:183) [14: org.apache.karaf.shell.console: 2.3.4] en java.lang.thread.run (hilo.java:744) [: 1.7.0_51]

Resolví este problema y actualicé la lista de archivos como dijo M. Cristian, pero el es un otro problema extraño: cuando se reinicia Karaaf y intentando insertar datos a través de la consola de KaraF, la letra de la consola: la no es una transacción activa, por lo que Probé la otra forma utilizando EntityManager y el problema ya no aparece.

¿Fue útil?

Solución

Su código no puede funcionar, ya que la fuente de datos se publica en el mismo contexto de planos donde se usa una unidad de persistencia.

El problema es que el plan esperará un servicio enitityManagerFactory para inyectar.Así que la fuente de datos nunca será publicada.Aries JPA detectará que debería crear una EntityManagerFactory para su paquete, pero el tiempo de espera intentará encontrar el DataSource.

Así que ponga la fuente de datos en un haz de Spearate y debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top