2013-12-07 30 views
1

的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&amp;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?

回答

0

您必須配置數據源爲MySQL數據庫:http://tomee.apache.org/configuring-datasources.html

然後你必須遵循的Hibernate的Tomee文檔:http://tomee.apache.org/tomee-and-hibernate.html。注意使用

<jta-data-source>movieDatabase</jta-data-source> 

引用在第一步中配置的數據源(movieDatabase)。

+0

jb,你是說tomee不能從hibernate.connection.url創建數據源? – jacekn

+0

不是。我在說的是在Java EE環境中,數據源是在容器(Tomee)配置中定義的,而且Hibernate必須配置爲使用容器定義的數據源。 –

相關問題