You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by bu...@apache.org on 2015/07/27 01:19:57 UTC

svn commit: r959694 [4/5] - in /websites/production/tapestry/content: ./ cache/

Modified: websites/production/tapestry/content/operation-tracker.html
==============================================================================
--- websites/production/tapestry/content/operation-tracker.html (original)
+++ websites/production/tapestry/content/operation-tracker.html Sun Jul 26 23:19:56 2015
@@ -67,7 +67,46 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><p>Have you ever hit an error in some code and been faced with a giant stack trace, and no clue what that means? &#160;Us too. We wished there was a way for the exception to describe the path to the error not (just) in terms of which methods called which methods, but what&#160;<em>operations</em> triggered what other operations. That's the OperationTracker.</p><p>The operation tracker is another aspect of Tapestry's commitment to feedback.</p><p>The <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/OperationTracker.html">OperationTracker</a> is a resource; it's actually a singleton, and is available for injection into any IoC service (or Tapestry component).</p><p>Using the OperationTracker you may run a Runnable, or invoke an Invokable (returning a typed response). &#160;Associated with the operation is a description string.</p><p>If there are no exceptions, then no problem.</p><p>If there &#1
 60;are exceptions, then you'll see the console output logged at the point of the exception:</p><pre></pre><p>qtp644826761-13 [ERROR] Registry Operations trace:<br clear="none">qtp644826761-13 [ERROR] Registry [ 1] Handling page render request for page DatumEditor<br clear="none">qtp644826761-13 [ERROR] Registry [ 2] Constructing instance of page class org.apache.tapestry5.integration.app1.pages.DatumEditor<br clear="none">qtp644826761-13 [ERROR] Registry [ 3] Assembling root component for page DatumEditor<br clear="none">qtp644826761-13 [ERROR] Registry [ 4] Running component class transformations on org.apache.tapestry5.integration.app1.pages.Datum<br clear="none">qtp644826761-13 [ERROR] RequestExceptionHandler Processing of request failed with uncaught exception: java.lang.RuntimeException: Exception assembling root component of page DatumEditor: Unable to instantiate instance of transformed class org.apache.tapestry5.integration.app1.pages.DatumEditor: java.lang.reflect.Invocatio
 nTargetException<br clear="none">java.lang.RuntimeException: Exception assembling root component of page DatumEditor: Unable to instantiate instance of transformed class org.apache.tapestry5.integration.app1.pages.DatumEditor: java.lang.reflect.InvocationTargetException<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.performAssembleRootComponent(ComponentAssemblerImpl.<a shape="rect" class="external-link" href="http://java:129" >java:129</a>)<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.access$000(ComponentAssemblerImpl.java:37)<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$1.invoke(ComponentAssemblerImpl.java:81)<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$1.invoke(ComponentAssemblerImpl.java:78)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82)<br clear="none">at org.apache.tapestry
 5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72)<br clear="none">at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.<a shape="rect" class="external-link" href="http://java:1258" >java:1258</a>)<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.assembleRootComponent(ComponentAssemblerImpl.java:76)<br clear="none">at org.apache.tapestry5.internal.pageload.PageLoaderImpl$3.invoke(PageLoaderImpl.<a shape="rect" class="external-link" href="http://java:197" >java:197</a>)<br clear="none">at org.apache.tapestry5.internal.pageload.PageLoaderImpl$3.invoke(PageLoaderImpl.<a shape="rect" class="external-link" href="http://java:190" >java:190</a>)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82)<br clear="none">at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72)<br clear="none">at org.apache.tapestr
 y5.ioc.internal.RegistryImpl.invoke(RegistryImpl.<a shape="rect" class="external-link" href="http://java:1258" >java:1258</a>)<br clear="none">at org.apache.tapestry5.internal.pageload.PageLoaderImpl.loadPage(PageLoaderImpl.<a shape="rect" class="external-link" href="http://java:189" >java:189</a>)<br clear="none">at $PageLoader_13a0346ec83c4e52.loadPage(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.PageSourceImpl.getPage(PageSourceImpl.<a shape="rect" class="external-link" href="http://java:104" >java:104</a>)<br clear="none">at $PageSource_13a0346ec83c4e51.getPage(Unknown Source)<br clear="none">at $PageSource_13a0346ec83c4e50.getPage(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:86)<br clear="none">at $RequestPageCache_13a0346ec83c4e4f.get(Unknown Source)<br clear="none">at $RequestPageCache_13a0346ec83c4e4e.get(Unknown Source)<br clear="none">at org.apache.tapestry5.interna
 l.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:56)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$34.handle(TapestryModule.<a shape="rect" class="external-link" href="http://java:1978" >java:1978</a>)<br clear="none">at $PageRenderRequestHandler_13a0346ec83c4f9c.handle(Unknown Source)<br clear="none">at $PageRenderRequestHandler_13a0346ec83c4f97.handle(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48)<br clear="none">at org.apache.tapestry5.internal.services.DeferredResponseRenderer.handlePageRender(DeferredResponseRenderer.java:52)<br clear="none">at $ComponentRequestFilter_13a0346ec83c4f95.handlePageRender(Unknown Source)<br clear="none">at $ComponentRequestHandler_13a0346ec83c4f98.handlePageRender(Unknown Source)<br clear="none">at org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeAc
 tivePageName.java:47)<br clear="none">at $ComponentRequestFilter_13a0346ec83c4f94.handlePageRender(Unknown Source)<br clear="none">at $ComponentRequestHandler_13a0346ec83c4f98.handlePageRender(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.ProductionModeUnknownComponentFilter.handlePageRender(ProductionModeUnknownComponentFilter.java:62)<br clear="none">at $ComponentRequestFilter_13a0346ec83c4f93.handlePageRender(Unknown Source)<br clear="none">at $ComponentRequestHandler_13a0346ec83c4f98.handlePageRender(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.RequestOperationTracker$2.run(RequestOperationTracker.java:73)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:56)<br clear="none">at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:60)<br clear="none">at org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.<a shape="rec
 t" class="external-link" href="http://java:1252" >java:1252</a>)<br clear="none">at org.apache.tapestry5.internal.services.RequestOperationTracker.handlePageRender(RequestOperationTracker.java:66)<br clear="none">at $ComponentRequestFilter_13a0346ec83c4f92.handlePageRender(Unknown Source)<br clear="none">at $ComponentRequestHandler_13a0346ec83c4f98.handlePageRender(Unknown Source)<br clear="none">at $ComponentRequestHandler_13a0346ec83c4f81.handlePageRender(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:52)<br clear="none">at $Dispatcher_13a0346ec83c4f7f.dispatch(Unknown Source)<br clear="none">at $Dispatcher_13a0346ec83c4f80.dispatch(Unknown Source)<br clear="none">at $Dispatcher_13a0346ec83c4f74.dispatch(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$RequestHandlerTerminator.service(TapestryModule.<a shape="rect" class="external-link" href="http://java:304" >java:304<
 /a>)<br clear="none">at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)<br clear="none">at $RequestFilter_13a0346ec83c4f73.service(Unknown Source)<br clear="none">at $RequestHandler_13a0346ec83c4f75.service(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$3.service(TapestryModule.<a shape="rect" class="external-link" href="http://java:854" >java:854</a>)<br clear="none">at $RequestHandler_13a0346ec83c4f75.service(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$2.service(TapestryModule.<a shape="rect" class="external-link" href="http://java:844" >java:844</a>)<br clear="none">at $RequestHandler_13a0346ec83c4f75.service(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:89)<br clear="none">at $RequestHandler_13a0346ec83c4f75.service(Unknown Source)<br clear="none">at org.apache.tapestry5.integration.app1.serv
 ices.AppModule$2.service(AppModule.<a shape="rect" class="external-link" href="http://java:111" >java:111</a>)<br clear="none">at $RequestFilter_13a0346ec83c4f71.service(Unknown Source)<br clear="none">at $RequestHandler_13a0346ec83c4f75.service(Unknown Source)<br clear="none">at $RequestHandler_13a0346ec83c4f6a.service(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.<a shape="rect" class="external-link" href="http://java:255" >java:255</a>)<br clear="none">at org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:59)<br clear="none">at $HttpServletRequestHandler_13a0346ec83c4f6c.service(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)<br clear="none">at $HttpServletRequestFilter_13a0346ec83c4f6d.service(Unknown Source)<br clear="none">at $HttpServletRequestFilter_13a0346ec83c4f68.service(Unknown Sour
 ce)<br clear="none">at $HttpServletRequestHandler_13a0346ec83c4f6c.service(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$1.service(TapestryModule.<a shape="rect" class="external-link" href="http://java:804" >java:804</a>)<br clear="none">at $HttpServletRequestHandler_13a0346ec83c4f6c.service(Unknown Source)<br clear="none">at $HttpServletRequestHandler_13a0346ec83c4f67.service(Unknown Source)<br clear="none">at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.<a shape="rect" class="external-link" href="http://java:166" >java:166</a>)<br clear="none">at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.<a shape="rect" class="external-link" href="http://java:1291" >java:1291</a>)<br clear="none">at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.<a shape="rect" class="external-link" href="http://java:443" >java:443</a>)<br clear="none">at org.eclipse.jetty.server.handler.ScopedHandler.handle(Scoped
 Handler.<a shape="rect" class="external-link" href="http://java:137" >java:137</a>)<br clear="none">at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.<a shape="rect" class="external-link" href="http://java:556" >java:556</a>)<br clear="none">at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.<a shape="rect" class="external-link" href="http://java:227" >java:227</a>)<br clear="none">at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.<a shape="rect" class="external-link" href="http://java:1044" >java:1044</a>)<br clear="none">at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.<a shape="rect" class="external-link" href="http://java:372" >java:372</a>)<br clear="none">at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.<a shape="rect" class="external-link" href="http://java:189" >java:189</a>)<br clear="none">at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.<
 a shape="rect" class="external-link" href="http://java:978" >java:978</a>)<br clear="none">at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.<a shape="rect" class="external-link" href="http://java:135" >java:135</a>)<br clear="none">at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.<a shape="rect" class="external-link" href="http://java:116" >java:116</a>)<br clear="none">at org.eclipse.jetty.server.Server.handle(Server.<a shape="rect" class="external-link" href="http://java:369" >java:369</a>)<br clear="none">at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.<a shape="rect" class="external-link" href="http://java:486" >java:486</a>)<br clear="none">at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.<a shape="rect" class="external-link" href="http://java:933" >java:933</a>)<br clear="none">at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComp
 lete(AbstractHttpConnection.<a shape="rect" class="external-link" href="http://java:995" >java:995</a>)<br clear="none">at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.<a shape="rect" class="external-link" href="http://java:644" >java:644</a>)<br clear="none">at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.<a shape="rect" class="external-link" href="http://java:235" >java:235</a>)<br clear="none">at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)<br clear="none">at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.<a shape="rect" class="external-link" href="http://java:668" >java:668</a>)<br clear="none">at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)<br clear="none">at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.<a shape="rect" class="external-link" href="http://java:608" >java:608</a>)<br clear="none">at org.eclipse.jetty.util.thread
 .QueuedThreadPool$3.run(QueuedThreadPool.<a shape="rect" class="external-link" href="http://java:543" >java:543</a>)<br clear="none">at java.lang.Thread.run(Thread.<a shape="rect" class="external-link" href="http://java:724" >java:724</a>)<br clear="none">Caused by: java.lang.RuntimeException: Unable to instantiate instance of transformed class org.apache.tapestry5.integration.app1.pages.DatumEditor: java.lang.reflect.InvocationTargetException<br clear="none">at org.apache.tapestry5.internal.plastic.ClassInstantiatorImpl.newInstance(ClassInstantiatorImpl.<a shape="rect" class="external-link" href="http://java:113" >java:113</a>)<br clear="none">at org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$2$1.newInstance(ComponentInstantiatorSourceImpl.<a shape="rect" class="external-link" href="http://java:235" >java:235</a>)<br clear="none">at org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.&lt;init&gt;(InternalComponentResourcesImpl.<a shape="re
 ct" class="external-link" href="http://java:163" >java:163</a>)<br clear="none">at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.&lt;init&gt;(ComponentPageElementImpl.<a shape="rect" class="external-link" href="http://java:555" >java:555</a>)<br clear="none">at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.&lt;init&gt;(ComponentPageElementImpl.<a shape="rect" class="external-link" href="http://java:579" >java:579</a>)<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.performAssembleRootComponent(ComponentAssemblerImpl.java:97)<br clear="none">... 94 more<br clear="none">Caused by: java.lang.reflect.InvocationTargetException<br clear="none">at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)<br clear="none">at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)<br clear="none">at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstruc
 torAccessorImpl.java:45)<br clear="none">at java.lang.reflect.Constructor.newInstance(Constructor.<a shape="rect" class="external-link" href="http://java:526" >java:526</a>)<br clear="none">at org.apache.tapestry5.internal.plastic.ClassInstantiatorImpl.newInstance(ClassInstantiatorImpl.<a shape="rect" class="external-link" href="http://java:109" >java:109</a>)<br clear="none">... 99 more<br clear="none">Caused by: org.apache.tapestry5.ioc.internal.OperationException: Field _value of class org.apache.tapestry5.integration.app1.pages.Datum must be instrumented, and may not be public.<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.<a shape="rect" class="external-link" href="http://java:184" >java:184</a>)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:62)<br clear="none">at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:6
 0)<br clear="none">at org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.<a shape="rect" class="external-link" href="http://java:1252" >java:1252</a>)<br clear="none">at org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.transform(ComponentInstantiatorSourceImpl.<a shape="rect" class="external-link" href="http://java:266" >java:266</a>)<br clear="none">at org.apache.tapestry5.internal.plastic.PlasticClassPool.loadAndTransformClass(PlasticClassPool.<a shape="rect" class="external-link" href="http://java:368" >java:368</a>)<br clear="none">at org.apache.tapestry5.internal.plastic.PlasticClassLoader.loadClass(PlasticClassLoader.java:38)<br clear="none">at java.lang.ClassLoader.loadClass(ClassLoader.<a shape="rect" class="external-link" href="http://java:357" >java:357</a>)<br clear="none">at org.apache.tapestry5.integration.app1.pages.DatumEditor.initializeInstance(DatumEditor.java:22)<br clear="none">at org.apache.tapestry5.integration.app1.pages.Datum
 Editor.&lt;init&gt;(DatumEditor.java)<br clear="none">... 104 more<br clear="none">Caused by: java.lang.IllegalArgumentException: Field _value of class org.apache.tapestry5.integration.app1.pages.Datum must be instrumented, and may not be public.<br clear="none">at org.apache.tapestry5.internal.plastic.PlasticFieldImpl.ensureNotPublic(PlasticFieldImpl.<a shape="rect" class="external-link" href="http://java:166" >java:166</a>)<br clear="none">at org.apache.tapestry5.internal.plastic.PlasticFieldImpl.replaceFieldReadAccess(PlasticFieldImpl.<a shape="rect" class="external-link" href="http://java:423" >java:423</a>)<br clear="none">at org.apache.tapestry5.internal.plastic.PlasticFieldImpl.setComputedConduit(PlasticFieldImpl.<a shape="rect" class="external-link" href="http://java:292" >java:292</a>)<br clear="none">at org.apache.tapestry5.internal.transform.UnclaimedFieldWorker.transformField(UnclaimedFieldWorker.java:99)<br clear="none">at org.apache.tapestry5.internal.transform.Unclaim
 edFieldWorker.transform(UnclaimedFieldWorker.java:88)<br clear="none">at $ComponentClassTransformWorker2_13a0346ec83c4e9a.transform(Unknown Source)<br clear="none">at $ComponentClassTransformWorker2_13a0346ec83c4e9c.transform(Unknown Source)<br clear="none">at $ComponentClassTransformWorker2_13a0346ec83c4e7f.transform(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$3.run(ComponentInstantiatorSourceImpl.<a shape="rect" class="external-link" href="http://java:316" >java:316</a>)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:56)<br clear="none">... 112 more</p><p>Notice how the operation trace at the top of the text succinctly explains how execution arrived at the point of failure and why, information that isn't captured in a stack trace.</p><p>This operation trace appears in the Tapestry web applications, as part of the <a shape="rect" href="runtime-exceptions.html">defa
 ult exception report page</a>.</p><p>There are times, especially when tracking down startup failures, where it is useful to see the operations log even without explicit exceptions.</p><p>Enabling&#160;<strong>debug</strong> level logging for the&#160;<strong>org.apache.tapestry5.ioc.Registry</strong> logging category will provide huge volumes of output in the console:</p><pre></pre><p>[DEBUG] Registry [ 1] --&gt; Creating non-proxied instance of service ServiceConfigurationListenerHub<br clear="none">[DEBUG] Registry [ 2] --&gt; Creating plan to instantiate org.apache.tapestry5.ioc.services.ServiceConfigurationListenerHub via public org.apache.tapestry5.ioc.services.ServiceConfigurationListenerHub(java.util.List)<br clear="none">[DEBUG] Registry [ 3] --&gt; Determining injection value for parameter #1 (java.util.List)<br clear="none">[DEBUG] Registry [ 4] --&gt; Collecting ordered configuration for service ServiceConfigurationListenerHub<br clear="none">[DEBUG] Registry [ 5] --&gt; 
 Invoking org.apache.tapestry5.ioc.FredModule.configureServiceConfigurationListener(OrderedConfiguration, CatchAllServiceConfigurationListener) (at FredModule.<a shape="rect" class="external-link" href="http://java:141" >java:141</a>)<br clear="none">[DEBUG] Registry [ 6] --&gt; Determining injection value for parameter #1 (org.apache.tapestry5.ioc.OrderedConfiguration)<br clear="none">[DEBUG] Registry [ 6] &lt;-- Determining injection value for parameter #1 (org.apache.tapestry5.ioc.OrderedConfiguration) [0.17 ms]<br clear="none">[DEBUG] Registry [ 6] --&gt; Determining injection value for parameter #2 (org.apache.tapestry5.ioc.CatchAllServiceConfigurationListener)<br clear="none">[DEBUG] Registry [ 7] --&gt; Creating proxy for service MasterObjectProvider<br clear="none">[DEBUG] Registry [ 7] &lt;-- Creating proxy for service MasterObjectProvider [2.82 ms]<br clear="none">[DEBUG] Registry [ 7] --&gt; Realizing service MasterObjectProvider<br clear="none">[DEBUG] Registry [ 8] --&gt
 ; Instantiating service MasterObjectProvider implementation via org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(List, OperationTracker) (at MasterObjectProviderImpl.java:33) via org.apache.tapestry5.ioc.modules.TapestryIOCModule.bind(ServiceBinder) (at TapestryIOCModule.java:50)<br clear="none">[DEBUG] Registry [ 9] --&gt; Creating plan to instantiate org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl via public org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(java.util.List,org.apache.tapestry5.ioc.OperationTracker)<br clear="none">[DEBUG] Registry [ 10] --&gt; Determining injection value for parameter #1 (java.util.List)<br clear="none">[DEBUG] Registry [ 11] --&gt; Collecting ordered configuration for service MasterObjectProvider<br clear="none">[DEBUG] Registry [ 12] --&gt; Invoking org.apache.tapestry5.ioc.modules.TapestryIOCModule.setupObjectProviders(OrderedConfiguration, ServiceOverride) (at TapestryIOCModule.<a shape="
 rect" class="external-link" href="http://java:136" >java:136</a>)<br clear="none">[DEBUG] Registry [ 13] --&gt; Determining injection value for parameter #1 (org.apache.tapestry5.ioc.OrderedConfiguration)<br clear="none">[DEBUG] Registry [ 13] &lt;-- Determining injection value for parameter #1 (org.apache.tapestry5.ioc.OrderedConfiguration) [0.17 ms]<br clear="none">[DEBUG] Registry [ 13] --&gt; Determining injection value for parameter #2 (org.apache.tapestry5.ioc.services.ServiceOverride)<br clear="none">[DEBUG] Registry [ 14] --&gt; Creating proxy for service ServiceOverride<br clear="none">[DEBUG] Registry [ 14] &lt;-- Creating proxy for service ServiceOverride [2.15 ms]<br clear="none">[DEBUG] Registry [ 13] &lt;-- Determining injection value for parameter #2 (org.apache.tapestry5.ioc.services.ServiceOverride) [2.62 ms]<br clear="none">[DEBUG] Registry [ 13] --&gt; Creating proxy for service UpdateListenerHub<br clear="none">[DEBUG] Registry [ 13] &lt;-- Creating proxy for ser
 vice UpdateListenerHub [2.28 ms]</p><p>...</p><p>The output identifies operation depth (the number in square brackets), whether the operation is starting&#160;(&#8211;&gt;) or finishing&#160;(&lt;&#8211;), and even the execution time of the operation.</p></div>
