org.h2.jdbc.JdbcSQLException: Schema "DBO" nicht gefunden

8

Dies ist eine Follow-up-Frage von In WildFly 10.0 .

Der Vollständigkeit halber wiederholen Sie das Problem kurz. Ich habe 2 Projekte, eines ist ein normales Java-Projekt (mit Maven): core und das andere ist nicht-maven dynamisches Webprojekt: webapi . Letzteres fungiert als Rest-Layer oberhalb von core .

core verwendet den Ruhezustand ohne Probleme. Es definiert das persistence.xml (in src/META-INF/ ) wie folgt:

%Vor%

Sowohl core als auch webapi verwenden nun hibernate-core 5.2.4.Final , wobei maven und die Installation des WildFly-Moduls wie beschrieben verwendet werden hier .

Wenn ich jedoch webapi auf WildFly 10.0 stelle, erhalte ich den folgenden Fehler:

  

[org.jboss.as.server.deployment] (MSC-Dienstthread 1-8) WFLYSRV0027: Starten der Bereitstellung von "webapi.war" (Laufzeitname: "webapi.war")

     

[org.jboss.as.jpa] (MSC-Dienst-Thread 1-1) WFLYJPA0002: Lesen Sie persistence.xml für die App

     

[org.jboss.as.jpa] (ServerService-Threadpool - 67) WFLYJPA0010: Starten der Persistenzeinheit (Phase 1 von 2) Service 'webapi.war # app'

     

[org.hibernate.jpa.internal.util.LogHelper] (ServerService-Threadpool - 67) HHH000204: PersistenceUnitInfo wird verarbeitet [       Name:       ...]

     

[org.hibernate.orm.deprecation] (ServerService-Threadpool - 67) HHH90000001: Verwendung der veralteten Einstellung zur Angabe von Scanner gefunden [hibernate.ejb.resource_scanner]; Verwenden Sie stattdessen [hibernate.archive.scanner]

     

[org.jboss.as.connector.deployers.jdbc] (MSC-Dienstthread 1-1) WFLYJCA0004: Bereitstellen der JDBC-kompatiblen Treiberklasse com.microsoft.sqlserver.jdbc.SQLServerDriver (Version 6.0)

     

[org.jboss.as.connector.deployers.jdbc] (MSC-Dienstthread 1-6) WFLYJCA0018: Gestarteter Treiberdienst mit Treibername = webapi.war_com.microsoft.sqlserver.jdbc.SQLServerDriver_6_0

     

[org.jboss.as.jpa] (ServerService-Threadpool - 67) WFLYJPA0010: Starten der Persistenzeinheit (Phase 2 von 2) Service 'webapi.war # app'

     

[org.hibernate.dialect.Dialect] (ServerService-Thread-Pool - 67) HHH000400: Verwenden Sie dialekt: org.hibernate.dialect.SQLServer2008Dialect

     

[org.hibernate.envers.boot.internal.EnversServiceImpl] (ServerService-Thread-Pool - 67) Envers-Integration aktiviert? : wahr

     

[org.hibernate.tool.internal.ExceptionHandlerLoggedImpl] (ServerService-Threadpool - 67) GenerationTarget hat einen Ausnahmeakzeptanzbefehl gefunden: Fehler beim Ausführen der DDL über JDBC Statement: org.hibernate.tool.schema.spi. CommandAcceptanceException: Fehler beim Ausführen von DDL über JDBC-Anweisung       at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept (GenerationTargetToDatabase.java:67)       bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString (AbstractSchemaMigrator.java:524)       bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings (AbstractSchemaMigrator.java:470)       bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable (AbstractSchemaMigrator.java:273)       at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration (GroupedSchemaMigratorImpl.java:71)       bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration (AbstractSchemaMigrator.java:203)       bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration (AbstractSchemaMigrator.java:110)       bei org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction (SchemaManagementToolCoordinator.java:177)       bei org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process (SchemaManagementToolCoordinator.java:66)       an org.hibernate.internal.SessionFactoryImpl. (SessionFactoryImpl.java309)       bei org.hibernate.boot.internal.SessionFactoryBuilderImpl.build (SessionFactoryBuilderImpl.java:445)       an org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build (EntityManagerFactoryBuilderImpl.java:877)       bei org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build (TwoPhaseBootstrapImpl.java:44)       at org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 $ 1.run (PersistenceUnitServiceImpl.java:154)       at org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 $ 1.run (PersistenceUnitServiceImpl.java:117)       bei org.wildfly.security.manager.WildFlySecurityManager.doChecked (WildFlySecurityManager.java:667)       bei org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1.run (PersistenceUnitServiceImpl.java:182)       bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)       bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617)       bei java.lang.Thread.run (Thread.java:745)       bei org.jboss.threads.JBossThread.run (JBossThread.Java: 320)

     

