문제

karaf 2.3.4 컨테이너에서 PostgreSQL에 연결하려면 Hibernate를 사용하고 있습니다. 내 번들을 배포 할 때 javax.naming.nameNotFoundException OSGi : Service / javax.sql.dataSource / "(osgi.jndi) .service.name= jdbc / postgresds).

여기에 내 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>
.

여기는 내 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>
.

여기에서는 my 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.namenotfoundException : osgi : service / javax.sql.dataSource / "(osgi.jndi.service.name= jdbc / postgresds)" org.apache.aries.jndi.ural.serviceRegistryContext.Lookup (ServiceRegistryContext.java:113) [72 : org.apache.aries.jndi.url : 1.0.0] org.apache.aries.jndi.ural.servup (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.candardserviceregistryimpl.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.buildtypheregistrations (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 (OsgipersistenceSpider.java:99) [96 : org.hibernate.osgi : 4.2.2.final] org.apache.aries.jpa.container.impl.jpa.container.impl.createentityManagerFact.CreateEntityManagerFactiory (EntityManagerFactoryManager.java:329) [67 : org.apache.aries.jpa.container : 1.0.0] org.apache.aries.jpa.container.impl.entityManagerFactoryManager.RegisterEntityManagerFacties (EntityManagerFactoryManager.java:242) [67 : org.apache.aries.jpa.container : 1.0.0] org.apache.aries.jpa.container.impl.titymanagerFactoryManager.BundLestateChange (EntityManagerFactoryManager.java:185) [67 : org.apache.aries.jpa.container : 1.0.0] org.apache.aries.jpa.container.impl.persistenceNaver.Impl.setupmanager (persistendbundlemanager.java:394) [67 : org.apache.aries.jpa.container : 1.0.0] org.apache.aries.jpa.container.impl.persistencebundlemanager.addingservice (persistensbundlemanager.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.FireEventImmediater (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 (hibernatebundleacivator.java:80) [96 : org.hibernate.osgi : 4.2.2.final] org.apache.felix.framework.util.secureAction.StartActivator (SecurAction.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.featureSterviceImpl.InstallFeatures (FeatureSterviceImpl.java:488) [25 : org.apache.karaf.features.core : 2.3.4] org.apache.karaf.features.internal.featureSterviceImpl.InstallFeature (FeatureSterviceImpl.java:405) [25 : org.apache.karaf.features.core : 2.3.4] org.apache.karaf.features.internal.featureServiceImpl.installFeature (FeatureSterviceImpl.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]

이 문제를 해결했으며, 나는 M. Cristian으로 파일 목록을 업데이트했지만 다른 이상한 문제는 : KARAF를 다시 시작하고 KARAF 콘솔을 통해 데이터를 삽입하려고 시도한 콘솔 인쇄 : 이는 활성 트랜잭션이 아니므로 EntityManager를 사용하여 다른 방법을 시도했으며 문제는 더 이상 나타나지 않습니다.

도움이 되었습니까?

해결책

지속 장치가 사용되는 동일한 청사진 컨텍스트에 DataSource가 게시 될 때 코드가 작동하지 않습니다.

문제는 청사진이 EnitityManagerFactory 서비스가 주입 될 때까지 기다릴 것입니다.그래서 데이터 소스는 절대로 게시되지 않습니다.ARIES JPA는 번들에 대한 엔터티 ManagerFactory를 만들어야하지만 DataSource를 찾으려고 노력하는 시간 초과는 할 수 있음을 감지합니다.

그래서 DataSource를 스피어레이트 번들에 넣고 작동해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top