+<div id="ConfluenceContent"><p>Have you ever hit an error in some code and been faced with a giant stack trace, and no clue what that means? &#160;Us too. We wished there was a way for the exception to describe the path to the error not (just) in terms of which methods called which methods, but what&#160;<em>operations</em> triggered what other operations. That's the OperationTracker.</p><p>The operation tracker is another aspect of Tapestry's commitment to feedback.</p><div class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="error-page-recipe.html">Error Page Recipe</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="specific-errors-faq.html">Specific Errors FAQ</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="overriding-exception-reporting.html">Overriding Exception Reporting</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><p>The <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/OperationTracker.html">OperationTracker</a> is a resource; it's actually a singleton, and is available for injection into any IoC service (or Tapestry component).</p><p>Using the OperationTracker you may run a Runnable, or invoke an Invokable (returning a typed response). &#160;Associated with the operation is a description string.</p><p>If there are no exceptions, then no problem.</p><p>If there &#160;are exceptions, then you'll see the console output logged at the point of the exception:</p><pre></pre><p>qtp644826761-13 [ERROR] Registry Operations trace:<br clear="none">qtp644826761-13 [ERROR] Registry [ 1] Handling page render request for page DatumEditor<br clear="none">qtp644826761-13 [ERROR] Registry [ 2] Constructing instance of page class org.apache.tapestry5.integration.app1.pages.DatumEditor<br clear="none">qtp644826761-13 [ERROR] Registry [ 3] Assem
 bling root component for page DatumEditor<br clear="none">qtp644826761-13 [ERROR] Registry [ 4] Running component class transformations on org.apache.tapestry5.integration.app1.pages.Datum<br clear="none">qtp644826761-13 [ERROR] RequestExceptionHandler Processing of request failed with uncaught exception: java.lang.RuntimeException: Exception assembling root component of page DatumEditor: Unable to instantiate instance of transformed class org.apache.tapestry5.integration.app1.pages.DatumEditor: java.lang.reflect.InvocationTargetException<br clear="none">java.lang.RuntimeException: Exception assembling root component of page DatumEditor: Unable to instantiate instance of transformed class org.apache.tapestry5.integration.app1.pages.DatumEditor: java.lang.reflect.InvocationTargetException<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.performAssembleRootComponent(ComponentAssemblerImpl.<a shape="rect" class="external-link" href="http://java:129" >jav
 a:129</a>)<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.access$000(ComponentAssemblerImpl.java:37)<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$1.invoke(ComponentAssemblerImpl.java:81)<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$1.invoke(ComponentAssemblerImpl.java:78)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82)<br clear="none">at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72)<br clear="none">at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.<a shape="rect" class="external-link" href="http://java:1258" >java:1258</a>)<br clear="none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.assembleRootComponent(ComponentAssemblerImpl.java:76)<br clear="none">at org.apache.tapestry5.internal.pageload.PageLoaderImpl$3.invoke(PageL
 oaderImpl.<a shape="rect" class="external-link" href="http://java:197" >java:197</a>)<br clear="none">at org.apache.tapestry5.internal.pageload.PageLoaderImpl$3.invoke(PageLoaderImpl.<a shape="rect" class="external-link" href="http://java:190" >java:190</a>)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82)<br clear="none">at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72)<br clear="none">at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.<a shape="rect" class="external-link" href="http://java:1258" >java:1258</a>)<br clear="none">at org.apache.tapestry5.internal.pageload.PageLoaderImpl.loadPage(PageLoaderImpl.<a shape="rect" class="external-link" href="http://java:189" >java:189</a>)<br clear="none">at $PageLoader_13a0346ec83c4e52.loadPage(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.PageSourceImpl.getPage(PageSourceImpl.
 <a shape="rect" class="external-link" href="http://java:104" >java:104</a>)<br clear="none">at $PageSource_13a0346ec83c4e51.getPage(Unknown Source)<br clear="none">at $PageSource_13a0346ec83c4e50.getPage(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:86)<br clear="none">at $RequestPageCache_13a0346ec83c4e4f.get(Unknown Source)<br clear="none">at $RequestPageCache_13a0346ec83c4e4e.get(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:56)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$34.handle(TapestryModule.<a shape="rect" class="external-link" href="http://java:1978" >java:1978</a>)<br clear="none">at $PageRenderRequestHandler_13a0346ec83c4f9c.handle(Unknown Source)<br clear="none">at $PageRenderRequestHandler_13a0346ec83c4f97.handle(Unknown Source)<br clear="none">at org.apache.tapestry5.internal
 .services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48)<br clear="none">at org.apache.tapestry5.internal.services.DeferredResponseRenderer.handlePageRender(DeferredResponseRenderer.java:52)<br clear="none">at $ComponentRequestFilter_13a0346ec83c4f95.handlePageRender(Unknown Source)<br clear="none">at $ComponentRequestHandler_13a0346ec83c4f98.handlePageRender(Unknown Source)<br clear="none">at org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeActivePageName.java:47)<br clear="none">at $ComponentRequestFilter_13a0346ec83c4f94.handlePageRender(Unknown Source)<br clear="none">at $ComponentRequestHandler_13a0346ec83c4f98.handlePageRender(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.ProductionModeUnknownComponentFilter.handlePageRender(ProductionModeUnknownComponentFilter.java:62)<br clear="none">at $ComponentRequestFilter_13a0346ec83c4f93.handlePageRender(Unknown Source)<br clear=
 "none">at $ComponentRequestHandler_13a0346ec83c4f98.handlePageRender(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.RequestOperationTracker$2.run(RequestOperationTracker.java:73)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:56)<br clear="none">at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:60)<br clear="none">at org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.<a shape="rect" class="external-link" href="http://java:1252" >java:1252</a>)<br clear="none">at org.apache.tapestry5.internal.services.RequestOperationTracker.handlePageRender(RequestOperationTracker.java:66)<br clear="none">at $ComponentRequestFilter_13a0346ec83c4f92.handlePageRender(Unknown Source)<br clear="none">at $ComponentRequestHandler_13a0346ec83c4f98.handlePageRender(Unknown Source)<br clear="none">at $ComponentRequestHandler_13a0346ec83c4f81.handlePageRender(Unknown
  Source)<br clear="none">at org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:52)<br clear="none">at $Dispatcher_13a0346ec83c4f7f.dispatch(Unknown Source)<br clear="none">at $Dispatcher_13a0346ec83c4f80.dispatch(Unknown Source)<br clear="none">at $Dispatcher_13a0346ec83c4f74.dispatch(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$RequestHandlerTerminator.service(TapestryModule.<a shape="rect" class="external-link" href="http://java:304" >java:304</a>)<br clear="none">at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)<br clear="none">at $RequestFilter_13a0346ec83c4f73.service(Unknown Source)<br clear="none">at $RequestHandler_13a0346ec83c4f75.service(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$3.service(TapestryModule.<a shape="rect" class="external-link" href="http://java:854" >java:854</a>)<br clear="none">at $RequestHandler_1
 3a0346ec83c4f75.service(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$2.service(TapestryModule.<a shape="rect" class="external-link" href="http://java:844" >java:844</a>)<br clear="none">at $RequestHandler_13a0346ec83c4f75.service(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:89)<br clear="none">at $RequestHandler_13a0346ec83c4f75.service(Unknown Source)<br clear="none">at org.apache.tapestry5.integration.app1.services.AppModule$2.service(AppModule.<a shape="rect" class="external-link" href="http://java:111" >java:111</a>)<br clear="none">at $RequestFilter_13a0346ec83c4f71.service(Unknown Source)<br clear="none">at $RequestHandler_13a0346ec83c4f75.service(Unknown Source)<br clear="none">at $RequestHandler_13a0346ec83c4f6a.service(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.<a shape=
 "rect" class="external-link" href="http://java:255" >java:255</a>)<br clear="none">at org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:59)<br clear="none">at $HttpServletRequestHandler_13a0346ec83c4f6c.service(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)<br clear="none">at $HttpServletRequestFilter_13a0346ec83c4f6d.service(Unknown Source)<br clear="none">at $HttpServletRequestFilter_13a0346ec83c4f68.service(Unknown Source)<br clear="none">at $HttpServletRequestHandler_13a0346ec83c4f6c.service(Unknown Source)<br clear="none">at org.apache.tapestry5.modules.TapestryModule$1.service(TapestryModule.<a shape="rect" class="external-link" href="http://java:804" >java:804</a>)<br clear="none">at $HttpServletRequestHandler_13a0346ec83c4f6c.service(Unknown Source)<br clear="none">at $HttpServletRequestHandler_13a0346ec83c4f67.service(Unknown Source)<br clear="none">at org.apache.tapestry5.
 TapestryFilter.doFilter(TapestryFilter.<a shape="rect" class="external-link" href="http://java:166" >java:166</a>)<br clear="none">at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.<a shape="rect" class="external-link" href="http://java:1291" >java:1291</a>)<br clear="none">at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.<a shape="rect" class="external-link" href="http://java:443" >java:443</a>)<br clear="none">at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.<a shape="rect" class="external-link" href="http://java:137" >java:137</a>)<br clear="none">at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.<a shape="rect" class="external-link" href="http://java:556" >java:556</a>)<br clear="none">at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.<a shape="rect" class="external-link" href="http://java:227" >java:227</a>)<br clear="none">at org.eclipse.jetty.server.handler.Conte
 xtHandler.doHandle(ContextHandler.<a shape="rect" class="external-link" href="http://java:1044" >java:1044</a>)<br clear="none">at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.<a shape="rect" class="external-link" href="http://java:372" >java:372</a>)<br clear="none">at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.<a shape="rect" class="external-link" href="http://java:189" >java:189</a>)<br clear="none">at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.<a shape="rect" class="external-link" href="http://java:978" >java:978</a>)<br clear="none">at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.<a shape="rect" class="external-link" href="http://java:135" >java:135</a>)<br clear="none">at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.<a shape="rect" class="external-link" href="http://java:116" >java:116</a>)<br clear="none">at org.eclipse.jetty.server.Server.handle(Server.<
 a shape="rect" class="external-link" href="http://java:369" >java:369</a>)<br clear="none">at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.<a shape="rect" class="external-link" href="http://java:486" >java:486</a>)<br clear="none">at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.<a shape="rect" class="external-link" href="http://java:933" >java:933</a>)<br clear="none">at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.<a shape="rect" class="external-link" href="http://java:995" >java:995</a>)<br clear="none">at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.<a shape="rect" class="external-link" href="http://java:644" >java:644</a>)<br clear="none">at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.<a shape="rect" class="external-link" href="http://java:235" >java:235</a>)<br clear="none">at org.eclipse.jetty.server.AsyncHttpConnect
 ion.handle(AsyncHttpConnection.java:82)<br clear="none">at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.<a shape="rect" class="external-link" href="http://java:668" >java:668</a>)<br clear="none">at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)<br clear="none">at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.<a shape="rect" class="external-link" href="http://java:608" >java:608</a>)<br clear="none">at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.<a shape="rect" class="external-link" href="http://java:543" >java:543</a>)<br clear="none">at java.lang.Thread.run(Thread.<a shape="rect" class="external-link" href="http://java:724" >java:724</a>)<br clear="none">Caused by: java.lang.RuntimeException: Unable to instantiate instance of transformed class org.apache.tapestry5.integration.app1.pages.DatumEditor: java.lang.reflect.InvocationTargetException<br clear="none">at or
 g.apache.tapestry5.internal.plastic.ClassInstantiatorImpl.newInstance(ClassInstantiatorImpl.<a shape="rect" class="external-link" href="http://java:113" >java:113</a>)<br clear="none">at org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$2$1.newInstance(ComponentInstantiatorSourceImpl.<a shape="rect" class="external-link" href="http://java:235" >java:235</a>)<br clear="none">at org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.&lt;init&gt;(InternalComponentResourcesImpl.<a shape="rect" class="external-link" href="http://java:163" >java:163</a>)<br clear="none">at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.&lt;init&gt;(ComponentPageElementImpl.<a shape="rect" class="external-link" href="http://java:555" >java:555</a>)<br clear="none">at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.&lt;init&gt;(ComponentPageElementImpl.<a shape="rect" class="external-link" href="http://java:579" >java:579</a>)<br clear=
 "none">at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.performAssembleRootComponent(ComponentAssemblerImpl.java:97)<br clear="none">... 94 more<br clear="none">Caused by: java.lang.reflect.InvocationTargetException<br clear="none">at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)<br clear="none">at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)<br clear="none">at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)<br clear="none">at java.lang.reflect.Constructor.newInstance(Constructor.<a shape="rect" class="external-link" href="http://java:526" >java:526</a>)<br clear="none">at org.apache.tapestry5.internal.plastic.ClassInstantiatorImpl.newInstance(ClassInstantiatorImpl.<a shape="rect" class="external-link" href="http://java:109" >java:109</a>)<br clear="none">... 99 more<br clear="none">Caused by: org.apache.tapestry5.ioc.internal.OperationExceptio
 n: Field _value of class org.apache.tapestry5.integration.app1.pages.Datum must be instrumented, and may not be public.<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.<a shape="rect" class="external-link" href="http://java:184" >java:184</a>)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:62)<br clear="none">at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:60)<br clear="none">at org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.<a shape="rect" class="external-link" href="http://java:1252" >java:1252</a>)<br clear="none">at org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.transform(ComponentInstantiatorSourceImpl.<a shape="rect" class="external-link" href="http://java:266" >java:266</a>)<br clear="none">at org.apache.tapestry5.internal.plastic.PlasticClassPool.loadAndTransformClass(P
 lasticClassPool.<a shape="rect" class="external-link" href="http://java:368" >java:368</a>)<br clear="none">at org.apache.tapestry5.internal.plastic.PlasticClassLoader.loadClass(PlasticClassLoader.java:38)<br clear="none">at java.lang.ClassLoader.loadClass(ClassLoader.<a shape="rect" class="external-link" href="http://java:357" >java:357</a>)<br clear="none">at org.apache.tapestry5.integration.app1.pages.DatumEditor.initializeInstance(DatumEditor.java:22)<br clear="none">at org.apache.tapestry5.integration.app1.pages.DatumEditor.&lt;init&gt;(DatumEditor.java)<br clear="none">... 104 more<br clear="none">Caused by: java.lang.IllegalArgumentException: Field _value of class org.apache.tapestry5.integration.app1.pages.Datum must be instrumented, and may not be public.<br clear="none">at org.apache.tapestry5.internal.plastic.PlasticFieldImpl.ensureNotPublic(PlasticFieldImpl.<a shape="rect" class="external-link" href="http://java:166" >java:166</a>)<br clear="none">at org.apache.tapestry5
 .internal.plastic.PlasticFieldImpl.replaceFieldReadAccess(PlasticFieldImpl.<a shape="rect" class="external-link" href="http://java:423" >java:423</a>)<br clear="none">at org.apache.tapestry5.internal.plastic.PlasticFieldImpl.setComputedConduit(PlasticFieldImpl.<a shape="rect" class="external-link" href="http://java:292" >java:292</a>)<br clear="none">at org.apache.tapestry5.internal.transform.UnclaimedFieldWorker.transformField(UnclaimedFieldWorker.java:99)<br clear="none">at org.apache.tapestry5.internal.transform.UnclaimedFieldWorker.transform(UnclaimedFieldWorker.java:88)<br clear="none">at $ComponentClassTransformWorker2_13a0346ec83c4e9a.transform(Unknown Source)<br clear="none">at $ComponentClassTransformWorker2_13a0346ec83c4e9c.transform(Unknown Source)<br clear="none">at $ComponentClassTransformWorker2_13a0346ec83c4e7f.transform(Unknown Source)<br clear="none">at org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$3.run(ComponentInstantiatorSourceImpl.<a sh
 ape="rect" class="external-link" href="http://java:316" >java:316</a>)<br clear="none">at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:56)<br clear="none">... 112 more</p><p>Notice how the operation trace at the top of the text succinctly explains how execution arrived at the point of failure and why, information that isn't captured in a stack trace.</p><p>This operation trace appears in the Tapestry web applications, as part of the <a shape="rect" href="runtime-exceptions.html">default exception report page</a>.</p><p>There are times, especially when tracking down startup failures, where it is useful to see the operations log even without explicit exceptions.</p><p>Enabling&#160;<strong>debug</strong> level logging for the&#160;<strong>org.apache.tapestry5.ioc.Registry</strong> logging category will provide huge volumes of output in the console:</p><pre></pre><p>[DEBUG] Registry [ 1] --&gt; Creating non-proxied instance of service ServiceConf
 igurationListenerHub<br clear="none">[DEBUG] Registry [ 2] --&gt; Creating plan to instantiate org.apache.tapestry5.ioc.services.ServiceConfigurationListenerHub via public org.apache.tapestry5.ioc.services.ServiceConfigurationListenerHub(java.util.List)<br clear="none">[DEBUG] Registry [ 3] --&gt; Determining injection value for parameter #1 (java.util.List)<br clear="none">[DEBUG] Registry [ 4] --&gt; Collecting ordered configuration for service ServiceConfigurationListenerHub<br clear="none">[DEBUG] Registry [ 5] --&gt; Invoking org.apache.tapestry5.ioc.FredModule.configureServiceConfigurationListener(OrderedConfiguration, CatchAllServiceConfigurationListener) (at FredModule.<a shape="rect" class="external-link" href="http://java:141" >java:141</a>)<br clear="none">[DEBUG] Registry [ 6] --&gt; Determining injection value for parameter #1 (org.apache.tapestry5.ioc.OrderedConfiguration)<br clear="none">[DEBUG] Registry [ 6] &lt;-- Determining injection value for parameter #1 (org.ap
 ache.tapestry5.ioc.OrderedConfiguration) [0.17 ms]<br clear="none">[DEBUG] Registry [ 6] --&gt; Determining injection value for parameter #2 (org.apache.tapestry5.ioc.CatchAllServiceConfigurationListener)<br clear="none">[DEBUG] Registry [ 7] --&gt; Creating proxy for service MasterObjectProvider<br clear="none">[DEBUG] Registry [ 7] &lt;-- Creating proxy for service MasterObjectProvider [2.82 ms]<br clear="none">[DEBUG] Registry [ 7] --&gt; Realizing service MasterObjectProvider<br clear="none">[DEBUG] Registry [ 8] --&gt; Instantiating service MasterObjectProvider implementation via org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(List, OperationTracker) (at MasterObjectProviderImpl.java:33) via org.apache.tapestry5.ioc.modules.TapestryIOCModule.bind(ServiceBinder) (at TapestryIOCModule.java:50)<br clear="none">[DEBUG] Registry [ 9] --&gt; Creating plan to instantiate org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl via public org.apache.tapes
 try5.ioc.internal.services.MasterObjectProviderImpl(java.util.List,org.apache.tapestry5.ioc.OperationTracker)<br clear="none">[DEBUG] Registry [ 10] --&gt; Determining injection value for parameter #1 (java.util.List)<br clear="none">[DEBUG] Registry [ 11] --&gt; Collecting ordered configuration for service MasterObjectProvider<br clear="none">[DEBUG] Registry [ 12] --&gt; Invoking org.apache.tapestry5.ioc.modules.TapestryIOCModule.setupObjectProviders(OrderedConfiguration, ServiceOverride) (at TapestryIOCModule.<a shape="rect" class="external-link" href="http://java:136" >java:136</a>)<br clear="none">[DEBUG] Registry [ 13] --&gt; Determining injection value for parameter #1 (org.apache.tapestry5.ioc.OrderedConfiguration)<br clear="none">[DEBUG] Registry [ 13] &lt;-- Determining injection value for parameter #1 (org.apache.tapestry5.ioc.OrderedConfiguration) [0.17 ms]<br clear="none">[DEBUG] Registry [ 13] --&gt; Determining injection value for parameter #2 (org.apache.tapestry5.io
 c.services.ServiceOverride)<br clear="none">[DEBUG] Registry [ 14] --&gt; Creating proxy for service ServiceOverride<br clear="none">[DEBUG] Registry [ 14] &lt;-- Creating proxy for service ServiceOverride [2.15 ms]<br clear="none">[DEBUG] Registry [ 13] &lt;-- Determining injection value for parameter #2 (org.apache.tapestry5.ioc.services.ServiceOverride) [2.62 ms]<br clear="none">[DEBUG] Registry [ 13] --&gt; Creating proxy for service UpdateListenerHub<br clear="none">[DEBUG] Registry [ 13] &lt;-- Creating proxy for service UpdateListenerHub [2.28 ms]</p><p>...</p><p>The output identifies operation depth (the number in square brackets), whether the operation is starting&#160;(&#8211;&gt;) or finishing&#160;(&lt;&#8211;), and even the execution time of the operation.</p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/overriding-exception-reporting.html