verursacht von: org.h2.jdbc.JdbcSQLException: Schema "DBO" nicht gefunden; SQL-Anweisung:   create table dbo.Anythings (Id binary (255) nicht null, CreatedOn datetime nicht null, IsActive bit, Primärschlüssel (Id)) [90079-173]       bei org.h2.message.DbException.getJdbcSQLException (DbException.java:331)       unter org.h2.message.DbException.get (DbException.java:171)       unter org.h2.message.DbException.get (DbException.java:148)       bei org.h2.command.Parser.getSchema (Parser.java:616)       bei org.h2.command.Parser.getSchema (Parser.java:623)       bei org.h2.command.Parser.parseCreateTable (Parser.java:5302)       unter org.h2.command.Parser.parseCreate (Parser.java:3873)       bei org.h2.command.Parser.parsePrepared (Parser.java:324)       unter org.h2.command.Parser.parse (Parser.java:279)       bei org.h2.command.Parser.parse (Parser.java:251)       bei org.h2.command.Parser.prepareCommand (Parser.java:218)       bei org.h2.engine.Session.prepareLocal (Session.java:428)       an org.h2.engine.Session.prepareCommand (Session.java:377)       unter org.h2.jdbc.JdbcConnection.prepareCommand (JdbcConnection.java:1138)       unter org.h2.jdbc.JdbcStatement.executeInternal (JdbcStatement.java:168)       unter org.h2.jdbc.JdbcStatement.execute (JdbcStatement.java:156)       unter org.jboss.jca.adapters.jdbc.WrappedStatement.execute (WrappedStatement.java:198)       at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept (GenerationTargetToDatabase.java:54)       ... 20 mehr

Kann ich das irgendwie korrigieren?

Update: Ich denke, es ist nicht möglich, die Datenbank zu verbinden. Wenn ich hibernate.hbm2ddl.auto als validate anstelle von update verwende, erhalte ich den folgenden Fehler:

  

org.hibernate.tool.schema.spi.SchemaManagementException: Schema-Validierung: fehlende Tabelle [dbo.Anythings]

Zusätzliche Informationen: Ich habe sqljdbc42.jar bereits in wildfly-10.0.0.Final\modules\system\layers\base\com\microsoft\sqlserver\main platziert und die module.xml sieht wie folgt aus:

%Vor%

Ich habe auch versucht, sqlserver als globales Subsystem in standalone.xml hinzuzufügen:

%Vor%

Es hat jedoch keiner von ihnen funktioniert.

    
Sayan Pal 24.03.2017, 10:47
quelle

1 Antwort

3

Es scheint durch die Art und Weise verursacht worden zu sein, wie Sie die DB-Verbindung angeben. In einer EE-Umgebung sollten Sie die Datenquellendefinition verwenden, die in jta-data-source oder non-jta-data-source in persistence.xml angegeben ist. Wie in JPA 2.1 spec (ch. 8.2.1.5) angegeben, wird Ihre Wildfly Ihre App mit der Standarddatenquelle namens ExampleDS bereitstellen, die h2 In-Memory-DB verwendet, wenn Sie keine angeben. Die Verbindungsparameter über Eigenschaften ( javax.persistence.jdbc.url usw.) werden ignoriert, da sie für die Java SE-Umgebung und nicht für Java EE bestimmt sind.
Sie müssen der Wildfly-Konfiguration entweder eine neue Datenquellendefinition hinzufügen (standalone.xml oder domain.xml, abhängig von Ihrer Konfiguration) oder die Datenquellendefinition in Ihrer App als Datei namens <something>-ds.xml im Ordner WEB-INF bereitstellen. In beiden Fällen müssen Sie Ihren MSSQL-Treiber korrekt einrichten (in Modulen bereitstellen, module.xml hinzufügen und die Treiberdefinition zu widflly config / subsytem = datasources hinzufügen). Diese Operationen können auch über die jboss-cli-Schnittstelle ausgeführt werden, um manuelle Änderungen der Konfigurationsdatei zu vermeiden. Danach entfernen Sie die Verbindungseigenschaften aus Ihrer persistence.xml und fügen das jta / non-jta-data-source-Element mit dem jndi-Namen Ihres neu erstellten DS hinzu. Entfernen Sie außerdem die globale Definition Ihres mssql-Moduls

Diese Links könnten für Sie nützlich sein: Wildfly Hibernate + In der App-Datenquellen-Definition
JBoss DB-Treiber + Datenquellen-Definition über CLI

Ich hoffe, das hilft.

    
yntelectual 07.05.2017, 18:55
quelle

Tags und Links