简体   繁体   中英

HTTP 302 on backend start in appengine

I have an appengine application, using Spring 3.1.2, and working just fine. The Resident/Dynamic instances starts normally using warmup:

2013-05-20 20:32:53.786 /_ah/warmup 200 27205ms 0kb

Now I'm trying to configure a task queue to be handled by "backends" instances, but during the /_ah/start it's logging this unexpected HTTP 302 Redirection Status code:

2013-05-20 20:43:57.345 /_ah/start 302 50631ms 0kb instance=0

0.1.0.3 - - [20/May/2013:16:43:56 -0700] "GET /_ah/start HTTP/1.1" 302 106 - - "0.my-backend.my-application.appspot.com" ms=50597 cpu_ms=44134 cpm_usd=0.000012 loading_request=1 exit_code=111 instance=0 app_engine_release=1.8.0

I 2013-05-20 20:43:09.864 javax.servlet.ServletContext log: Initializing Spring root WebApplicationContext

...
A bunch of messages...
...

I 2013-05-20 20:43:55.659 org.springframework.web.context.ContextLoader initWebApplicationContext: Root WebApplicationContext: initialization completed in 45793 ms
I 2013-05-20 20:43:56.442 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.
E 2013-05-20 20:43:56.442 Process terminated because it failed to respond to the start request with an HTTP status code of 200-299 or 404.

I removed the Spring Servlet and Filter Chain in web.xml, but nothing changed.

I also mapped the _ah as unsecured. It's working as expected in the resident instance, but for the backend not:

<http security="none" pattern="/_ah/**" disable-url-rewriting="true"/>

Am I missing something ?!?!

I found the solution... It was a conflict with the Spring View Resolver, it was trying to redirect the "_ah/start" with the prefix and suffix:

<bean lazy-init="true"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/views/" />
  <property name="suffix" value=".jsp" />
</bean>

To solve it I mapped the "warmup" and "start" to an empty Servlet:

<servlet>
  <servlet-name>_ah_warmup</servlet-name>
  <servlet-class>com.my.app.EmptyWarmupServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>_ah_warmup</servlet-name>
  <url-pattern>/_ah/warmup</url-pattern>
  <url-pattern>/_ah/start</url-pattern>
</servlet-mapping>

Now the backend is starting and handling the task queue as expected !!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM