2013-01-25 2 views
1

MySQL을 사용하는 Amazon EC2에서 작동하는 Spring Hibernate 응용 프로그램이 작동 중입니다. Google Could SQL로 MySQL을 지원하기 때문에 Google App Engine에 애플리케이션을 포팅 할 생각입니다.Spring App Engine Cloud SQL 문제 (Spring Hibernate 포함)

내 기존 응용 프로그램을 Google App Engine 웹 응용 프로그램에 구성한 다음 아무런 오류없이 코드를 컴파일하십시오. 기존 응용 프로그램을 변경하지 않았으며 컴파일하고 필요한 테이블을 만들고 서버를 성공적으로 시작했습니다.

그러나 최대 절전 모드를 통해 데이터베이스에 액세스하는 응용 프로그램을 실행할 때 다음 오류가 발생합니다.

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) 

내 엔티티 클래스에 주석을 사용하고 있습니다.

변경해야 할 사항이 있습니까?

아래 나는 당신이 데이터베이스 구성이 잘못 쓰기 problem.Either 연결 또는 데이터베이스와 응용 프로그램 데이터 손실이 사이의 연결 믿고 내 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.driverClassName = com.google.appengine.api.rdbms.AppEngineDriver ** ** jdbc.url = JDBC : 구글 : RDBMS : // localhost를/데이터베이스 ** – zdesam

+0

@zdesam : 나는 똑같은 상황에 직면 해있다. – 1355

+0

@ 1355 당신이 직면 한 문제의 세부 사항을 제공 할 수 있습니까? – zdesam

답변

3

Eclipse localhost 및 appengine 인스턴스에서 Google Cloud SQL을 실행하려면 다음 사항을 확인해야합니다.

  1. Cloud SQL 인스턴스가 생성 된 것과 동일한 Google 계정으로 이클립스에 로그인하십시오.
  2. 마우스 오른쪽 단추를 클릭하면 프로젝트 속성은 로컬 호스트에 대한 MySQL의 인스턴스를 선택 Google 클라우드 SQL 인스턴스
  3. 을 활성화하고 그 값을 구성 구글> AppEngine에 검사로 이동합니다.

    Instance Name : something:something  // This you will get under Google Cloud SQL tab under Google API Console 
    Database Name : yourdatabasename 
    Username : yourMySQLUserName 
    Password : yourPassword 
    
  4. 은 그냥 MySQL의 커넥터 - 자바 xxxx.jar 파일을 복사하여 AppEngine에 SDK의이 위치에 아래에 붙여 넣습니다

    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 
    
  5. 뿐만 아니라 Google 클라우드 SQL 인스턴스 구성 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. 드라이버 클래스 이름과 데이터베이스 액세스 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을 쉽게 구성 할 수 있습니다. 두 JDBC 속성을 변경하여 근무

관련 문제