==============================================================================
--- websites/production/tapestry/content/overriding-exception-reporting.html (original)
+++ websites/production/tapestry/content/overriding-exception-reporting.html Sun Jul 26 23:19:56 2015
@@ -67,8 +67,46 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><h1 id="OverridingExceptionReporting-OverridingExceptionReporting">Overriding Exception Reporting</h1><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><p>One of Tapestry's best features is its comprehensive exception reporting. The level of detail is impressive and useful.</p><p>Of course, one of the first questions anyone asks is "How do I turn it off?" This exception reporting is very helpful for developers but its easy to see it as terrifying for potential users. Not that you'd have have runtime exceptions in production, of course, but even so ...</p><h2 id="OverridingExceptionReporting-Version1:ReplacingtheExceptionReportPage">Version 1: Replacing the Exception Report Page</h2><p>Let's start with a page that fires an exception from an event handler method.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>ActionFail.tml</b></div><div class="codeContent 
 panelContent pdl">
+<div id="ConfluenceContent"><p>One of Tapestry's best features is its comprehensive exception reporting. The level of detail is impressive and useful.</p><div class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="error-page-recipe.html">Error Page Recipe</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="specific-errors-faq.html">Specific Errors FAQ</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="overriding-exception-reporting.html">Overriding Exception Reporting</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><p>Of course, one of the first questions anyone asks is "How do I turn it off?" This exception reporting is very helpful for developers but its easy to see it as terrifying for potential users. Not that you'd have have runtime exceptions in production, of course, but even so ...</p><h2 id="OverridingExceptionReporting-Version1:ReplacingtheExceptionReportPage">Version 1: Replacing the Exception Report Page</h2><p>Let's start with a page that fires an exception from an event handler method.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>ActionFail.tml</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;"> &lt;html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd" t:type="layout" title="Action Fail"&gt;
         &lt;p&gt;
             &lt;t:actionlink t:id="fail" class="btn btn-large btn-warning"&gt;Click for Exception&lt;/t:actionlink&gt;

