2012-07-20 81 views
0

所有, 我想配置谷歌應用程序引擎與本地的MySQL數據庫實例和使用Hibernate JPA工作。 安裝後我有一個插座的問題,我才意識到之前(http://stackoverflow.com/questions/10585140/gae-cloudsql-with-mysql-access-denied)進行了討論,所以我遵循的指示,並試圖解決我的問題。然而由於某種原因,eclipse正在做一些令人討厭的事情,並且消除了對persistence.xml文件所做的更改,因爲它在所提到的帖子中有所指示。問題與GAE,JPA和Hibernate設置

爲了測試這一點,我安裝了一個新鮮的Eclipse(朱諾)和加載的谷歌插件。 我創建了一個測試應用程序 我將JPA添加到is並將其設置爲使用hibernate。 我的Google App財產我要確保它使用本地MySQL

到目前爲止好。當我查看生成的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_1_0.xsd" version="1.0"> 
    <persistence-unit name="transactions-optional" transaction-type="RESOURCE_LOCAL"> 
    <provider></provider> 
     <properties> 
      <property name="datanucleus.NontransactionalRead" value="true"/> 
      <property name="datanucleus.NontransactionalWrite" value="true"/> 
      <property name="datanucleus.ConnectionURL" value="appengine"/> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/shelem?user=root&amp;password=gandom"/> 
      <property name="javax.persistence.jdbc.user" value="root"/> 
      <property name="javax.persistence.jdbc.password" value="gandom"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

正如你可以看到供應商設置爲無(錯誤)和URL和驅動程序屬性也是錯誤的(按提到的文章)。 如果我運行應用程序,是我會在上面的文章中提到的套接字錯誤例外,所以我手動更改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_1_0.xsd" version="1.0"> 
    <persistence-unit name="transactions-optional" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <properties> 
      <property name="datanucleus.NontransactionalRead" value="true"/> 
      <property name="datanucleus.NontransactionalWrite" value="true"/> 
      <property name="datanucleus.ConnectionURL" value="appengine"/> 
      <property name="javax.persistence.jdbc.driver" value="com.google.appengine.api.rdbms.AppEngineDriver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:google:rdbms://localhost/Guardian"/> 
      <property name="javax.persistence.jdbc.user" value="root"/> 
      <property name="javax.persistence.jdbc.password" value="gandom"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

然後瘋狂的事情發生!當我這樣做,我乾淨/構建應用程序,所以我可以啓動它的Eclipse抹了我的變化,把persistence.xml文件看起來像它以前我手動所做的更改,並..... 有趣的是,如果我想補充意見或其它任何改動這些變化會保持不變,不會丟失因此它似乎出於某種原因日食將只替換建議解決我的問題的代碼!

它已經快把我逼瘋了,有人已經看到了這一點?有什麼建議麼?

感謝您的意見。

阿米爾

+0

僅供參考我設法解決這個問題(沒有任何變化!只是使用的EclipseLink,而不是休眠)和所有本地工作正常,我可以訪問我的數據庫,並....還是想知道如何冬眠工作,但好慶幸的是,我沒有被阻塞。 – 2012-07-20 19:04:44

回答

1

看來至少與應用程序引擎的1.7版不能使用任何東西,但作爲的EclipseLink持久性提供。使用EL並不是一個主要問題,因爲無論訪問本地數據庫的方式如何,Google都會在應用引擎服務器場上使用自己的提供商。

也就是說,甚至可以最好使用EclipseLink進行本地開發,因爲您可能嵌入代碼中的任何持久性提供程序特定邏輯與您的代碼不兼容,因此最終會在部署後返回並破壞代碼更安全的方法是在本地使用EclipesLink。

希望這有助於其他人,以便和我一樣,他們不會浪費時間。