source

Karaf - 최대 절전 모드 - MariaDB " 스키마 업데이트를 완료할 수 없습니다" 오류

manysource 2023. 10. 27. 22:00

Karaf - 최대 절전 모드 - MariaDB " 스키마 업데이트를 완료할 수 없습니다" 오류

Karaf 4.0.4 + Hibernate 4.3.6으로 프로젝트를 설정하려고 합니다.Final 그리고 MariaDB 10.0.23을 데이터베이스로 사용하고 있습니다.

이 자습서를 따라 해 보았지만 다음과 같습니다.

  • datasource blue.xml을 사용하는 대신 pax-jdbc-config를 사용하여 DataSource를 생성하고자 합니다(데이터 소스 Blueprint가 더 이상 사용되지 않으므로).
  • MySQL 대신 MariaDB를 사용해야 합니다.그래서 MariaDB 드라이버를 사용하기 위해 일부 구성 파일을 변경해야 했다고 생각합니다.

결과적으로 제 구성은 다음과 같습니다.

  1. organ.ops4j. datasource-sample prj.cfg:

    osgi.jdbc.driver.name=mariadb
    osgi.jdbc.driver.class=org.mariadb.jdbc.Driver
    url=jdbc:mysql://DB_SERVER:3306/sampleprjdb
    dataSourceName=sampleprj
    databaseName=sampleprjdb
    user=myuser
    password=mypassword
    

제 데이터베이스 자격 증명과 데이터베이스 이름이 정확하다고 확신합니다.

  1. sample-prj bundle > persistence.xml:

    <?xml version="1.0" encoding="UTF-8"?> 
    <persistence version="2.0"
        xmlns="http://java.sun.com/xml/ns/persistence"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
        <persistence-unit name="sampleprj" transaction-type="JTA">
            <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
            <jta-data-source>
                osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/sampleprj)      
            </jta-data-source>
            <properties>
                <property name="hibernate.dialect"     value="org.hibernate.dialect.MySQL5Dialect" />
                <property name="hibernate.hbm2ddl.auto" value="update" />
                <property name="hibernate.show_sql" value="true" />
                <property name="hibernate.format_sql" value="true" />
            </properties>
        </persistence-unit>
    </persistence>
    

<jta-data-source>요소, 나는 위의 값과 위의 값 둘다 시도해보았습니다.osgi:service/sampleprj하지만 그들은 작동하지 않았습니다.저도 다른 시도를 해보았습니다.hibernate.dialects 대부분의 스키마 업데이트 오류는 잘못된 방언으로 인해 발생합니다.

  1. sample-prj bundle > 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"
    
        xsi:schemaLocation="
                http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0 
                http://www.w3.org/2001/XMLSchema-instance     http://www.w3.org/2001/XMLSchema-instance 
                http://aries.apache.org/xmlns/jpa/v1.0.0 http://aries.apache.org/xmlns/jpa/v1.0.0 
                http://aries.apache.org/xmlns/transactions/v1.0.0 http://aries.apache.org/xmlns/transactions/v1.0.0 ">
    
        <bean id="dbService"
            class="org.sample.project.persistence.mariadb.impl.DbServiceImpl">
            <jpa:context unitname="sampleprj" property="em"/>
            <tx:transaction method="*" value="Required" />
        </bean>
    
        <service ref="dbService" interface="org.sample.project.IDbService" />
    
    </blueprint>
    
  2. sample-prj bundle > pom.xml:

    <project>
    
    ...
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Meta-Persistence>META-INF/persistence.xml</Meta-Persistence>
                        <Bundle-Version>1.0.0</Bundle-Version>
                        <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
                        <Manifest-Version>1</Manifest-Version>
                        <Import-Package>
                        org.apache.felix.service.command;version="[0.6,1)",
                        org.apache.felix.gogo.commands;version="[0.6,1)",
                        org.apache.karaf.shell.console;version="[2.2,4)",
                        org.hibernate.proxy,
                        javassist.util.proxy,
                        *
                        </Import-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    ...
    
    </project>
    