Modified: websites/production/tapestry/content/performance-and-clustering.html
==============================================================================
--- websites/production/tapestry/content/performance-and-clustering.html (original)
+++ websites/production/tapestry/content/performance-and-clustering.html Sun Jul 26 23:19:56 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
-  <script type="text/javascript">
-  SyntaxHighlighter.defaults['toolbar'] = false;
-  SyntaxHighlighter.all();
-  </script>
 
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
 
@@ -67,46 +57,46 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div> 
+<div id="ConfluenceContent"><p>Tapestry has a great <strong>performance</strong> story to tell. It's designed to take advantage of the speed of the modern JVM: no reflection, built to support a high level of concurrency without contention, and clean, lightweight code paths. In addition, there is built-in integrated GZIP content compression, far-future expires headers on static resources, JavaScript aggregation and minification, and an intentionally lightweight use of the HTTPSession. The result is a blistering fast framework. See <a shape="rect" class="external-link" href="http://tapestry.apache.org/2011/06/13/tapestrys-performance-tested.html">Tapestry's Performance Tested</a> for some objective numbers.</p><div class="aui-label" style="float:right" title="Related Articles">
 
-<h1 id="PerformanceandClustering-PerformanceandClustering">Performance and Clustering</h1>
 
-<p>Tapestry has a great performance story to tell. It's designed to take advantage of the speed of the modern JVM: no reflection, built to support a high level of concurrency without contention, and clean, lightweight code paths. In addition, there is built-in integrated GZIP content compression, far-future expires headers on static resources, JavaScript aggregation and minification, and an intentionally lightweight use of the HTTPSession. The result is a blistering fast framework. See <a shape="rect" class="external-link" href="http://tapestry.apache.org/2011/06/13/tapestrys-performance-tested.html">Tapestry's Performance Tested</a> for some objective numbers.</p>
 
