GAE startup

138 views
Skip to first unread message

Flavio Duarte

unread,
Jul 30, 2011, 1:50:50 PM7/30/11
to caelum-vraptor
Boa tarde pessoal, 
estava usando minha aplicação hoje a tarde no GAE e ela começou a não responder mais, comecei a olhar os logs e teve alguns desses problemas aqui

com.google.apphosting.api.DeadlineExceededException: This request (0f20277dbc01399e) started at 2011/07/30 16:48:24.109 UTC and was still executing at 2011/07/30 16:48:54.931 UTC.

Uncaught exception from servlet
org.apache.xerces.parsers.ObjectFactory$ConfigurationError: Provider org.apache.xerces.parsers.XIncludeAwareParserConfiguration could not be instantiated: com.google.apphosting.api.DeadlineExceededException: This request (a58ff55da93c9c6a) started at 2011/07/30 17:28:38.326 UTC and was still executing at 2011/07/30 17:29:07.985 UTC.

estou usando objectify e spring no projeto, alguém já teve isso ou o que pode ser?



Miguel Cartagena

unread,
Aug 1, 2011, 7:46:09 AM8/1/11
to caelum-...@googlegroups.com
Flavio,

Uma das restrições do GAE é que uma requisição HTTP deve durar no máximo 30s. Se o processamento passar disso, o servidor do GAE automaticamente retornará uma timeout.

Veja que tinha de processamento está sendo executado e tente dividir - na própria página do objectify tem um exemplo usando cursor.

Abraços

Flavio Duarte

unread,
Aug 1, 2011, 10:03:40 AM8/1/11
to caelum-...@googlegroups.com
Olá,
eu sei dessa limitação
esse problema estava acontecendo no startup da aplicação

depois de um tempo voltou a funcionar normal, isso que é estranho

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To view this discussion on the web visit https://groups.google.com/d/msg/caelum-vraptor/-/iyfnhcMVdTgJ.
To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.

Bruno Fuster

unread,
Aug 1, 2011, 10:05:02 AM8/1/11
to caelum-...@googlegroups.com
Flavio, tudo bem?

Algumas dicas:

- Troque o Spring por Pico
- Desabilite annotation scan e crie seu CustomProvider

Você habilitou o Always On ? Caso sim, quanto tempo leva suas requests na URI /_ah/warmup ? 
Sem o always on sua app vai iniciar quando acessar alguma página, então o tempo de startup + o tempo de processar os dados dessa página pode ser um problema. Na segunda request funcionaria de boa talvez. 

Abs,

2011/8/1 Miguel Cartagena <miguel.c...@gmail.com>

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To view this discussion on the web visit https://groups.google.com/d/msg/caelum-vraptor/-/iyfnhcMVdTgJ.

To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.



--
Bruno Fuster

Flavio Duarte

unread,
Aug 1, 2011, 10:08:00 AM8/1/11
to caelum-...@googlegroups.com
Vou fazer isso e trago o feedback

Bruno Fuster

unread,
Aug 1, 2011, 10:13:51 AM8/1/11
to caelum-...@googlegroups.com
Exemplo do custom provider com Pico:


ai é só por no web.xml 

<context-param>

    <param-name>br.com.caelum.vraptor.provider</param-name>

    <param-value>br.com.suaapp.vraptor.CustomProvider</param-value>

</context-param>

<context-param>

<param-name>br.com.caelum.vraptor.scanning</param-name>

        <param-value>disabled</param-value>

</context-param>



Outra dica Flavio é habilitar o appstats e ver o numero de RPCs que sua app faz ao iniciar, talvez você consiga estudar e minimizar essas chamadas. 

Para ativar adicione um filtro e uma servlet (coloque a URI /appstats no seu security-constraint): 

<servlet>

        <servlet-name>appstats</servlet-name>

        <servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>

</servlet>

