2013-01-25 50 views
1

我有一個工作在亞馬遜EC2與MySQL的Spring Hibernate應用程序。我正在考慮將我的應用程序移植到Google App Engine,因爲Google現在使用Google Could SQL支持MySQL。谷歌Appengine雲春季休眠與SQL的問題

因此,將我現有的應用程序配置爲Google App Engine Web應用程序,然後編譯代碼時不會出現任何錯誤。我沒有改變任何東西到我現有的應用程序,它編譯並創建了所需的表並且服務器成功啓動。

但是,當運行通過hibernate訪問數據庫的應用程序時,出現以下錯誤。

org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection 
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:596) 
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) 
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335) 
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
at $Proxy30.findById(Unknown Source) 
at com.openentry.catgen.services.impl.WebsiteServiceImpl.getMasterDomain(WebsiteServiceImpl.java:99) 

我正在爲我的實體類使用註釋。

有什麼我需要改變嗎?下面

是我的applicationContext.xml

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" 
    p:username="${jdbc.username}" p:password="${jdbc.password}" /> 

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
    p:dataSource-ref="dataSource" p:configurationClass="org.hibernate.cfg.AnnotationConfiguration" 
    p:packagesToScan="com.package.app.entities"> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> 
      <prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop> 
      <prop key="hibernate.connection.useUnicode">${hibernate.connection.useUnicode}</prop> 
      <prop key="hibernate.connection.characterEncoding">${hibernate.connection.characterEncoding}</prop> 
      <prop key="hibernate.connection.charSet">${hibernate.connection.charSet}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
     </props> 
    </property> 

</bean> 

<tx:annotation-driven /> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
    p:sessionFactory-ref="sessionFactory" /> 

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
    <constructor-arg> 
     <ref bean="sessionFactory" /> 
    </constructor-arg> 
</bean> 
+3

一切只需更改兩個JDBC性工作** jdbc.driverClassName = com.google.appengine.api.rdbms.AppEngineDriver ** ** = jdbc.url的jdbc:谷歌:RDBMS://本地主機/數據庫** – zdesam

+0

@zdesam:我面臨着同樣的情況。你能幫我嗎 – 1355

+0

@ 1355你能提供你面臨的問題的細節嗎 – zdesam

回答

0

我相信這是problem.Either你寫的數據庫配置錯誤的連接或數據庫和應用程序有數據丟失之間的連接。

3

要在Eclipse本地主機和appengine實例上運行Google Cloud SQL,必須列出以下幾點。

  1. 使用與您的Cloud SQL實例相同的Google帳戶登錄到您的eclipse。
  2. 右鍵單擊項目屬性去谷歌>的AppEngine檢查啓用谷歌Cloud SQL執行
  3. 選擇本地主機的MySQL實例並配置其值。

    Hostname : localhost 
    Database Name : yourdatabasename 
    Port No : 3306 
    Username : yourMySQLUserName 
    Password : yourPassword 
    Path to MySQL JDBC Jar : Path where your mysql-connector-java-x.x.xx.jar // I usually put this jar on the WEB-INF/lib 
    
  4. 配置谷歌雲SQL實例還有:

    Instance Name : something:something  // This you will get under Google Cloud SQL tab under Google API Console 
    Database Name : yourdatabasename 
    Username : yourMySQLUserName 
    Password : yourPassword 
    
  5. 只要複製你的MySQL連接器的Java-xxxx.jar文件,並將其粘貼到您的AppEngine SDK的這個位置下Eclipse

    // This path is shown for Eclipse 
    
    D:\MyEclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.7.2.1\appengine-java-sdk-1.7.2.1\lib\impl\ 
    
  6. Driver ClassName和Database Access URL應更改爲以下值。

    AppengineDriver Class Name : com.google.appengine.api.rdbms.AppEngineDriver 
    Database Access URL : jdbc:google:rdbms://instance_name/database_name 
    e.g. jdbc:google:rdbms://XXXXXX:xxxxx/XXX_databasename 
    user : username // Your Database User by default its root 
    password : password // Your Database Password by default its blank in GAE Cloud SQL 
    
  7. 通過遵循所有的操作,您可以輕鬆地在Eclipse中配置Google Cloud SQL。