-<h2 id="PerformanceandClustering-PerformanceTips">Performance Tips</h2>
 
-<p>But even with all of Tapestry's built-in speediness, to really get top performance you'll need to be sure you're not hamstringing Tapestry. As a start, use the following checklist:</p>
 
-<ul><li>Ensure (be absolutely sure) that <a shape="rect" href="configuration.html">Production Mode</a> is turned on in production.</li><li>Minimize the use of the HTTPSession (see below), especially if you're using clustering.</li><li>Set <a shape="rect" href="configuration.html">tapestry.clustered-sessions</a> to "false" if you aren't using clustering.</li><li>Organize your JavaScript files into <a shape="rect" href="legacy-javascript.html">JavaScriptStacks</a>.</li><li>Ensure that your static resources (images, CSS, JavaScript) are being cached by the browser.
-	<ul><li>Use "asset:" or "context:" <a shape="rect" href="component-parameters.html">binding prefixes</a> for all links to static resources (images, CSS, JavaScript).</li><li>Make sure that your firewall, proxy server, load balancer, front-end web servers, and app servers all allow caching of static resources.</li><li>Ensure "cache-control" and "vary" HTTP headers are set correctly for your static resources.</li><li>Use a client-based tool (like Firebug) to examine the requests that your browser makes as you navigate through the site. You should <em>not</em> see repeated requests for static resources.</li></ul>
-	</li><li>Consider using a <a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Content_delivery_network" >Content Delivery Network</a> for static parts of your site.</li></ul>
 
 
-<p>After all of the above issues are addressed, if you still have performance problems, they probably aren't related to Tapestry.</p>
 
