2012-12-22 10 views
2

Play!를 다시 작성하려고합니다. 프레임 워크는 YABE tutorial이므로 Siena 모듈을 사용하여 Google App Engine에서 실행할 수 있습니다.Google App Engine에서 Cloud SQL의 @Text 필드에 바인딩하는 동안 Play Framework의 Siena 모듈이 오류 발생했습니다.

  • 재생 1.2.5
  • crudsiena 2.0.3
  • 시에나 2.0.7
  • GAE 내가 가진 1.6.0

: 나는 다음과 같은 놀이의 버전과 모듈을 사용하고 있습니다 응용 프로그램을 성공적으로 설정하고 데이터베이스에 연결되며 데이터베이스에 데이터를 저장/검색 할 수 있습니다. 그러나 Siena 모듈에서 제공하는 @Text 주석에 문제가 있습니다. Post.content 및 Comment.content 데이터 필드에 대해 MediumText 데이터 유형을 사용하여 데이터베이스를 올바르게 작성 중입니다. 다음은 생성 된 DDL은 GAE 로그에서이다 : 나는 Pascal comment on a few boards to use을 본 것처럼 내가 @Text 주석 내 Post.content 필드를 주석 한

# ----------------------------------------------------------------------- 
# Comment 
# ----------------------------------------------------------------------- 

CREATE TABLE Comment 
(
    id VARCHAR(255) NOT NULL, 
    author VARCHAR(255) NULL, 
    postedAt DATETIME, 
    content MEDIUMTEXT NULL, 
    post VARCHAR(255) NULL, 
    PRIMARY KEY (id) 
); 

# ----------------------------------------------------------------------- 
# User 
# ----------------------------------------------------------------------- 

CREATE TABLE User 
(
    id VARCHAR(255) NOT NULL, 
    email VARCHAR(255) NULL, 
    password VARCHAR(255) NULL, 
    fullname VARCHAR(255) NULL, 
    isAdmin TINYINT(1) DEFAULT false NOT NULL, 
    PRIMARY KEY (id) 
); 

# ----------------------------------------------------------------------- 
# Tag 
# ----------------------------------------------------------------------- 

CREATE TABLE Tag 
(
    id VARCHAR(255) NOT NULL, 
    name VARCHAR(255) NULL, 
    PRIMARY KEY (id) 
); 

# ----------------------------------------------------------------------- 
# Post 
# ----------------------------------------------------------------------- 

CREATE TABLE Post 
(
    id VARCHAR(255) NOT NULL, 
    title VARCHAR(255) NULL, 
    postedAt DATETIME, 
    content MEDIUMTEXT NULL, 
    author VARCHAR(255) NULL, 
    PRIMARY KEY (id) 
); 

.

내가 언급 한 바와 같이
package models; 

import ... 

public class Post extends Model { 
    ... 

    @Text 
    @Required 
    @MaxSize(10000) 
    public String content; 

    ... 
} 

, 모든 것이 잘 배치,하지만 난 데이터베이스에 게시물을 저장하려고 할 때, 나는 다음과 스택 추적 나타납니다 :

play.Logger niceThrowable: 

@6cm6cpabp 
Internal Server Error (500) 

Execution exception (In /app/controllers/Application.java around line 28) 
RuntimeException occured : Cannot load fixture initial-data.yml: Unexpected Error 

play.exceptions.JavaExecutionException: Cannot load fixture initial-data.yml: Unexpected Error 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237) 
    at play.server.ServletWrapper$ServletInvocation.execute(ServletWrapper.java:561) 
    at play.Invoker$Invocation.run(Invoker.java:278) 
    at play.server.ServletWrapper$ServletInvocation.run(ServletWrapper.java:552) 
    at play.Invoker.invokeInThread(Invoker.java:68) 
    at play.server.ServletWrapper.service(ServletWrapper.java:143) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:266) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
    at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:146) 
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:447) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:454) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:461) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:703) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:338) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:330) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:458) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:679) 
Caused by: java.lang.RuntimeException: Cannot load fixture initial-data.yml: Unexpected Error 
    at play.modules.siena.SienaFixtures.loadModels(SienaFixtures.java:273) 
    at controllers.Application.index(Application.java:28) 
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484) 
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479) 
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161) 
    at play.server.ServletWrapper$ServletInvocation.execute(ServletWrapper.java:561) 
    at play.Invoker$Invocation.run(Invoker.java:278) 
    at play.server.ServletWrapper$ServletInvocation.run(ServletWrapper.java:552) 
    at play.Invoker.invokeInThread(Invoker.java:68) 
    at play.server.ServletWrapper.service(ServletWrapper.java:143) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:454) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:461) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:703) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:338) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:330) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:458) 
    ... 1 more 
