On Wed, May 26, 2010 at 14:08, Alex Kotchnev <akoch...@gmail.com> wrote:

> Dmitry,
>   very nice analysis. Before explicitly setting the application version,
> did you observe the issues w/ the assets loading intermittently ?
>
>
Yes I had problems with this. Instead of returning CSS/JS contents T5
rendered index page and returned it as result.


> Regards,
>
> Alex K
>
> On Wed, May 26, 2010 at 5:55 AM, Dmitry Gusev <dmitry.gu...@gmail.com
> >wrote:
>
> > I think have some progress in this.
> >
> > After upgrade to latest T5.2.0-SNAPSHOT resource links like
> >
> >    <link rel="stylesheet" type="text/css"
> > > href="/assets/anjlab/cubics/css/cube.css" />
> > >
> >
> >  not working anymore. So I desided to switch to Assets.
> >
> > Now the same CSS referenced like this:
> >
> >    <link rel="stylesheet" type="text/css"
> > href="${asset:classpath:/anjlab/cubics/css/cube.css}" />
> >
> > Note its located in another jar. To make this work I had to contribute to
> > ClasspathAssetAliasManager:
> >
> >    public static void
> > contributeClasspathAssetAliasManager(MappedConfiguration<String, String>
> > configuration)
> >    {
> >        configuration.add("cubics", "anjlab/cubics");
> >    }
> >
> > Other stylesheets located at my app referenced like this:
> >
> >    <link rel="stylesheet" type="text/css" href="${context:/css/all.css}"
> />
> >
> > During rendering this link became:
> >
> > http://ping-service.appspot.com/assets/1e85d3b227a83f96/ctx/css/all.css
> >
> > Note this '1e85d3b227a83f96' hash. As I learned this is
> > APPLICATION_VERSION,
> > which is by default:
> >
> > configuration.add(SymbolConstants.APPLICATION_VERSION,
> > Long.toHexString(random.nextLong()));
> >
> > So two different instances of applications will have different
> application
> > versions unless you contribute APPLICATION_VERSION in your AppModule
> (this
> > is what I had to do to avoid asset errors).
> >
> > Now imagine that GAE hosts two instances of your app to handle requests.
> > One
> > request retrieves HTML with links to CSS and JS files. Your browser will
> > try
> > load these assets simultaneously and it may happen that second instance
> > will
> > handle one of those requests, and since it have another value of
> > APPLICATION_VERSION you will get an error and browser couldn't load
> > response.
> >
> > To fix it you should declare APPLICATION_VERSION explicitly in AppModule,
> > here is mine:
> >
> >    public static void contributeApplicationDefaults(
> >            MappedConfiguration<String, String> configuration)
> >    {
> >       // ...
> >        configuration.add(SymbolConstants.APPLICATION_VERSION, "beta");
> >    }
> >
> >
> > Hope this help.
> >
> >
> >
> > On Tue, Apr 13, 2010 at 21:13, Dmitry Gusev <dmitry.gu...@gmail.com>
> > wrote:
> >
> > > Alex,
> > >
> > > I don't have anything special in the app config, here is it:
> > >
> > > <?xml version="1.0" encoding="utf-8"?>
> > > <appengine-web-app xmlns="http://appengine.google.com/ns/1.0";>
> > >     <application>ping-service</application>
> > >     <version>beta</version>
> > >     <sessions-enabled>true</sessions-enabled>
> > >     <precompilation-enabled>true</precompilation-enabled>
> > >
> > >     <!-- Configure java.util.logging -->
> > >     <system-properties>
> > >         <property name="java.util.logging.config.file"
> > > value="WEB-INF/logging.properties"/>
> > >     </system-properties>
> > >
> > >     <admin-console>
> > >         <page name="Appstats" url="/appstats/" />
> > >     </admin-console>
> > > </appengine-web-app>
> > >
> > > I'd also recommend you to set up appstats, you may find something
> > > interesting in there.
> > >
> > > As for request deadlines, I'm also having HardDeadlineExceededError,
> and
> > > this usually happens in two reasons:
> > > 1. New T5 instance starting up. According to logs it tooks about 20
> > seconds
> > > in average to startup (thats why your may to be unresponsive within in
> 10
> > > seconds for ping service).
> > >
> > > Such requests in logs starts like this:
> > >
> > >
> > >    1.
> > >
> > >    0.1.0.2 - - [13/Apr/2010:06:38:31 -0700] "GET
> >
> /task/runjob;jsessionid=KpgsZ4bjrewWXHbiG4OlWg/?job=agxwaW5nLXNlcnZpY2VyGAsSCFNjaGVkdWxlGDwMCxIDSm9iGNEPDA
> > HTTP/1.1" 500 8799 "
> > http://ping-service.appspot.com/cron/?schedule=every%205%20minutes";
> > "AppEngine-Google; (+http://code.google.com/appengine)" "
> > ping-service.appspot.com"
> > >
> > >    2.  D 04-13 06:38AM 10.523
> > >
> > >    org.apache.tapestry5.ioc.internal.ModuleImpl create: Creating
> service
> > 'TimingFilter'.
> > >
> > >    3.  D 04-13 06:38AM 10.543
> > >
> > >    org.apache.tapestry5.ioc.internal.ModuleImpl create: Creating
> service
> > 'Utf8Filter'.
> > >
> > >
> > > ...
> > >
> > > 04-13 06:38AM 29.877
> > >
> > > dmitrygusev.ping.services.JobExecutor execute: Error fetching url
> > http://www.zadachite.com
> > > com.google.apphosting.api.DeadlineExceededException: This request
> > (94c02a0647915c1e) started at 2010/04/13 13:38:01.337 UTC and was still
> > executing at 2010/04/13 13:38:29.868 UTC.
> > >
> > >
> > >       at java.lang.Object.wait(Native Method)
> > >       at java.lang.Object.wait(Object.java:443)
> > >       at java.util.concurrent.TimeUnit.timedWait(Unknown Source)
> > >       at
> > com.google.apphosting.runtime.AsyncFuture.get(AsyncFuture.java:60)
> > >
> > >
> > >       at
> >
> com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.get(ApiProxyImpl.java:319)
> > >       at
> >
> com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.get(ApiProxyImpl.java:210)
> > >       at
> >
> com.google.apphosting.runtime.ApiProxyImpl.doSyncCall(ApiProxyImpl.java:131)
> > >
> > >
> > >       at
> >
> com.google.apphosting.runtime.ApiProxyImpl.access$000(ApiProxyImpl.java:43)
> > >       at
> > com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:104)
> > >       at
> > com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:102)
> > >
> > >
> > >       at java.security.AccessController.doPrivileged(Native Method)
> > >       at
> >
> com.google.apphosting.runtime.ApiProxyImpl.makeSyncCall(ApiProxyImpl.java:102)
> > >       at
> >
> com.google.apphosting.runtime.ApiProxyImpl.makeSyncCall(ApiProxyImpl.java:43)
> > >
> > >
> > >       at
> >
> com.google.appengine.tools.appstats.Recorder.makeSyncCall(Recorder.java:225)
> > >       at
> > com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:102)
> > >       at
> >
> com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:34)
> > >
> > > was this yours? :)
> > >
> > > If you're using Spring, new T5 instance startup may take longer than 30
> > > secs which will lead to deadline exception. I used Spring for
> transaction
> > > management before, but I refused to use it and using Tynamo now.
> > >
> > > I also noticed that exceptions make take pretty much time of request,
> so
> > if
> > > you have any exceptions (no matter handled or not) requests become
> > longer. I
> > > found that if you're using Tynamo, you usually get one
> RollbackException
> > at
> > > the end of each request.
> > >
> > > 2. The other reason of deadline exceptions for me are long database
> > > requests. I found that in some cases datastore queries (even simple
> > queries)
> > > may take too many time to process sometime, but in other cases the same
> > > queries run pretty fast.
> > >
> > > p.s.
> > > favicon.ico is not an issue actually, all you need to fix it is put
> > > favicon.ico icon to your app.
> > > I already have favicon, but its with *.png extension. Looks like some
> > > browsers still looking for *.ico...
> > > I should convert that *.png to *.ico ... can't settle down to this :)
> > >
> > >
> > >
> > > On Tue, Apr 13, 2010 at 18:36, Alex Kotchnev <akoch...@gmail.com>
> wrote:
> > >
> > >> Dmitry,
> > >>   I do have the favicon.ico issue showing up in the logs as well, I'll
> > >> need
> > >> to look into that. Do you have anything special set up for the "static
> > >> files" section in the appengine config xml file ?
> > >>
> > >>   The problem w/ the failed requests for assets is that they don't
> show
> > up
> > >> in the error log. Every once in a while, I'd get an error like this
> > (which
> > >> shouldn't happen - a request to a simple page should never take 30
> > >> seconds)
> > >> :
> > >>
> > >> Regards,
> > >>
> > >> Alex K
> > >>
> > >> Error for /faq
> > >> com.google.apphosting.runtime.HardDeadlineExceededError: This request
> > >> (b2c1ec272f017727) started at 2010/04/10 10:56:07.705 UTC and was
> > >> still executing at 2010/04/10 10:56:36.820 UTC.
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.ioc.util.CaseInsensitiveMap.access$008(CaseInsensitiveMap.java:30)
> > >>        at
> > >>
> >
> org.apache.tapestry5.ioc.util.CaseInsensitiveMap$Position.put(CaseInsensitiveMap.java:287)
> > >>        at
> > >>
> >
> org.apache.tapestry5.ioc.util.CaseInsensitiveMap.put(CaseInsensitiveMap.java:355)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.ioc.util.CaseInsensitiveMap.put(CaseInsensitiveMap.java:30)
> > >>        at
> > >>
> >
> org.apache.tapestry5.ioc.internal.services.ClassPropertyAdapterImpl.<init>(ClassPropertyAdapterImpl.java:53)
> > >>        at
> > >>
> >
> org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl.buildAdapter(PropertyAccessImpl.java:92)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl.getAdapter(PropertyAccessImpl.java:65)
> > >>        at
> > >>
> $PropertyAccess_127e75ce676.getAdapter($PropertyAccess_127e75ce676.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.infoForPropertyNode(PropertyConduitSourceImpl.java:978)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.infoForPropertyOrMethod(PropertyConduitSourceImpl.java:971)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.createGetterAndSetter(PropertyConduitSourceImpl.java:433)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.createAccessors(PropertyConduitSourceImpl.java:416)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.createInstance(PropertyConduitSourceImpl.java:270)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PropertyConduitSourceImpl.build(PropertyConduitSourceImpl.java:1254)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PropertyConduitSourceImpl.create(PropertyConduitSourceImpl.java:1121)
> > >>
> > >>        at
> > >>
> >
> $PropertyConduitSource_127e75ce6ee.create($PropertyConduitSource_127e75ce6ee.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.bindings.PropBindingFactory.newBinding(PropBindingFactory.java:49)
> > >>        at
> > >>
> $BindingFactory_127e75ce6ef.newBinding($BindingFactory_127e75ce6ef.java)
> > >>
> > >>        at
> > >>
> $BindingFactory_127e75ce6e7.newBinding($BindingFactory_127e75ce6e7.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.BindingSourceImpl.newBinding(BindingSourceImpl.java:81)
> > >>        at
> > >> $BindingSource_127e75ce6c5.newBinding($BindingSource_127e75ce6c5.java)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PageElementFactoryImpl.newExpansionElement(PageElementFactoryImpl.java:165)
> > >>        at
> > >>
> >
> $PageElementFactory_127e75ce6df.newExpansionElement($PageElementFactory_127e75ce6df.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.pageload.PageLoaderImpl$15.execute(PageLoaderImpl.java:1024)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.runActions(ComponentAssemblerImpl.java:207)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.assembleEmbeddedComponent(ComponentAssemblerImpl.java:157)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.pageload.PageLoaderImpl$12.execute(PageLoaderImpl.java:947)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.runActions(ComponentAssemblerImpl.java:207)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.assembleRootComponent(ComponentAssemblerImpl.java:88)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.pageload.PageLoaderImpl.loadPage(PageLoaderImpl.java:159)
> > >>        at
> $PageLoader_127e75ce6d1.loadPage($PageLoader_127e75ce6d1.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PagePoolCache.checkout(PagePoolCache.java:210)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PagePoolImpl.checkout(PagePoolImpl.java:99)
> > >>        at $PagePool_127e75ce6d0.checkout($PagePool_127e75ce6d0.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:51)
> > >>
> > >>        at
> > >> $RequestPageCache_127e75ce6cf.get($RequestPageCache_127e75ce6cf.java)
> > >>        at
> > >> $RequestPageCache_127e75ce6b8.get($RequestPageCache_127e75ce6b8.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:52)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.services.TapestryModule$33.handle(TapestryModule.java:2262)
> > >>        at
> > >>
> >
> $PageRenderRequestHandler_127e75ce6bb.handle($PageRenderRequestHandler_127e75ce6bb.java)
> > >>        at
> > >>
> >
> $PageRenderRequestHandler_127e75ce6a3.handle($PageRenderRequestHandler_127e75ce6a3.java)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48)
> > >>        at
> > >>
> >
> $ComponentRequestHandler_127e75ce6a8.handlePageRender($ComponentRequestHandler_127e75ce6a8.java)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:45)
> > >>        at
> $Dispatcher_127e75ce6aa.dispatch($Dispatcher_127e75ce6aa.java)
> > >>        at
> $Dispatcher_127e75ce6a0.dispatch($Dispatcher_127e75ce6a0.java)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:255)
> > >>        at
> > >>
> >
> nu.localhost.tapestry5.springsecurity.services.internal.RequestFilterWrapper$1.doFilter(RequestFilterWrapper.java:60)
> > >>
> > >>        at
> > >>
> >
> nu.localhost.tapestry5.springsecurity.services.internal.SpringSecurityExceptionTranslationFilter.doFilterHttp(SpringSecurityExceptionTranslationFilter.java:100)
> > >>        at
> > >>
> >
> org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> > >>
> > >>        at
> > >>
> >
> nu.localhost.tapestry5.springsecurity.services.internal.RequestFilterWrapper.service(RequestFilterWrapper.java:55)
> > >>        at
> > >> $RequestHandler_127e75ce6a1.service($RequestHandler_127e75ce6a1.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
> > >>
> > >>        at
> > >> $RequestHandler_127e75ce6a1.service($RequestHandler_127e75ce6a1.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:937)
> > >>        at
> > >> $RequestHandler_127e75ce6a1.service($RequestHandler_127e75ce6a1.java)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:926)
> > >>        at
> > >> $RequestHandler_127e75ce6a1.service($RequestHandler_127e75ce6a1.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85)
> > >>
> > >>        at
> > >> $RequestHandler_127e75ce6a1.service($RequestHandler_127e75ce6a1.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:81)
> > >>
> > >>        at
> > >>
> >
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
> > >>        at
> > >>
> >
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103)
> > >>        at
> > >> $RequestHandler_127e75ce6a1.service($RequestHandler_127e75ce6a1.java)
> > >>
> > >>        at
> > >> $RequestHandler_127e75ce695.service($RequestHandler_127e75ce695.java)
> > >>        at
> > >>
> >
> org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:206)
> > >>        at
> > >>
> >
> nu.localhost.tapestry5.springsecurity.services.internal.HttpServletRequestFilterWrapper$1.doFilter(HttpServletRequestFilterWrapper.java:56)
> > >>
> > >>        at
> > >>
> >
> org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
> > >>        at
> > >>
> >
> org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
> > >>
> > >>        at
> > >>
> >
> nu.localhost.tapestry5.springsecurity.services.internal.HttpServletRequestFilterWrapper.service(HttpServletRequestFilterWrapper.java:52)
> > >>        at
> > >>
> >
> $HttpServletRequestFilter_127e75ce693.service($HttpServletRequestFilter_127e75ce693.java)
> > >>
> > >>        at
> > >>
> >
> $HttpServletRequestHandler_127e75ce697.service($HttpServletRequestHandler_127e75ce697.java)
> > >>        at
> > >>
> >
> nu.localhost.tapestry5.springsecurity.services.internal.HttpServletRequestFilterWrapper$1.doFilter(HttpServletRequestFilterWrapper.java:56)
> > >>
> > >>        at
> > >>
> >
> nu.localhost.tapestry5.springsecurity.services.internal.SpringSecurityExceptionTranslationFilter.doFilterHttp(SpringSecurityExceptionTranslationFilter.java:100)
> > >>        at
> > >>
> >
> org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> > >>
> > >>        at
> > >>
> >
> nu.localhost.tapestry5.springsecurity.services.internal.HttpServletRequestFilterWrapper.service(HttpServletRequestFilterWrapper.java:52)
> > >>        at
> > >>
> >
> $HttpServletRequestHandler_127e75ce697.service($HttpServletRequestHandler_127e75ce697.java)
> > >>
> > >>        at nu.loca
> > >>
> > >>
> > >>
> > >> On Tue, Apr 13, 2010 at 9:31 AM, Dmitry Gusev <dmitry.gu...@gmail.com
> > >> >wrote:
> > >>
> > >> > Hi, Alex
> > >> >
> > >> > I'm including *.css and *.png by simply using link rel, like this:
> > >> >
> > >> >    <link rel="stylesheet" type="text/css"
> > >> > href="/assets/anjlab/cubics/css/cube.css" />
> > >> >
> > >> > cube.css located here:
> > >> >
> > >> >
> > >> >
> > >>
> >
> ping-service\war\WEB-INF\lib\cubics-renders-1.0.1.jar\anjlab\cubics\css\cube.css
> > >> >
> > >> > I also set up regexAuthorizer:
> > >> >
> > >> >    public void contributeRegexAuthorizer(Configuration<String>
> regex)
> > >> >    {
> > >> >        String pathPattern =
> > >> > "([^/.]+/)*[^/.]+\\.((css)|(js)|(jpg)|(jpeg)|(png)|(gif))$";
> > >> >        regex.add("^anjlab/cubics/css/" + pathPattern);
> > >> >        regex.add("^anjlab/cubics/images/" + pathPattern);
> > >> >        regex.add("^anjlab/cubics/js/" + pathPattern);
> > >> >        regex.add("^anjlab/cubics/js/jquery-1.3.2.js");
> > >> >    }
> > >> >
> > >> > I can't say I have any problems with this.
> > >> > At least right now in my error list at GAE Admin console I don't
> have
> > >> any
> > >> > assets related issues.
> > >> >
> > >> > I have only one page actively using *.css, *.js, etc., here's the
> > >> > declarations:
> > >> >
> > >> > <head>
> > >> >    <title>Job Analytics - Ping Service</title>
> > >> >    <link rel="stylesheet" type="text/css" href="/css/all.css" />
> > >> >    <link rel="icon" type="image/png" href="/favicon.png" />
> > >> >    <link rel="stylesheet" type="text/css"
> > >> > href="/assets/anjlab/cubics/css/cube.css" />
> > >> >    <link rel="stylesheet" type="text/css" href="/css/analytics.css"
> />
> > >> >    <script type="text/javascript"
> > >> > src="/assets/anjlab/cubics/js/jquery-1.3.2.js"></script>
> > >> >    <script type="text/javascript"
> > >> > src="/assets/anjlab/cubics/js/cube.js"></script>
> > >> >    <!--[if IE]><script language="javascript" type="text/javascript"
> > >> > src="excanvas.min.js"></script><![endif]-->
> > >> >    <script type="text/javascript" src="/js/jquery.flot.js"></script>
> > >> >    <script type="text/javascript"
> > src="/js/jquery.flot.pie.js"></script>
> > >> >    <script type="text/javascript" src="/js/analytics.js"></script>
> > >> > </head>
> > >> >
> > >> > p.s.
> > >> > One issue I have though is '/favicon.ico' problem :)
> > >> >
> > >> > On Tue, Apr 13, 2010 at 17:20, Alex Kotchnev <akoch...@gmail.com>
> > >> wrote:
> > >> >
> > >> > > Daniel,
> > >> > >   I do try to watch out for T5/GAE related posts on this list and
> > try
> > >> to
> > >> > > respond to the best of my ability. I would blog about this more if
> I
> > >> > > weren't
> > >> > > as swamped with things to do.
> > >> > >
> > >> > >   I would be interested in hearing from other folks (e.g. Dmitry)
> > that
> > >> > have
> > >> > > deployed on GAE - in previous questions relating to this issue,
> > folks
> > >> had
> > >> > > mentioned that they don't have a problem w/ this, which makes me
> > think
> > >> > that
> > >> > > I might have something configured incorrectly (although I'm not
> > doing
> > >> > > special  here, other than having a few images loaded from the
> > >> > stylesheet).
> > >> > > I
> > >> > > do use the AssetAuthorizer (that was eventually added to 5.2) and
> > >> that's
> > >> > > another possible failure point (e.g. if for whatever reason, the
> > >> > > authorization fails in some cases and denies access).
> > >> > >
> > >> > >   On the other hand, serving these assets as static content has
> > >> dropped
> > >> > my
> > >> > > CPU usage - I had an cron job watching the site and keeping it
> warm
> > >> (so
> > >> > > that
> > >> > > GAE doesn't swap it out), which was using up about 40% of the free
> > CPU
> > >> > > quota
> > >> > > - so far, the CPU usage should be about 20% lower.
> > >> > >
> > >> > > Regards,
> > >> > >
> > >> > > Alex Kotchnev
> > >> > >
> > >> > > On Tue, Apr 13, 2010 at 3:44 AM, Daniel Henze <
> > dhe...@googlemail.com>
> > >> > > wrote:
> > >> > >
> > >> > > > Hi Alex,
> > >> > > >
> > >> > > > thanks for that follow-up post. Since I'm going to develop with
> T5
> > >> on
> > >> > GAE
> > >> > > > as well, this will be in the back of my head as a potential
> > cave-at.
> > >> > I'll
> > >> > > be
> > >> > > > interested in any further findings regarding GAE since it seems
> > that
> > >> > > > Tapestry is better tailored towards this particular platform
> > >> (compared
> > >> > to
> > >> > > > Wicket).
> > >> > > >
> > >> > > > Best regards
> > >> > > > Daniel
> > >> > > >
> > >> > > > Am 13.04.2010 06:23, schrieb Alex Kotchnev:
> > >> > > >
> > >> > > >  I spent some more time looking at this and I ended up removing
> > the
> > >> > usage
> > >> > > >> of
> > >> > > >> the ${asset:context:css/foobar.css} from the main templates.
> > After
> > >> > doing
> > >> > > >> so,
> > >> > > >> all of the issues related to the stylesheet (and the
> > >> sub-stylesheets
> > >> > and
> > >> > > >> images that it loads) were cleared up - now, the stylesheets
> load
> > >> > > properly
> > >> > > >> every time when they're not loaded through the asset service.
> > >> > > >>
> > >> > > >> I first thought that this might be an issue w/ how GAE handles
> > >> static
> > >> > > >> files
> > >> > > >> - supposedly, all files in the web context are handled
> specially
> > (
> > >> w/
> > >> > > the
> > >> > > >> exception of JSPs of course, but that's not relevant in T5),
> > >> probably
> > >> > > >> served
> > >> > > >> up from outside of Jetty (which is what runs the app in GAE)
> and
> > >> there
> > >> > > >> might
> > >> > > >> be something that is weird in GAE giving access to those static
> > >> > assets.
> > >> > > >> However, after I switched to just using the raw path to the css
> > >> (w/o
> > >> > > using
> > >> > > >> the asset:context binding prefixes), I continued having the
> same
> > >> > > >> intermittent access issues for assets that are served from a
> > >> > component.
> > >> > > >> Which on its own indicates that the issue is somewhere between
> > the
> > >> > Asset
> > >> > > >> service (which I haven't looked at the source code for yet) and
> > the
> > >> > way
> > >> > > it
> > >> > > >> uses the servlet API and/or the filesystem to serve the assets
> > that
> > >> > it's
> > >> > > >> asked for.
> > >> > > >>
> > >> > > >> I haven't moved all my css / image serving out of the asset
> > service
> > >> -
> > >> > it
> > >> > > >> has
> > >> > > >> some cool ideas in terms of being able to package the app.
> > However,
> > >> > > >> considering that I'm dealing w/ a fairly simple app, and
> despite
> > >> that
> > >> > I
> > >> > > >> like
> > >> > > >> the ideas behind the asset service, I'll probably move off of
> it
> > -
> > >> I
> > >> > do
> > >> > > >> recall seeing some mentions of an alternative binding prefix to
> > >> serve
> > >> > > the
> > >> > > >> assets in question from a CDN ; however, considering that the
> > >> google
> > >> > > >> static
> > >> > > >> file serving infrastructure is probably as good as serving from
> a
> > >> CDN,
> > >> > > >> I'll
> > >> > > >> probably just stick to static files.
> > >> > > >>
> > >> > > >> Anyway, I thought this might be useful to someone else that
> might
> > >> run
> > >> > > into
> > >> > > >> issues with the Asset service and GAE. It would be interesting
> to
> > >> look
> > >> > > at
> > >> > > >> the asset service implementation and see if there is an issue
> to
> > be
> > >> > > filed
> > >> > > >> w/
> > >> > > >> GAE re: accessing resources (classpath and web context).
> > >> > > >>
> > >> > > >> Regards,
> > >> > > >>
> > >> > > >> Alex K
> > >> > > >>
> > >> > > >> On Mon, Apr 12, 2010 at 1:27 PM, akochnev_chub<
> > >> > akoch...@commercehub.com
> > >> > > >> >wrote:
> > >> > > >>
> > >> > > >>
> > >> > > >>
> > >> > > >>> I've been running into some issues w/ the asset service, in
> that
> > >> at
> > >> > > times
> > >> > > >>> it
> > >> > > >>> responds to service requests with 404s. After "warming up" the
> > app
> > >> by
> > >> > > >>> reloading the pages in question a few times, the asset service
> > >> > > eventually
> > >> > > >>> responds w/ the assets. However, this results in a very
> > unreliable
> > >> > > >>> rendering
> > >> > > >>> of the pages  - at times (if the app happens to be "warm"),
> the
> > >> pages
> > >> > > >>> render
> > >> > > >>> just fine; at other times, I have to reload them a few times
> > >> before
> > >> > > >>> getting
> > >> > > >>> to proper rendering. Below  are some more details on the
> issue,
> > >> any
> > >> > > >>> suggestions on how to deal w/ it would be highly appreciated.
> > >> > > >>>
> > >> > > >>>
> > >> > > >>> There is a pretty good chance that this might be an issue w/
> the
> > >> > > >>> underlying
> > >> > > >>> platform (GAE), and the way it chooses to swap the application
> > in
> > >> and
> > >> > > >>> out;
> > >> > > >>> however, if that were the case, I would have expected more of
> > the
> > >> > > >>> requests
> > >> > > >>> to fail instead of the page content rendering fine and then
> the
> > >> > assets
> > >> > > >>> not
> > >> > > >>> returning in time.
> > >> > > >>>
> > >> > > >>> I think the issue is partially aggravated by the fact that I
> > load
> > >> the
> > >> > > >>> main
> > >> > > >>> stylesheet as a context asset (asset:context:/css/foo.css or
> > >> > something
> > >> > > >>> similar), instead of just using the "naked" (e.g. /css/foo.css
> > w/o
> > >> a
> > >> > > >>> context: prefix) path to the css in the layout; as a result,
> all
> > >> of
> > >> > the
> > >> > > >>> "other" css (using yaml for layout) and the images referenced
> by
> > >> the
> > >> > > main
> > >> > > >>> css depend on the asset service (e.g.
> > >> > > >>>
> > >> > > >>>
> > >> > > >>>
> > >> > >
> > >> >
> > >>
> >
> http://zadachite-dev.appspot.com/assets/ctx/91328db67ddf7725/images/layout_v2/footer.jpg
> > >> > > >>> )
> > >> > > >>> instead of just being loaded as static files. I was thinking
> > that
> > >> > > >>> switching
> > >> > > >>> the reference to the main stylesheet to not be a context:
> > >> reference
> > >> > and
> > >> > > >>> marking the web app context resources as static (in the GAE
> web
> > >> > config
> > >> > > >>> file)
> > >> > > >>> might resolve the issue.
> > >> > > >>>
> > >> > > >>> So, here's an example :
> > >> > > >>> 1. go to http://zadachite-dev.appspot.com (this is the "dev"
> > >> version
> > >> > > >>> which
> > >> > > >>> is unlikely to be warm right now)
> > >> > > >>>
> > >> > > >>> 2. Upon the initial loading of the pages, some of the graphics
> > >> (more
> > >> > or
> > >> > > >>> less
> > >> > > >>> randomly) or stylesheets don't return as they get 404s:
> > >> > > >>>
> > >> > > >>> <html><head>
> > >> > > >>> <meta http-equiv="content-type"
> > content="text/html;charset=utf-8">
> > >> > > >>> <title>404 Unable to locate asset
> > >> > > >>> 'classpath:ctx/91328db67ddf7725/yaml/core/base.css' (the file
> > does
> > >> > not
> > >> > > >>> exist).</title>
> > >> > > >>> </head>
> > >> > > >>> <body text=#000000 bgcolor=#ffffff>
> > >> > > >>> <h1>Error: Unable to locate asset
> > >> > > >>> 'classpath:ctx/91328db67ddf7725/yaml/core/base.css' (the file
> > does
> > >> > not
> > >> > > >>> exist).</h1>
> > >> > > >>> </body></html>
> > >> > > >>>
> > >> > > >>>
> > >> > > >>> or for images, it's a straight 404 w/o any further response.
> > >> > > >>>
> > >> > > >>> 3. Browse to some of the other pages of the site - one by one,
> > the
> > >> > > >>> "missing"
> > >> > > >>> assets start showing up one by one and eventually the layout
> > >> renders
> > >> > > >>> correctly. After the app is "warmed up" now, even if you
> refresh
> > >> the
> > >> > > page
> > >> > > >>> including the initially cached assets, they load fine.
> > >> > > >>> --
> > >> > > >>> View this message in context:
> > >> > > >>>
> > >> > > >>>
> > >> > >
> > >> >
> > >>
> >
> http://old.nabble.com/Asset-service-issues-in-GAE-tp28219164p28219164.html
> > >> > > >>> Sent from the Tapestry - User mailing list archive at
> > Nabble.com.
> > >> > > >>>
> > >> > > >>>
> > >> > > >>>
> > >> ---------------------------------------------------------------------
> > >> > > >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> > >> > > >>> For additional commands, e-mail:
> users-h...@tapestry.apache.org
> > >> > > >>>
> > >> > > >>>
> > >> > > >>>
> > >> > > >>>
> > >> > > >>
> > >> > > >>
> > >> > > >
> > >> > > >
> > >> ---------------------------------------------------------------------
> > >> > > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> > >> > > > For additional commands, e-mail: users-h...@tapestry.apache.org
> > >> > > >
> > >> > > >
> > >> > >
> > >> >
> > >> >
> > >> >
> > >> > --
> > >> > Dmitry Gusev
> > >> >
> > >> > AnjLab Team
> > >> > http://anjlab.com
> > >> >
> > >>
> > >
> > >
> > >
> > > --
> > > Dmitry Gusev
> > >
> > > AnjLab Team
> > > http://anjlab.com
> > >
> >
> >
> >
> > --
> > Dmitry Gusev
> >
> > AnjLab Team
> > http://anjlab.com
> >
>



-- 
Dmitry Gusev

AnjLab Team
http://anjlab.com

Reply via email to