-<h2 id="PerformanceandClustering-ClusteringversusStickySessions">Clustering versus Sticky Sessions</h2>
+<h3>Related Articles</h3>
 
-<p>For web applications, <strong>clustering</strong> is a load-balancing technique in which multiple application servers are set up to behave as one big server. Generally this requires replicating HttpSession data across the servers, to ensure that a user's web interactions will continue without interruption regardless of which server handles the next request. Session replication achieves very high reliability, but it incurs an extra performance cost (due to the serializing and deserializing of session data and the extra network traffic required).</p>
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
-<p>In contrast, <strong>Sticky Sessions</strong> (also called <em>session persistence</em> or <em>sticky persistence</em>) is a load balancing technique in which each session is assigned to a particular server for the duration of the session. This approach doesn't require copying HTTPSession data between servers, so it's very scalable. But if a server goes down, all of its sessions are lost.</p>
+        <div class="details">
+                        <a shape="rect" href="performance-and-clustering.html">Performance and Clustering</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
-<p>In general, the sticky sessions approach is the way to go when possible (that is, when performance is more important than session survival).  It represents a much more efficient use of resources ... you are scaling <em>out</em> not <em>up</em>, which is always cheaper. It also means that you don't have to be as careful about what goes into the HTTPSession.</p>
+        <div class="details">
+                        <a shape="rect" href="session-storage.html">Session Storage</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
-<p><em>For details on setting up clustering and sticky sessions, see the documentation of whatever load balancer you are using.</em></p>
-
-<h2 id="PerformanceandClustering-Clustering">Clustering</h2>
-
-<p>Tapestry is designed to be "a good citizen" of an application server that supports clustering.  It is careful about what it writes into the HttpSession.  The framework understands that the server that receives a request may not be the same one that rendered the page initially; this knowledge affects many code paths, and it guides the approach Tapestry takes to caching page and component properties.</p>
-
-<p>Your part is to properly manage the objects put into the HttpSession (via @SessionAttribute, @SessionState or @Persist; see <a shape="rect" href="session-storage.html">Session Storage</a>):</p>
-
-<ul><li>Don't store anything in the session that you don't have to. Principally this means minimizing the use of @Persist (see <a shape="rect" href="page-navigation.html">Page Activation</a> and <a shape="rect" href="using-select-with-a-list.html">Using Select with a List</a>), storing only IDs in the session rather than whole entities.</li><li>Where possible, persist only objects that are immutable (i.e., String, or a primitive or wrapper type).</li><li>Only put <em>serializable</em> objects into the session.</li><li>Make use of the @ImmutableSessionPersistedObject annotation and OptimizedSessionPersistedObject interface (both described below).</li></ul>
-
-
-<p>Again, Tapestry is a good citizen, but from the application server's point of view, it's just another servlet application.  The heavy lifting here is application server specific.</p>
-
-<h2 id="PerformanceandClustering-ClusteringIssues">Clustering Issues</h2>
+        <div class="details">
+                        <a shape="rect" href="persistent-page-data.html">Persistent Page Data</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><h2 id="PerformanceandClustering-PerformanceTips">Performance Tips</h2><p>But even with all of Tapestry's built-in speediness, to really get top performance you'll need to be sure you're not hamstringing Tapestry. As a start, use the following checklist:</p><ul><li>Ensure (be absolutely sure) that <a shape="rect" href="configuration.html">Production Mode</a> is turned on in production.</li><li>Minimize the use of the HTTPSession (see below), especially if you're using clustering.</li><li>Set <a shape="rect" href="configuration.html">tapestry.clustered-sessions</a> to "false" if you aren't using clustering.</li><li>Organize your JavaScript files into <a shape="rect" href="legacy-javascript.html">JavaScriptStacks</a>.</li><li>Ensure that your static resources (images, CSS, JavaScript) are being cached by the browser.<ul><li>Use "asset:" or "context:" <a shape="rect" href="component-parameters.html">binding prefixes</a> for all links to static resources (images, CSS, JavaScript).
 </li><li>Make sure that your firewall, proxy server, load balancer, front-end web servers, and app servers all allow caching of static resources.</li><li>Ensure "cache-control" and "vary" HTTP headers are set correctly for your static resources.</li><li>Use a client-based tool (like Firebug) to examine the requests that your browser makes as you navigate through the site. You should <em>not</em> see repeated requests for static resources.</li></ul></li><li>Consider using a <a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Content_delivery_network" >Content Delivery Network</a> for static parts of your site.</li></ul><p>After all of the above issues are addressed, if you still have performance problems, they probably aren't related to Tapestry.</p><h2 id="PerformanceandClustering-ClusteringversusStickySessions">Clustering versus Sticky Sessions</h2><p>For web applications, <strong>clustering</strong> is a load-balancing technique in which multiple application s
 ervers are set up to behave as one big server. Generally this requires replicating HttpSession data across the servers, to ensure that a user's web interactions will continue without interruption regardless of which server handles the next request. Session replication achieves very high reliability, but it incurs an extra performance cost (due to the serializing and deserializing of session data and the extra network traffic required).</p><p>In contrast, <strong>Sticky Sessions</strong> (also called <em>session persistence</em> or <em>sticky persistence</em>) is a load balancing technique in which each session is assigned to a particular server for the duration of the session. This approach doesn't require copying HTTPSession data between servers, so it's very scalable. But if a server goes down, all of its sessions are lost.</p><p>In general, the sticky sessions approach is the way to go when possible (that is, when performance is more important than session survival). It represent
 s a much more efficient use of resources ... you are scaling <em>out</em> not <em>up</em>, which is always cheaper. It also means that you don't have to be as careful about what goes into the HTTPSession.</p><p><em>For details on setting up clustering and sticky sessions, see the documentation of whatever load balancer you are using.</em></p><h2 id="PerformanceandClustering-Clustering">Clustering</h2><p>Tapestry is designed to be "a good citizen" of an application server that supports clustering. It is careful about what it writes into the HttpSession. The framework understands that the server that receives a request may not be the same one that rendered the page initially; this knowledge affects many code paths, and it guides the approach Tapestry takes to caching page and component properties.</p><p>Your part is to properly manage the objects put into the HttpSession (via @SessionAttribute, @SessionState or @Persist; see <a shape="rect" href="session-storage.html">Session Storage<
 /a>):</p><ul><li>Don't store anything in the session that you don't have to. Principally this means minimizing the use of @Persist (see <a shape="rect" href="page-navigation.html">Page Activation</a> and <a shape="rect" href="using-select-with-a-list.html">Using Select With a List</a>), storing only IDs in the session rather than whole entities.</li><li>Where possible, persist only objects that are immutable (i.e., String, or a primitive or wrapper type).</li><li>Only put <em>serializable</em> objects into the session.</li><li>Make use of the @ImmutableSessionPersistedObject annotation and OptimizedSessionPersistedObject interface (both described below).</li></ul><p>Again, Tapestry is a good citizen, but from the application server's point of view, it's just another servlet application. The heavy lifting here is application server specific.</p><p></p><h2 id="PerformanceandClustering-ClusteringIssues">Clustering Issues</h2>
 
 <p>The Servlet API was designed with the intention that there would be only a modest amount of server-side state, and that the stored values would be individual numbers and strings, and thus, immutable.</p>
 