Caused by: play.exceptions.UnexpectedException: Unexpected Error 
    at play.modules.siena.SienaModelUtils.edit(SienaModelUtils.java:301) 
    at play.modules.siena.SienaModelUtils.create(SienaModelUtils.java:58) 
    at play.modules.siena.SienaPlugin.bind(SienaPlugin.java:331) 
    at play.PlayPlugin.bind(PlayPlugin.java:68) 
    at play.plugins.PluginCollection.bind(PluginCollection.java:579) 
    at play.data.binding.Binder.bind(Binder.java:112) 
    at play.data.binding.Binder.bind(Binder.java:92) 
    at play.data.binding.Binder.bind(Binder.java:88) 
    at play.modules.siena.SienaFixtures.loadModels(SienaFixtures.java:207) 
    ... 34 more 
Caused by: siena.SienaException: java.lang.IllegalArgumentException: Can not set java.lang.String field models.Post.content to com.google.cloud.sql.jdbc.internal.ClientSideClob 
    at siena.Util.setField(Util.java:286) 
    at siena.jdbc.JdbcMappingUtils.setFromObject(JdbcMappingUtils.java:205) 
    at siena.jdbc.JdbcMappingUtils.mapField(JdbcMappingUtils.java:186) 
    at siena.jdbc.JdbcMappingUtils.mapObject(JdbcMappingUtils.java:79) 
    at siena.jdbc.JdbcMappingUtils.mapObject(JdbcMappingUtils.java:67) 
    at siena.jdbc.JdbcMappingUtils.mapList(JdbcMappingUtils.java:92) 
    at siena.jdbc.JdbcPersistenceManager.doFetch(JdbcPersistenceManager.java:636) 
    at siena.jdbc.JdbcPersistenceManager.fetch(JdbcPersistenceManager.java:728) 
    at siena.AbstractPersistenceManager.get(AbstractPersistenceManager.java:71) 
    at siena.BaseQuery.get(BaseQuery.java:111) 
    at play.modules.siena.SienaModelUtils.edit(SienaModelUtils.java:227) 
    ... 42 more 
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.String field models.Post.content to com.google.cloud.sql.jdbc.internal.ClientSideClob 
    at siena.Util.setField(Util.java:284) 
    ... 52 more 
을 나는 참조를 위해 아래에있는 내 포스트 클래스를 게시

기본적으로 String의 콘텐츠 필드를 Google ClientSideClob 클래스에 매핑하려고 질식하고 있습니다. 아무도 아이디어 없어?

답변

0

데이터를 삽입하는 동안이 문제가 발생하지 않았지만 데이터베이스에서 데이터를 읽는 것이 나타났습니다. current siena master branch on github에서 수정되었습니다. 그 repo를 복제하고, 그 코드베이스에서 siena jar를 만들고, 대상 디렉토리에서 siena 모듈 lib 디렉토리로 복사했습니다.

cp ~/projects/siena/source/target/siena-1.0.0-b6.jar modules/siena-2.0.7/lib/ 

재배포하고 Google의 Cloud SQL에서 문자열과 mediumtext 필드 간의 매핑 오류를 수정했습니다.

+0

관심있는 사람들을 위해 github에이 프로젝트를 추가했습니다. [https://github.com/mikalveli/yabegae](https://github.com/mikalveli/yabegae) –

+0

Play 2 대신 Play 1.x를 사용한 이유가 있습니까? 지금 바로 Play 2가 출시 된 지금 당신이 적극적으로 개발하고 있기 때문에 부탁드립니다! – user1076371

+1

@ user1076371 play 2.x는 GAE에서 지원되지 않는 서블릿 v3을 사용하므로 GAE에 배포하는 경우 1.x를 사용해야합니다 (잘하면 계속 개발 중입니다) – momo