<servlet-mapping>

        <servlet-name>appstats</servlet-name>

        <url-pattern>/appstats/*</url-pattern>

</servlet-mapping>


<filter>

       <filter-name>appstats</filter-name>

       <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>

       <init-param>

           <param-name>logMessage</param-name>

           <param-value>Appstats available: /appstats/details?time={ID}</param-value>

        </init-param>

</filter>

<filter-mapping>

       <filter-name>appstats</filter-name>

       <url-pattern>/*</url-pattern>

</filter-mapping>




2011/8/1 Flavio Duarte <flavio...@gmail.com>



--
Bruno Fuster

Flavio Duarte

unread,
Aug 1, 2011, 10:15:15 AM8/1/11
to caelum-...@googlegroups.com
Blz, muito obrigado pelas discas
como é que posso fazer para habilitar as urls com /_ah/?

E você usa objectify?

Bruno Fuster

unread,
Aug 1, 2011, 10:17:54 AM8/1/11
to caelum-...@googlegroups.com
Uso sim.

Para habilitar as URLs com /_ah voce precisa fazer um CustomVraptor:

public class CustomVRaptor extends VRaptor {


@Override

public void doFilter(ServletRequest req, ServletResponse res,

FilterChain chain) throws IOException, ServletException {

String uri = ((HttpServletRequest)req).getRequestURI();

if (uri.startsWith("/_ah") || uri.startsWith("/appstats")) {

chain.doFilter(req, res);

} else {

super.doFilter(req, res, chain);

}

}

}


e alterar no webxml:


<filter>

<filter-name>vraptor</filter-name>

<filter-class>br.com.suaapp.vraptor.CustomVRaptor</filter-class>

</filter>




2011/8/1 Flavio Duarte <flavio...@gmail.com>



--
Bruno Fuster

Flavio Duarte

unread,
Aug 1, 2011, 10:22:34 AM8/1/11
to caelum-...@googlegroups.com
Entendi,
não estou no computador do projeto, quando eu estiver eu faço isso

a minha dúvida do objectify era a seguinte

eu faço os registros das minhas classes junto com a minha classe factory
mas aqui http://code.google.com/p/objectify-appengine/wiki/BestPractices tem algo que fala sobre registos só que não entendi direito
ai queria saber como você faz o registro

Bruno Fuster

unread,
Aug 1, 2011, 10:22:46 AM8/1/11
to caelum-...@googlegroups.com
Desculpem o código zuado ae :(




--
Bruno Fuster

Flavio Duarte

unread,
Aug 1, 2011, 10:24:35 AM8/1/11
to caelum-...@googlegroups.com
Eu tinha entendido o código, sem problemas :)

Lucas Cavalcanti

unread,
Aug 1, 2011, 10:29:15 AM8/1/11
to caelum-...@googlegroups.com
quanto ao scan, tem como fazer ele estático, daí vc não precisa criar o custom provider:

e passe o caminho do web.xml como argumento.


2011/8/1 Flavio Duarte <flavio...@gmail.com>

Bruno Fuster

unread,
Aug 1, 2011, 11:30:47 AM8/1/11
to caelum-...@googlegroups.com
Valeu Lucas!!!! Estou gerando static aqui agora :D 

Cara, uma vez o Sérgio comentou de um prototipo para cachear estruturas caras do VRaptor para os proximos inits. Existe algo que possa ser usado? Caso não, qual seria a idéia? Cachear o Webappbootstrap ?


@Flavio

Certo,

Eu tenho um DataStoreTemplate.class aqui que é um @Component @ApplicationScoped e não é @Lazy. O VRaptor sempre vai inicializar esse componente ao startar a app. Nesse componente eu registro minhas classes (usando static{} mesmo). 

O problema que eles citam é que se você usar o ObjectifyService.register() direto da classe que você quer registrar você pode ter problemas porque a JVM inicializa classes sob-demanda então não da pra garantir que ela será inicializada ao startar a app.


[]s


2011/8/1 Lucas Cavalcanti <lucasm...@gmail.com>



--
Bruno Fuster

Lucas Cavalcanti

unread,
Aug 1, 2011, 11:50:18 AM8/1/11
to caelum-...@googlegroups.com
se vc gera o static webbapp, ele já está cacheado. Acho que é isso que o sergio quis dizer

2011/8/1 Bruno Fuster <bruno...@gmail.com>

Bruno Fuster

unread,
Aug 1, 2011, 11:51:27 AM8/1/11
to caelum-...@googlegroups.com
perfeito! valeu mesmo!! startup time ta entre 2~3 segundos, muito bom!



2011/8/1 Lucas Cavalcanti <lucasm...@gmail.com>



--
Bruno Fuster

Flavio Duarte

unread,
Aug 1, 2011, 12:07:44 PM8/1/11
to caelum-...@googlegroups.com
Achei um gist do Garcia sobre registro do objectify, é como estou fazendo

:)

você poderia colocar como usou o staticscanning?

Otávio Garcia

unread,
Aug 1, 2011, 8:59:01 PM8/1/11
to caelum-...@googlegroups.com
Oi pessoal.

Atualizei o meu gist com um modo mais elegante de usar Objectify. Por favor, me corrijam se houver uma forma melhor. Em breve quero criar um cookbook sobre Objectify com VRaptor. https://gist.github.com/1064225

Outra coisa que eu fiz foi adicionar uma task para gerar a classe que o Lucas citou no momento do build/update pro GAE/J. https://gist.github.com/1119370

Abraços


2011/8/1 Flavio Duarte <flavio...@gmail.com>

Flavio Duarte

unread,
Aug 1, 2011, 9:25:41 PM8/1/11
to caelum-...@googlegroups.com
Não entendi direito, a única maneira de usar VRaptorStaticScanning é com a task como o Garcia mostrou?

Otávio Garcia

unread,
Aug 1, 2011, 9:43:41 PM8/1/11
to caelum-...@googlegroups.com
Não. O VRaptor quando inicializa procura por uma classe chamada br.com.caelum.vraptor.scan.VRaptorStaticScanning. Você pode gerar essa classe via ant-task, pode rodar na mão a classe que o Lucas falou, ou pode até mesmo fazer essa classe "na mão".

A ant-task é só para facilitar as coisas. Assim você roda a task update e ele já faz tudo, criando o static-scanning, empacotando a aplicação e enviando para o GAE.

2011/8/1 Flavio Duarte <flavio...@gmail.com>

Flavio Duarte

unread,
Aug 1, 2011, 9:51:51 PM8/1/11
to caelum-...@googlegroups.com
Hm entendi
Vou fazer aqui

Flavio Duarte

unread,
Aug 1, 2011, 10:04:47 PM8/1/11
to caelum-...@googlegroups.com
Ele cria a classe StaticProjectBootstrap.class?
com essa é com o scanning desativado foi gritante a diferença

Em 1 de agosto de 2011 22:43, Otávio Garcia <ota...@otavio.com.br> escreveu:

Lucas Cavalcanti

unread,
Aug 1, 2011, 10:22:31 PM8/1/11
to caelum-...@googlegroups.com
sim, o scan demora um pouco ;)

em apps normais essa demora é aceitável, no GAE não.

2011/8/1 Flavio Duarte <flavio...@gmail.com>

Otávio Garcia

unread,
Aug 1, 2011, 11:41:18 PM8/1/11
to caelum-...@googlegroups.com
Lucas, apenas criando a StaticProjectBootstrap não é a mesma coisa que desativar no web.xml via br.com.caelum.vraptor.scanning?

2011/8/1 Lucas Cavalcanti <lucasm...@gmail.com>

Lucas Cavalcanti

unread,
Aug 1, 2011, 11:52:44 PM8/1/11
to caelum-...@googlegroups.com
teoricamente sim

2011/8/2 Otávio Garcia <ota...@otavio.com.br>
Reply all
Reply to author
Forward
0 new messages