我的Java EE应用程序工作正常,但突然间它拒绝对数据库做任何事情。在重新部署时,我得到了以下stacktrace:
12:08:54,001 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (ServerService Thread Pool -- 69) Table "USERS" not found; SQL statement:
select userentity0_.id as id1_7_, userentity0_.password as password2_7_, userentity0_.username as username3_7_ from users userentity0_ [42102-173]
(...)
Caused by: org.h2.jdbc.JdbcSQLException: Table "USERS" not found; SQL statement:
select userentity0_.id as id1_7_, userentity0_.password as password2_7_, userentity0_.username as username3_7_ from users userentity0_ [42102-173]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:331)
(...)
我在这里注意到奇怪的事情。从stacktrace看来,它正在使用H2数据库驱动程序(或其他),而不是Microsoft SQL Server ,就像之前一样。我不记得最近用数据库改变了什么,它突然爆发了。
我发现这里已经提出了类似的问题:
Wildfly mysql instead of h2
但是发布的答案并不令我满意 - 我希望它能在没有数据源的情况下工作,只需将所有数据库配置存储在persistence.xml
中并保持应用程序与服务器无关(尽可能多)。
我的persistence.xml
文件:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="manager1" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- some classes in <class> tags -->
<properties>
<property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="hibernate.connection.url" value="jdbc:sqlserver://<my Azure database server>:1433;database=<db name>;user=<username>;password=<pass>;encrypt=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect"/>
<!--<property name="hibernate.hbm2ddl.auto" value="update"/>-->
</properties>
</persistence-unit>
</persistence>
我应该更改什么才能让它再次使用MS SQL Server数据库?
答案 0 :(得分:2)
您需要define容器中的MS SQL数据源。 Here's an example添加PosgreSQL驱动程序和数据源。
然后在你的persistence.xml
中你定义了JTA数据源:
<jta-data-source>java:jboss/datasources/MSSqlDS</jta-data-source>
这是必需的,因为您希望容器管理您的交易。据我所知,您无法使用JTA定义连接参数。
您正在使用H2的原因是默认使用ExampleDS
这是默认数据源。您可以将自己的数据源设置为默认数据源,也可以从<jta-data-source/>
中取消persistence.xml
。
/substem=ee/service=default-bindings:write-attribute(name=datasource, value="java:jboss/datasources/MSSqlDS")
这会将默认数据源java:comp/DefaultDataSource
设置为您定义的数据源。