Question

J'utilise Hibernate pour vous connecter à PostgreSQL à partir d'un conteneur KARAF 2.3.4, lorsque je déploierai mon paquet, il y a une exception annonant Javax.naming.Namenotfoundexception OSGI: service / javax.sql.dataSource / "(osgi.jndi .Service.name= JDBC / Postgresds).

Voici mon fichier 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>

Voici mon fichier 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>

Et voici mon fichier 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>

et voici mes caractéristiques.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>

La structure complète est:

javax.naming.namenotfoundException: OSGI: service / javax.sql.dataSource / "(osgi.jndi.service.name= jdbc / postgresds)" à org.apache.aries.jndi.url.serviceegistryContext.lookup (ServiceReGistryContext.java:113) [72: Org.apache.aries.jndi.Apache.arles.jndi.uples à org.apache.aries.jndi.url.serviceegistryContext.lookup (ServiceReGistryContext.java:144) [72: Org.apache.aries.jndi.eul: 1.0.0] à org.apache.aries.jndi.delegatecontext.lookup (Délégatecontext.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.jndididatasource.geds (jndidatasource.java:65) [67: Org.apache.aries.jpa.container: 1.0.0] à org.apache.aries.jpa.container.unit.impl.Delayedlookupdatasource.geconnection.java:36) [67: Org.apache.aries.jpa.Container: 1.0.0] à org.hibernate.ejb.connection.InjectddataSourCeconnectionProvider.geconnection (injecteddatasourceconnectionprovider.java:70) [91: Org.hibernate.EntyManager: 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.StandardsServiceReMIMPL.configureService (NormeViceReGistricyMpl.java:75) [90: Org.hibernate.core: 4.2.2.final] à org.hibernate.service.internal.abstractServiceReGistricie (AbstractServiceRegryimpl.java:159) [90: Org.hibernate.core: 4.2.2.final] à org.hibernate.service.internal.abstractServiceReGistriction (AbstractServiceReGistricyMpl.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.buildSsessionFactory (configuration.java:1755) [90: org.hibernate.core: 4.2.2.final] à Org.hibernate.ejb.EntyManagerFactoryImpl. (EntityManagerFactoryImpl.java:96) [91: Org.hibernate.EntyManager: 4.2.2.final] à org.hibernate.ejb.ejb3configuration.buildentitymanagerfactory (ejb3configuration.java:914) [91: Org.hibernate.EntyManager: 4.2.2.final] à org.hibernate.osgi.osgipersistenceProvider.createcontainerieTityManagerFactory (osgipersistenceprovider.java:99) [96: Org.hibernate.osgi: 4.2.2.final] à org.apache.aries.jpa.container.impl.entinityManagerFactoryManager.createentityManagerFactories (EntityManagerFactoryManager.java:329) [67: Org.apache.aries.jpa.container: 1.0.0] à org.apache.aries.jpa.container.impl.entinityManagerFactoryManager.RégisterItyManagerFactories (EntityManagerFFactoryManager.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.PersistenseBundlemanager.setupmanager (persistantbundlemanager.java:394) [67: Org.apache.aries.jpa.container: 1.0.0] à org.apache.aries.jpa.container.impl.persistenseBundlemanager.addingService (persistancebundlemanager.java:209) [67: Org.apache.aries.jpa.container: 1.0.0] À Org.osgi.UTIL.Tracker.ServiceTracker $ Suivid.CustomizerAdding (ServiceTracker.java:932) [Karaf.jar: 2.3.4] à org.osgi.util.tracker.serviceTracker $ suivi.CustomizerAdding (ServiceTracker.java:1) [Karaf.jar: 2.3.4] à org.osgi.util.tracker.abstractTracked.trackadding (AbstraitTracked.java:256) [Karaf.jar: 2.3.4] à org.osgi.util.tracker.abstractTracked.Track (AbstraitTracked.java:229) [Karaf.jar: 2.3.4] à org.osgi.util.tracker.serviceTracker $ suivi.Servicecharged (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.fireeeevenimmedy (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.registerstervice (felix.java:3275) [org.apache

.felix.framework-4.0.3.jar:] à org.apache.felix.framework.bundlecontextextimpl.registerservice (Bundlecontextimpl.java:346) [org.apache.felix.framework-4.0.3.jar:] à org.apache.felix.framework.bundlecontextextimpl.registerservice (Bundlecontextimpl.java:320) [org.apache.felix.framework-4.0.3.jar:] chez org.hibernate.osgi.hibernatebundeAstivator.start (hibernatebundeActivator.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 (FeatureServiceImpl.java:488) [25: Org.apache.karaf.features.core: 2.3.4] à org.apache.karaf.features.internal.feaseturesserviceImpl.installfeature (featureServiceImpl.java:405) [25: org.apache.karaf.features.core: 2.3.4] à org.apache.karaf.features.internal.faseturesserviceImpl.installfeature (FeatureServiceImpl.java:401) [25: Org.apache.karaf.features.core: 2.3.4] à org.apache.karaf.caraf.features.command.installfeaturecommand.droeCommand.java:62) [27: Org.apache.karaf.features.command: 2.3.4] à org.apache.karaf.caraf.features.command.featuresCommandsupport.doexecute (FabricansCommandsupport.java:41) [27: Org.apache.karaf.features.command: 2.3.4] à org.apache.karaf.shell.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 (fermeture.java:474) [14: org.apache.karaf.shell.console: 2.3.4] à org.apache.felix.gogo.runtime.closure.execuestatement (fermeture.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] at org.apache.felix.gogo.runtime.closure.execute (fermeture.java:183) [14: org.apache.karaf.shell.console: 2.3.4] à org.apache.felix.gogo.runtime.closure.execute (fermeture.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.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]

J'ai résolu ce problème et j'ai mis à jour la liste des fichiers comme dit M. Cristian, mais c'est un autre problème étrange: lors du redémarrage de Karaf et d'essayer d'insérer des données via Karaf Console à la console Imprimer: La console n'est pas une transaction active. J'ai essayé l'inverse de l'autre moyen d'utiliser EntityManager et le problème n'apparaît plus.

Était-ce utile?

La solution

Votre code ne peut pas fonctionner car la DataSource est publiée dans le même contexte de PlanPrint où une unité de persistance est utilisée.

Le problème est que le plan directeur attendra l'injection d'un service d'énittityManagerFactory.Donc, la DataSource ne sera jamais publiée.Aries JPA détectera qu'il devrait créer une entitéManagerFactory pour votre paquet, mais le délai d'attente d'essayer de trouver la source de données.

Alors, mettez la source de données dans un paquet spearate et cela devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top