的persistence.xml如何驗證實體管理器可以建立與數據庫的連接?
<?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="prod" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>webadmin.domain.WebSite</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/dummy?useUnicode=yes&characterEncoding=utf8;" />
<property name="hibernate.connection.username" value="root1" />
<property name="hibernate.connection.password" value="root1" />
</properties>
</persistence-unit>
服務
@Stateless
public class WebSiteService {
@PersistenceContext(unitName = "prod")
private EntityManager entityManager;
public WebSite saveWebSite(WebSite webSite) {
System.out.println("before query");
Query q=entityManager.createNativeQuery("insert into dum values (1, 'ws');");
System.out.println("before execution");
q.executeUpdate();
System.out.println("after execution");
問題
我打一個org.hsqldb.HsqlException: user lacks privilege or object not found: DUM
問題。在嘗試查找根本原因時,我用無效的數據庫名稱和無效的用戶/密碼更新了我的persistence.xml
。然而,我沒有看到與此相關的例外。所以我相信,即使使用正確的參數,我也不會連接到數據庫。這裏缺少什麼?我怎樣才能檢查這種連接?
TomEE 1.6,MySQL的5
解決方案
與JB的評論往那個TomEE需要tomee.xml來定義數據源,所以添加數據源存在。
<tomee>
<Resource id="prodDataSource" type="javax.sql.DataSource">
jdbcDriver com.mysql.jdbc.Driver
jdbcUrl jdbc:mysql://localhost:3306/yourdbname
jtaManaged true
password root
userName root
InitialSize 50
MaxActive 100
MaxIdle 3
</Resource>
</tomee>
沒有人能夠訪問我的服務器,所以我將憑證保存在tomee.xml中。這樣,我的persistence.xml屬性部分縮小爲:
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
</properties>
從服務器中刪除項目。雙擊服務器以轉到服務器概述。在服務器位置下:選擇Tomcat安裝目錄。清理服務器,項目,重新啓動。爲我工作。
一個從RajV有價值的評論:How to define MySQL data source in TomEE?
jb,你是說tomee不能從hibernate.connection.url創建數據源? – jacekn
不是。我在說的是在Java EE環境中,數據源是在容器(Tomee)配置中定義的,而且Hibernate必須配置爲使用容器定義的數據源。 –