Domanda

Sto usando ibernazione per connettersi a PostgreSQL da un contenitore Karaf 2.3.4, quando implementato il mio pacchetto c'è un'eccezione che dice javax.naming.namenotfoundException OSGI: servizio / javax.sql.dasasource / "(osgi.jnd .service.name= jdbc / postgresds).

Ecco il mio file persistiance.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>
.

Ecco il mio file 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>
.

Ed ecco il mio file 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>
.

ed ecco le mie funzionalità.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>
.

Lo stacktrace completo è:

javax.naming.namenotfoundexception: OSGI: servizio / javax.sql.dasasource / "(osgi.jndi.service.name= jdbc / Postgresds)" su org.apache.Aries.jndi.url.serviceregistryContext.Lookup (ServiceRegistryContext.java:113) [72: org.apache.ies.jndi.url: 1.0.0] su org.apache.Aries.jndi.url.serviceregistryContext.Lookup (ServiceRegistryContext.java:144) [72: org.apache.ies.jndi.url: 1.0.0] su org.apache.Aries.jndi.DelegateContext.Lookup (DelegateContext.java:161) [70: org.apache.Aries.jndi.core: 1.0.0] su javax.naming.initialcontext.lookup (InitialContext.java:411) [: 1.7.0_51] a org.apache.Aries.jpa.container.unit.impl.jndidatasource.getds (jndidatasource.java:65) [67: org.apache.Aries.jpa.container: 1.0.0] a org.apache.Aries.jpa.container.unit.impl.delayedlookupdatasource.getConnection (ritardatedlookupdasasource.java:36) [67: org.apache.Aries.jpa.Container: 1.0.0] a org.hibernate.ejb.connection.injectDatasourceconnectionprovidider.getConnection (InjededDataSourCeconnectionProvider.java:70) [91: org.hibernate.entityManager: 4.2.2.Final] a org.hibernate.engine.jdbc.internal.jdbcservicesimpl $ ConnectionsprovidididerjdbcConnectionAccess.ObtatenConnection (jdbcservicesimpl.java:242) [90: org.hibernate.core: 4.2.2.Final] a org.hibernate.engine.jdbc.internal.jdbcservicesimpl.configure (jdbcservicesimpl.java:117) [90: org.hibernate.core: 4.2.2.Final] a org.hibernate.service.internal.standardServiceregistyInpl.configureService (StandardServiceregistryimpl.java:75) [90: org.hibernate.core: 4.2.2.Final] a org.hibernate.service.internal.absActactServiceregisterimpl.initializervice (AbstractServiceregistyMpl.java:159) [90: org.hibernate.core: 4.2.2.Final] a org.hibernate.service.internal.abscractserviceregisterimpl.getservice (AbstractServiceregistimpl.java:131) [90: org.hibernate.core: 4.2.2.Final] su org.hibernate.cfg.configuration.buildtyperegistrazioni (configurazione.java:1797) [90: org.hibernate.core: 4.2.2.finale] a org.hibernate.cfg.configuration.buildsessionfactory (configuration.java:1755) [90: org.hibernate.core: 4.2.2.finale] a org.hibernate.ejb.entityManagerFactoryInPL. (EntityManagerFactoryimpl.java:96) [91: org.hibernate.entityManager: 4.2.2.Final] a org.hibernate.ejb.ejb3configuration.buildentityManagerFactory (EJB3Configuration.java:914) [91: org.hibernate.entityManager: 4.2.2.Final] a org.hibernate.osgi.osgipersistenceProvider.CreateContainerInteryManagerFactory (osgipersistenceProvider.java:99) [96: org.hibernate.osgi: 4.2.2.Final] a org.apache.Aries.jpa.container.impl.entyManagerFactoryManager.CreateEntityManagerFactory (EntityManagerFactoryManager.java:329) [67: org.apache.Aries.jPa.Container: 1.0.0] a org.apache.Aries.jpa.container.impl.entyManagerFactoryManager.RegisterInteryManagerFactory (EntityManagerFactoryManager.java:242) [67: org.apache.Aries.jPa.Container: 1.0.0] a org.apache.Aries.jpa.container.impl.ityManagerFactoryManager.bundlestateChange (EntityManagerFactoryManager.Java:185) [67: org.apache.Aries.jpa.Container: 1.0.0] su org.apache.Aries.jpa.container.impl.persistenceninder.impl.persistencencedlemanager.setupmanager (persistencebundlemanager.java:394) [67: org.apache.ies.jpa.container: 1.0.0] a org.apache.Aries.jpa.container.impl.persistencencedlemanager.addingservice (persistenceBundeleManager.java:209) [67: org.apache.Aries.jpa.Container: 1.0.0] a org.osgi.util.tracker.servicetracker $ tracked.customustistAdding (Servicetracker.java:932) [karaf.jar: 2.3.4] su org.osgi.util.tracker.servicetracker $ tracked.customustomizarddding (servicetracker.java:1) [karaf.jar: 2.3.4] a org.osgi.util.tracker.abstracttracked.trackadding (Abstracttracked.java:256) [karaf.jar: 2.3.4] a org.osgi.util.tracker.abstractracked.track (Abstracttracked.java:229) [karaf.jar: 2.3.4] A Org.osgi.util.Tracker.ServiceTracker $ TRACKED.ServiceChanged (Servicetracker.java:894) [karaf.jar: 2.3.4] su Org.apache.felix.framework.util.eventdispatcher.invokeservicelistenercallback (eventdispatcher.java:932) [org.apache.felix.framework-4.0.3.jar:] A Org.apache.felix.framework.util.eventdispatcher.Fireeventimmedly (EventDispatcher.java:793) [Org.apache.felix.framework-4.0.3.jar:] a org.apache.felix.framework.util.eventdispatcher.fireviceevent (eventdispatcher.java:543) [org.apache.felix.framework-4.0.3.jar:] a org.apache.felix.framework.felix.fireviceevent (felix.java:4260) [org.apache.felix.framework-4.0.3.jar:] a org.apache.felix.framework.felix.registerservice (Felix.java:3275) [org.apache

.felix.framework-4.0.3.jar:] a org.apache.felix.framework.bundlecontextimpl.registerservice (BundleContextimpl.java:346) [Org.apache.felix.framework-4.0.3.jar:] a org.apache.felix.framework.bundlecontextimpl.registerservice (bundlecontextimpl.java:320) [org.apache.felix.framework-4.0.3.jar:] a org.hibernate.osgi.hibernatebundleactivator.start (hibernatebundleactivator.java:80) [96: org.hibernate.osgi: 4.2.2.finale] a org.apache.felix.framework.util.secureaction.stactivator (secureaction.java:645) [org.apache.felix.framework-4.0.3.jar:] a org.apache.felix.framework.felix.activatebundle (Felix.java:1977) [org.apache.felix.framework-4.0.3.jar:] a org.apache.felix.framework.felix.startbundle (Felix.java:1895) [Org.apache.felix.framework-4.0.3.jar:] a org.apache.felix.framework.bundleImpl.start (bundleimpl.java:944) [org.apache.felix.framework-4.0.3.jar:] su org.apache.felix.framework.bundleimpl.start (bundleimpl.java:931) [org.apache.felix.framework-4.0.3.jar:] a org.apache.karaf.features.internal.featureserviceImpl.installFeatures (featurederviceimpl.java:488) [25: org.apache.karaf.features.core: 2.3.4] a org.apache.karaf.features.internal.featureserviceImpl.installFeature (featureRerviceImpl.java:405) [25: org.apache.karaf.features.core: 2.3.4] a org.apache.karaf.features.internal.featureserviceimpl.installFeature (featureRerviceImpl.java:401) [25: org.apache.karaf.features.core: 2.3.4] a org.apache.karaf.features.comMand.installFeatureCommand.doexecute (installFeatureCommand.java:62) [27: org.apache.karaf.features.comMand: 2.3.4] su org.apache.Karaf.features.comMand.featuresCommandsupport.doexecute (funzioniCommandsupport.java:41) [27: org.apache.karaf.features.comMand: 2.3.4] a org.apache.karaf.shell.console.osgicommandsupport.execute (osgicommandsupport.java:38) [14: org.apache.karaf.shell.console: 2.3.4] a org.apache.felix.gogo.commands.basic.abstractcommand.execute (AbstractCommand.java:35) [14: org.apache.KARAF.Shell.Console: 2.3.4] a org.apache.felix.gogo.runtime.comMandProxy.execute (commandproxy.java:78) [14: org.apache.karaf.shell.console: 2.3.4] a org.apache.felix.gogo.runtime.closure.executecmd (chiusure.java:474) [14: org.apache.karaf.shell.console: 2.3.4] a org.apache.felix.gogo.runtime.closure.executestatement (closure.java:400) [14: org.apache.KARAF.Shell.Console: 2.3.4] a org.apache.felix.gogo.runtime.pipe.run (pipe.java:108) [14: org.apache.karaf.shell.console: 2.3.4] a org.apache.felix.gogo.runtime.closure.execute.closure.execute (closure.java:183) [14: org.apache.karaf.shell.console: 2.3.4] a org.apache.felix.gogo.runtime.closure.execute.closure.execute (closure.java:120) [14: org.apache.karaf.shell.console: 2.3.4] a org.apache.felix.gogo.runtime.comMandsessionimpl.execute (CommandSessionMpl.java:89) [14: org.apache.karaf.shell.console: 2.3.4] a org.apache.karaf.shell.console.jline.console.Run (console.java:183) [14: org.apache.karaf.shell.console: 2.3.4] su java.lang.thread.run (discussione.java:744) [: 1.7.0_51]

Ho risolto questo problema e ho aggiornato l'elenco dei file come detto M. Cristian, ma è un altro strano problema: quando si riavvia KARAF e cercando di inserire dati tramite KARAF Console La console Stampa: non è una transazione attiva, quindi Ho provato l'altro modo di usare EntityManager e il problema non appare più.

È stato utile?

Soluzione

Il tuo codice non può funzionare come DataSource è pubblicato nello stesso contesto di Blueprint in cui viene utilizzata un'unità di persistenza.

Il problema è che il progetto attenderà un servizio di enitityManagerFactory iniettare.Quindi il DataSource non sarà mai pubblicato.Ariete JPA rileverà che dovrebbe creare un'entityManagerFactory per il tuo pacchetto, ma il timeout sta cercando di trovare il DataSource.

Quindi metti il datasource in un pacchetto spearato e dovrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top