Modified: websites/production/tapestry/content/release-process.html
==============================================================================
--- websites/production/tapestry/content/release-process.html (original)
+++ websites/production/tapestry/content/release-process.html Sun Jul 26 23:19:56 2015
@@ -31,8 +31,6 @@
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -67,8 +65,73 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><h2 id="ReleaseProcess-Prerequisites">Prerequisites</h2><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><p>Before creating a release, ensure that:</p><ul><li>You have setup your own public OpenGPG key signature for signing the distribution</li><li>You can login to <a shape="rect" class="external-link" href="https://repository.apache.org/index.html#stagingRepositories">Nexus</a></li><li>You have a Git workspace for&#160;<a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf/tapestry-5.git">https://git-wip-us.apache.org/repos/asf/tapestry-5.git</a></li><li>You have a Subversion workspace for&#160;<a shape="rect" class="external-link" href="https://dist.apache.org/repos/dist/dev/tapestry">https://dist.apache.org/repos/dist/dev/tapestry</a>&#160;(dev archives workspace)</li><li>You have a Subversion workspace for&#160;<a shape="rect" class="external-link" href="https://
 dist.apache.org/repos/dist/release/tapestry">https://dist.apache.org/repos/dist/release/tapestry</a>&#160;(release archives workspace)</li><li>You have a Subversion workspace for&#160;<a shape="rect" class="external-link" href="https://svn.apache.org/repos/infra/websites/production/tapestry/content">https://svn.apache.org/repos/infra/websites/production/tapestry/content</a>&#160;(site content workspace)</li></ul><h2 id="ReleaseProcess-GITandDeploymentCredentials">GIT and Deployment Credentials</h2><p>To successfully create a release, you will need to update your Gradle settings with the credentials for your git user and the deployment user. These credentials are stored in the Gradle configuration file <code>~/.gradle/gradle.properties</code>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div id="ConfluenceContent"><h2 id="ReleaseProcess-Prerequisites">Prerequisites</h2><div class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="building-tapestry-from-source.html">Building Tapestry from Source</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="version-numbers.html">Version Numbers</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="developer-bible.html">Developer Bible</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="release-process.html">Release Process</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="developer-information.html">Developer Information</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="confluence-site-setup.html">Confluence Site Setup</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><p>Before creating a release, ensure that:</p><ul><li>You have setup your own public OpenGPG key signature for signing the distribution</li><li>You can login to <a shape="rect" class="external-link" href="https://repository.apache.org/index.html#stagingRepositories">Nexus</a></li><li>You have a Git workspace for&#160;<a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf/tapestry-5.git">https://git-wip-us.apache.org/repos/asf/tapestry-5.git</a></li><li>You have a Subversion workspace for&#160;<a shape="rect" class="external-link" href="https://dist.apache.org/repos/dist/dev/tapestry">https://dist.apache.org/repos/dist/dev/tapestry</a>&#160;(dev archives workspace)</li><li>You have a Subversion workspace for&#160;<a shape="rect" class="external-link" href="https://dist.apache.org/repos/dist/release/tapestry">https://dist.apache.org/repos/dist/release/tapestry</a>&#160;(release archives workspace)</li><li>You have a Subversion workspace for&#160;<a s
 hape="rect" class="external-link" href="https://svn.apache.org/repos/infra/websites/production/tapestry/content">https://svn.apache.org/repos/infra/websites/production/tapestry/content</a>&#160;(site content workspace)</li></ul><h2 id="ReleaseProcess-GITandDeploymentCredentials">GIT and Deployment Credentials</h2><p>To successfully create a release, you will need to update your Gradle settings with the credentials for your git user and the deployment user. These credentials are stored in the Gradle configuration file <code>~/.gradle/gradle.properties</code>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">apacheDeployUserName=hlship
 apacheDeployPassword=...
 

