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:
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:
Ich habe auch versucht, sqlserver
als globales Subsystem in standalone.xml
hinzuzufügen:
Es hat jedoch keiner von ihnen funktioniert.
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.