결과 매니페스트도 확인할 수 있습니다.MF포함Meta-Persistence기여하다.

  1. Karaf (clean) start에서는 다음 명령을 사용하여 종속 번들을 설치합니다.

    feature:repo-add mvn:org.ops4j.pax.jdbc/pax-jdbc-features/0.5.0/xml/features
    feature:install transaction jndi pax-jdbc-mariadb pax-jdbc-config pax-jdbc-pool-dbcp2 jpa hibernate
    

사용할때bundle:list, 모든 번들이 설치되어 있고 지금까지 활성화되어 있는 것 같습니다.

  1. 마지막으로 다음 명령을 사용하여 샘플 번들을 설치합니다.

    bundle:install mvn:org.sample.prj/sample-prj/1.0
    

그러나 다음과 같은 로그 메시지를 인쇄합니다.

2016-02-22 15:38:44,035 | ERROR | pool-36-thread-1 | SchemaUpdate                     | 199 - org.jboss.logging.jboss-logging - 3.1.4.GA | HHH000299: Could not complete schema update
java.lang.NullPointerException
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:227)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:522)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)[189:org.hibernate.entitymanager:4.3.6.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)[189:org.hibernate.entitymanager:4.3.6.Final]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)[188:org.hibernate.core:4.3.6.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)[189:org.hibernate.entitymanager:4.3.6.Final]
    at org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:112)[190:org.hibernate.osgi:4.3.6.Final]
    at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:85)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44)[79:org.apache.aries.jpa.container:2.3.0]
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)[org.osgi.core-6.0.0.jar:]
    at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.trackProvider(PersistenceBundleTracker.java:106)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.findPersistenceUnits(PersistenceBundleTracker.java:90)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:69)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.aries.jpa.container.impl.PersistenceBundleTracker.addingBundle(PersistenceBundleTracker.java:40)[79:org.apache.aries.jpa.container:2.3.0]
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:469)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:415)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)[org.osgi.core-6.0.0.jar:]
    at org.osgi.util.tracker.BundleTracker.open(BundleTracker.java:156)[org.osgi.core-6.0.0.jar:]
    at org.apache.aries.jpa.container.impl.Activator.start(Activator.java:43)[79:org.apache.aries.jpa.container:2.3.0]
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1199)[9:org.apache.karaf.features.core:4.0.4]
    at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:840)[9:org.apache.karaf.features.core:4.0.4]
    at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1089)[9:org.apache.karaf.features.core:4.0.4]
    at org.apache.karaf.features.internal.service.FeaturesServiceImpl$1.call(FeaturesServiceImpl.java:985)[9:org.apache.karaf.features.core:4.0.4]
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)[:1.7.0_45]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_45]
    at java.lang.Thread.run(Thread.java:744)[:1.7.0_45]

여기 구성이 누락되었거나 잘못된 것 같습니다.제가 무엇을 빠뜨리고 있나요?

고마워, 엠레.

이것은 양자리 JPA 2에서 문제가 될 수 있습니다. 찰리 모던트는 오늘 양자리 JPA 2에서 실시한 몇 가지 테스트 결과를 저에게 메일로 보냈습니다.그는 지속성 제공자에 의해 스키마가 생성되기를 원하는 경우 최대 절전 모드와 유사한 동작을 언급했습니다.

자습서의 주요 차이점은 아마도 자습서가 로그인하는 데 자격 증명이 필요 없는 내장형을 사용한다는 것입니다.Aries JPA의 테스트에서 이슈를 재현하도록 노력하겠습니다.아파치 양자리 지라에서 이것에 대한 이슈를 열어줄 수 있습니까?

언급URL : https://stackoverflow.com/questions/35555255/karaf-hibernate-mariadb-could-not-complete-schema-update-error