Modified: websites/production/tapestry/content/security-faq.html
==============================================================================
--- websites/production/tapestry/content/security-faq.html (original)
+++ websites/production/tapestry/content/security-faq.html Sun Jul 26 23:19:56 2015
@@ -67,15 +67,53 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><h2 id="SecurityFAQ-SecurityFAQ">Security FAQ</h2><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><h3 id="SecurityFAQ-Thebuilt-inDashboardpagearevisibleinmyproductionapplicationandIdon'twantthemtobe,whatcanIdo?">The built-in Dashboard page are visible in my production application and I don't want them to be, what can I do?</h3><p>First off all, don't panic: the <a shape="rect" href="development-dashboard.html">Developer Dashboard</a> page is marked with the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/WhitelistAccessOnly.html">WhitelistAccessOnly</a> annotation, which makes it invisible to clients that are not on the whitelist. Try accessing the page from a different workstation and you may find that the pages are not visible after all.</p><p>Sometimes, in production, a firewall or proxy may make it look like the 
 client web browser originates from localhost; in that situation, you may want to disable the logic that puts localhost onto the whitelist. This determination is made by the contributions to the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/security/ClientWhitelist.html">ClientWhitelist</a> service. Tapestry makes a contribution with id "LocalhostOnly", which one of your modules can override:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div id="ConfluenceContent"><h2 id="SecurityFAQ-SecurityFAQ">Security FAQ</h2><p>&#160;</p><div class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="security-faq.html">Security FAQ</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="https.html">HTTPS</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="security.html">Security</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><h3 id="SecurityFAQ-Thebuilt-inDashboardpagearevisibleinmyproductionapplicationandIdon'twantthemtobe,whatcanIdo?">The built-in Dashboard page are visible in my production application and I don't want them to be, what can I do?</h3><p>First off all, don't panic: the <a shape="rect" href="development-dashboard.html">Developer Dashboard</a> page is marked with the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/WhitelistAccessOnly.html">WhitelistAccessOnly</a> annotation, which makes it invisible to clients that are not on the whitelist. Try accessing the page from a different workstation and you may find that the pages are not visible after all.</p><p>Sometimes, in production, a firewall or proxy may make it look like the client web browser originates from localhost; in that situation, you may want to disable the logic that puts localhost onto the whitelist. This determination is made by the contributions t
 o the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/security/ClientWhitelist.html">ClientWhitelist</a> service. Tapestry makes a contribution with id "LocalhostOnly", which one of your modules can override:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  @Contribute(ClientWhitelist.class)
   public static void turnOffLocalhostInProduction(OrderedConfiguration&lt;WhitelistAnalyzer&gt; configuration, 
                                                  @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode) {
     if (productionMode) { configuration.override("LocalhostOnly", null); }
   } 
 </pre>
-</div></div></div>
+</div></div><p></p></div>
 </div>
 
 <div class="clearer"></div>