Say*_*Pal 9 java hibernate jpa sqljdbc wildfly
这是WildFly 10.0中Hibernate版本不匹配的后续问题.
为了完整起见,请简要地重述问题.我有2个项目,一个是普通的java项目(有maven):, core另一个是非maven动态web项目:webapi.后者充当了休息层core.
core使用hibernate没有任何问题.它定义persistence.xml(内部src/META-INF/)如下:
<?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"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="app" transaction-type="RESOURCE_LOCAL">
<class>data.entities.Anything</class>
<class>data.entities.Something</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property>
<property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost;databaseName=AppDb"></property>
<property name="javax.persistence.jdbc.user" value="****"></property>
<property name="javax.persistence.jdbc.password" value="****"></property>
<property name="hibernate.default_schema" value="dbo"></property>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"></property>
<property name="hibernate.hbm2ddl.auto" value="update"></property>
<property name="jboss.as.jpa.providerModule" value="org.hibernate:5.2.4.Final" />
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
既core和webapi现在正在使用hibernate-core 5.2.4.Final,使用maven和WildFly模块安装为描述这里分别.
但是,现在当我部署webapi到WildFly 10.0时,我收到以下错误:
[org.jboss.as.server.deployment](MSC服务主题1-8)WFLYSRV0027:开始部署"webapi.war"(运行时名称:"webapi.war")
[org.jboss.as.jpa](MSC服务主题1-1)WFLYJPA0002:为应用程序读取persistence.xml
[org.jboss.as.jpa](ServerService线程池 - 67)WFLYJPA0010:启动持久性单元(第1阶段,共2步)服务'webapi.war#app'
[org.hibernate.jpa.internal.util.LogHelper](ServerService线程池 - 67)HHH000204:处理PersistenceUnitInfo [name:app ...]
[org.hibernate.orm.deprecation](ServerService Thread Pool - 67)HHH90000001:发现使用不推荐的设置来指定Scanner [hibernate.ejb.resource_scanner]; 请改用[hibernate.archive.scanner]
[org.jboss.as.connector.deployers.jdbc](MSC服务线程1-1)WFLYJCA0004:部署符合JDBC的驱动程序类com.microsoft.sqlserver.jdbc.SQLServerDriver(6.0版)
[org.jboss.as.connector.deployers.jdbc](MSC服务主题1-6)WFLYJCA0018:已启动驱动程序服务,驱动程序名称= webapi.war_com.microsoft.sqlserver.jdbc.SQLServerDriver_6_0
[org.jboss.as.jpa](ServerService线程池 - 67)WFLYJPA0010:启动持久性单元(第2阶段,共2期)服务'webapi.war#app'
[org.hibernate.dialect.Dialect](ServerService线程池 - 67)HHH000400:使用方言:org.hibernate.dialect.SQLServer2008Dialect
[org.hibernate.envers.boot.internal.EnversServiceImpl](ServerService线程池 - 67)是否启用了Envers集成?:是的
[org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl](ServerService线程池 - 67)GenerationTarget遇到异常接受命令:通过JDBC语句执行DDL时出错:org.hibernate.tool.schema.spi.CommandAcceptanceException:执行DDL时出错 位于org.hibernate的org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)的org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:524)中的JDBC语句位于org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl的org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:273)中的.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:470) .performTablesMigration(GroupedSchemaMigratorImpl.java:71)位于org.hibernate.tool.schema.intern的org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:203)al.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:110)org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:177)org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator. java:66)org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:309)org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445)at org.hibernate.jpa.boot.internal. EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:877)org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)at org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 $ 1.run(PersistenceUnitServiceImpl. java:154)org.jb上的org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 $ 1.run(PersistenceUnitServiceImpl.java:117)org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)中的oss.as.jpa.service.PersistenceUnitServiceImpl $ 1.run(PersistenceUnitServiceImpl.java:182)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor) .java:617)在java.lang.Thread.run(Thread.java:745)org.jboss.threads.JBossThread.run(JBossThread.java:320)
引起:org.h2.jdbc.JdbcSQLException:未找到架构"DBO"; SQL语句:CREATE TABLE dbo.Anythings(同上二进制(255)NOT NULL,CreatedOn日期时间不为空,IsActive位,主键(id))[90079-173] 在org.h2.message.DbException.getJdbcSQLException(DbException.java :331)org.h2.message.DbException.get(DbException.java:171)org.h2.message.DbException.get(DbException.java:148)atg.h2.command.Parser.getSchema(Parser. java:616)org.h2.command.Parser.getSchema(Parser.java:623)org.h2.command.Parser.parseCreateTable(Parser.java:5302)org.h2.command.Parser.parseCreate(Parser) .java:3873)org.h2.command.ParsPrepared(Parser.java:324)org.h2.command.Parser.parse(Parser.java:279)atg.h2.command.Parser.parse( Parser.java:251)org.h2.engine.prepareLmand(Parser.java:218)org.h2.engine.Session.prepareLocal(Session.java:428)org.h2.engine.Session.prepareCommand中的org.h2.command.Parser.prepareCommand(Parser.java:218) (Session.java:377)org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138)org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.jav)a:168)atg.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:156)atg.jboss.jca.adapters.jdbc.WrappedStatement.execute(WrappedStatement.java:198)atg.hibernate.tool.schema .internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)... 20更多
无论如何这可以纠正吗?
更新:我认为,它无法连接数据库.当我使用hibernate.hbm2ddl.auto的validate,而不是update,我得到以下错误:
org.hibernate.tool.schema.spi.SchemaManagementException:架构验证:缺少表[dbo.Anythings]
附加信息:我已经放置sqljdbc42.jar在wildfly-10.0.0.Final\modules\system\layers\base\com\microsoft\sqlserver\main,和module.xml看起来象下面这样:
<?xml version="1.0" encoding="UTF-8"?>
<!-- JDBC Drivers module.xml file to configure your JDBC drivers-->
<module xmlns="urn:jboss:module:1.3" name="com.microsoft.sqlserver" slot="main">
<resources>
<resource-root path="sqljdbc42.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
Run Code Online (Sandbox Code Playgroud)
我还尝试在以下位置添加sqlserver全局子系统standalone.xml:
<subsystem xmlns="urn:jboss:domain:ee:4.0">
<global-modules>
<module name="com.microsoft.sqlserver" slot="main"/>
</global-modules>
...
</subsystem>
Run Code Online (Sandbox Code Playgroud)
但是,这些都没有奏效.
这似乎是由您指定数据库连接的方式引起的.在EE环境中,您应该使用数据源定义,指定为jta-data-source或non-jta-data-source在您的persistence.xml.如JPA 2.1规范(ch.8.2.1.5)中所述,如果您未指定其中任何一个,您的wildfly将使用其默认数据源(名为ExampleDS)部署您的应用程序,该数据源使用h2内存数据库.通过属性(javax.persistence.jdbc.url等)的连接参数将被忽略,因为它们适用于Java SE环境而非Java EE.
您需要可以添加新的数据源定义到wildfly配置(standalone.xml或domain.xml中根据您的设置),或者你的应用程序作为一个命名文件中提供的数据源定义<something>-ds.xml位于WEB-INF文件夹.在这两种情况下,您都需要正确设置MSSQL驱动程序(部署到模块,添加module.xml驱动程序定义并将其添加到widlfly config/subsytem = datasources).这些操作也可以通过jboss-cli接口完成,以避免手动编辑配置文件.之后,从persistence.xml中删除连接属性,并使用新创建的DS的jndi名称添加jta/non-jta-data-source元素.另外,请删除mssql模块的全局定义
这个链接可能对你有用:
Wildfly Hibernate +在app数据源定义
JBoss DB Driver +通过cli定义数据源
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
2690 次 |
| 最近记录: |