2013-04-29 3 views
0

이것은 내 첫 번째 google 응용 프로그램 엔진 서블릿으로 웹 사이트를 크롤링하여 응용 프로그램 엔진에서 backgroundThread를 사용하여 스레드를 만들었 으면합니다. 내 문제는 localhost에서이 응용 프로그램을 실행할 때입니다. : 8888 그것은 올바르게 작동하고 그것이해야 할 일을합니다.Google 응용 프로그램을 배포하는 동안

Youm7 youm7Crawler = new Youm7(); log.info("start 1"); Thread youm7Thread = ThreadManager.createBackgroundThread(youm7Crawler); log.info("start 2"); log.info("start 3"); youm7Thread.start(); 하지만 난 오류 500 서버를 가지고 서버로 배포 시도하고 난 로그에이 중요한 오류가 발생하면

`Uncaught exception from servlet 
java.lang.IllegalStateException: This feature is only available to backend instances. 
    at com.google.appengine.api.system.SystemServiceImpl.translateException(SystemServiceImpl.java:40) 
    at com.google.appengine.api.system.SystemServiceImpl.startBackgroundRequest(SystemServiceImpl.java:28) 
    at com.google.apphosting.runtime.ApiProxyImpl$BackgroundThreadFactory.newThread(ApiProxyImpl.java:1125) 
    at com.google.appengine.api.ThreadManager.createBackgroundThread(ThreadManager.java:88) 
    at newscrawler.crawlerServlet.doGet(crawlerServlet.java:30) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    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:125) 
    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.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:57) 
    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:438) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:480) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:722) 
2013-04-29 06:27:25.205 /myreminderapp 200 66ms 0kb Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31` 

그래서 난이 같은 서버에서 작동하기 위해 무엇을해야하는지 내 로컬

+0

가능한 중복 http://stackoverflow.com/questions/16252298/error-running-servlet-on-google-app- 엔진 배포 후) –

+0

당신은 이틀 전에 같은 질문을하고 답을 얻었고 그것을 받아 들였습니다. 이 질문은 어떻게 다른가요? –

+0

2 일간 진행 다른 유형의 스레드와 다른 디자인을 사용하고 있습니다. 피터의 조언을 받고 난 후에 모두 변경되었으며 아직 작동하지 않아 다른 질문을 게시했습니다. – dab7

답변

0

GAE의 배치는 두 가지 유형이 있습니다. 하나는 프론트 엔드 (기본값)이고 많은 제한이 있지만 매우 빠르게 확장 할 수 있습니다. 다른 하나는 backends이고 백엔드 인스턴스에는 프런트 엔드만큼 제한이 없습니다. 응용 프로그램은 Threds를 사용하기 때문에 백엔드 인스턴스로만 실행할 수 있습니다. xml 파일을 통해 응용 프로그램 백엔드를 구성해야합니다. 자세한 내용은 here 응용 프로그램을 백엔드 인스턴스로 배포해야합니다. Google eclipse 플러그인을 통해 응용 프로그램을 업로드 할 때 창에 배포 할 프론트 엔드 및 백엔드를 선택할 수있는 옵션이 있습니다 .

이 도움이 -Hope [배포 한 후 Google 앱 엔진에 오류 실행 서블릿 (의

+0

시간을 절약 할 수 있지만 여전히 작동하지 않습니다. ( – dab7

+0

덕분에 대단히 @skywalker :)) – dab7

관련 문제