This is an automated email from the ASF dual-hosted git repository.
thiagohp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
The following commit(s) were added to refs/heads/master by this push:
new 358d14d37 TAP5-2762: symbol for path to the component dependencies file
358d14d37 is described below
commit 358d14d379cf37defcb74f8554404cbf00e35827
Author: Thiago H. de Paula Figueiredo <[email protected]>
AuthorDate: Sat Sep 9 17:29:56 2023 -0300
TAP5-2762: symbol for path to the component dependencies file
---
.../java/org/apache/tapestry5/SymbolConstants.java | 19 +++++
.../tapestry5/corelib/pages/PageCatalog.java | 7 +-
.../services/ComponentDependencyRegistry.java | 2 +-
.../services/ComponentDependencyRegistryImpl.java | 89 +++++++++++++---------
.../services/ComponentInstantiatorSourceImpl.java | 2 +-
.../apache/tapestry5/modules/PageLoadModule.java | 41 +++++++++-
.../apache/tapestry5/modules/TapestryModule.java | 26 -------
.../apache/tapestry5/corelib/pages/PageCatalog.tml | 44 ++++++-----
.../integration/app1/components/Border.java | 11 +++
.../ComponentDependencyRegistryImplTest.java | 2 +-
.../integration/app1/components/Border.tml | 5 ++
11 files changed, 164 insertions(+), 84 deletions(-)
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
b/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
index ca3b542f8..07e4d28de 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
@@ -26,6 +26,7 @@ import org.apache.tapestry5.http.services.CorsHandler;
import org.apache.tapestry5.http.services.CorsHandlerHelper;
import org.apache.tapestry5.http.services.CorsHttpServletRequestFilter;
import org.apache.tapestry5.internal.services.AssetDispatcher;
+import org.apache.tapestry5.internal.services.ComponentDependencyRegistry;
import
org.apache.tapestry5.internal.services.rest.DefaultOpenApiDescriptionGenerator;
import org.apache.tapestry5.modules.NoBootstrapModule;
import org.apache.tapestry5.services.Html5Support;
@@ -791,4 +792,22 @@ public class SymbolConstants
*/
public static final String MULTIPLE_CLASSLOADERS =
"tapestry.multiple-classloaders";
+ /**
+ * <p>
+ * Defines what file should be used to store and read component dependency
information.
+ * It can be either an absolute path or a path relative to the current
folder where
+ * the JVM is running.
+ * </p>
+ * <p>
+ * This symbol is ignored when in production mode.
+ * </p>
+ * <p>
+ * Default value is <code>tapestryComponentDependencies.json</code>
+ * ({@linkplain ComponentDependencyRegistry#FILENAME}).
+ * </p>
+ * @see ComponentDependencyRegistry
+ * @since 5.8.4
+ */
+ public static final String COMPONENT_DEPENDENCY_FILE =
"tapestry.component-dependency-file";
+
}
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
index a8472be8a..974a4a9e4 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PageCatalog.java
@@ -14,6 +14,7 @@
package org.apache.tapestry5.corelib.pages;
+import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -86,6 +87,10 @@ public class PageCatalog
@Symbol(SymbolConstants.MULTIPLE_CLASSLOADERS)
private boolean multipleClassLoaders;
+ @Inject
+ @Symbol(SymbolConstants.COMPONENT_DEPENDENCY_FILE)
+ private String componentDependencyFile;
+
@Inject
private PageSource pageSource;
@@ -357,7 +362,7 @@ public class PageCatalog
alertManager.warn(String.format(
"Component dependency information written to %s.",
- ComponentDependencyRegistry.FILENAME));
+ new File(componentDependencyFile).getAbsolutePath()));
return pagesZone.getBody();
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistry.java
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistry.java
index 1613095c2..ad79630f4 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistry.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistry.java
@@ -58,7 +58,7 @@ public interface ComponentDependencyRegistry {
}
/**
- * Name of the file where the dependency information is stored between
webapp runs.
+ * Default file where the dependency information is stored between webapp
runs.
*/
String FILENAME = "tapestryComponentDependencies.json";
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
index d6d5d99f3..7f794f6ea 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImpl.java
@@ -36,6 +36,7 @@ import java.util.function.Consumer;
import java.util.stream.Collectors;
import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Mixin;
@@ -50,6 +51,7 @@ import
org.apache.tapestry5.internal.parser.StartComponentToken;
import org.apache.tapestry5.internal.parser.TemplateToken;
import org.apache.tapestry5.internal.structure.ComponentPageElement;
import org.apache.tapestry5.ioc.Orderable;
+import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.ioc.services.PerthreadManager;
@@ -66,7 +68,9 @@ import org.apache.tapestry5.services.ComponentClassResolver;
import org.apache.tapestry5.services.pageload.PageClassLoaderContextManager;
import org.apache.tapestry5.services.templates.ComponentTemplateLocator;
import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+@SuppressWarnings("deprecation")
public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegistry
{
@@ -96,7 +100,6 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
final private Map<String, Boolean> isPageCache = new WeakHashMap<>();
- @SuppressWarnings("deprecation")
final private ComponentTemplateLocator componentTemplateLocator;
final private boolean storedDependencyInformationPresent;
@@ -106,7 +109,9 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
final PlasticManager plasticManager,
final ComponentClassResolver componentClassResolver,
final TemplateParser templateParser,
- final ComponentTemplateLocator componentTemplateLocator)
+ final ComponentTemplateLocator componentTemplateLocator,
+ final @Symbol(SymbolConstants.COMPONENT_DEPENDENCY_FILE) String
componentDependencyFile,
+ final @Symbol(SymbolConstants.PRODUCTION_MODE) boolean
productionMode)
{
this.pageClassLoaderContextManager = pageClassLoaderContextManager;
map = new HashMap<>();
@@ -116,36 +121,52 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
this.templateParser = templateParser;
this.componentTemplateLocator = componentTemplateLocator;
- storedDependencies = new File(FILENAME);
- if (storedDependencies.exists())
+ if (!productionMode)
{
- try (FileReader fileReader = new FileReader(storedDependencies);
- BufferedReader reader = new BufferedReader(fileReader))
+
+ Logger logger =
LoggerFactory.getLogger(ComponentDependencyRegistry.class);
+
+ storedDependencies = new File(componentDependencyFile);
+ final boolean fileExists = storedDependencies.exists();
+
+ logger.info("Component dependencies file: {} Found? {}",
+ storedDependencies.getAbsolutePath(), fileExists);
+
+ if (fileExists)
{
- StringBuilder builder = new StringBuilder();
- String line = reader.readLine();
- while (line != null)
+ try (FileReader fileReader = new
FileReader(storedDependencies);
+ BufferedReader reader = new BufferedReader(fileReader))
{
- builder.append(line);
- line = reader.readLine();
- }
- JSONArray jsonArray = new JSONArray(builder.toString());
- for (int i = 0; i < jsonArray.size(); i++)
+ StringBuilder builder = new StringBuilder();
+ String line = reader.readLine();
+ while (line != null)
+ {
+ builder.append(line);
+ line = reader.readLine();
+ }
+ JSONArray jsonArray = new JSONArray(builder.toString());
+ for (int i = 0; i < jsonArray.size(); i++)
+ {
+ final JSONObject jsonObject =
jsonArray.getJSONObject(i);
+ final String className = jsonObject.getString("class");
+ final DependencyType dependencyType =
DependencyType.valueOf(jsonObject.getString("type"));
+ final String dependency =
jsonObject.getString("dependency");
+ add(className, dependency, dependencyType);
+ alreadyProcessed.add(dependency);
+ alreadyProcessed.add(className);
+ }
+ } catch (IOException e)
{
- final JSONObject jsonObject = jsonArray.getJSONObject(i);
- final String className = jsonObject.getString("class");
- final DependencyType dependencyType =
DependencyType.valueOf(jsonObject.getString("type"));
- final String dependency =
jsonObject.getString("dependency");
- add(className, dependency, dependencyType);
- alreadyProcessed.add(dependency);
- alreadyProcessed.add(className);
+ throw new TapestryException("Exception trying to read " +
storedDependencies.getAbsolutePath(), e);
}
- } catch (IOException e)
- {
- throw new TapestryException("Exception trying to read " +
FILENAME, e);
+
}
}
+ else
+ {
+ storedDependencies = null;
+ }
storedDependencyInformationPresent = !map.isEmpty();
@@ -207,7 +228,7 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
}
// Superclass
- Class superclass = component.getSuperclass();
+ Class<?> superclass = component.getSuperclass();
if (isTransformed(superclass))
{
processClass.accept(superclass);
@@ -236,7 +257,6 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
* @param component
* @param processClassName
*/
- @SuppressWarnings("deprecation")
private void registerTemplate(Class<?> component, Consumer<String>
processClassName)
{
// TODO: implement caching of template dependency information, probably
@@ -273,11 +293,6 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
}
}
- private boolean isNotPage(final String className)
- {
- return !isPage(className);
- }
-
private boolean isPage(final String className)
{
Boolean result = isPageCache.get(className);
@@ -342,7 +357,7 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
MixinClasses mixinClasses =
field.getAnnotation(MixinClasses.class);
if (mixinClasses != null)
{
- for (Class dependency : mixinClasses.value())
+ for (Class<?> dependency : mixinClasses.value())
{
add(field.getDeclaringClass(), dependency,
DependencyType.USAGE);
processClass.accept(dependency);
@@ -657,8 +672,13 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
}
catch (IOException e)
{
- throw new TapestryException("Exception trying to read " +
FILENAME, e);
+ throw new TapestryException("Exception trying to write " +
storedDependencies.getAbsolutePath(), e);
}
+
+ Logger logger =
LoggerFactory.getLogger(ComponentDependencyRegistry.class);
+
+ logger.info("Component dependencies written to {}",
+ storedDependencies.getAbsolutePath());
}
}
@@ -683,7 +703,7 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
.collect(Collectors.toSet());
}
- private boolean isTransformed(Class clasz)
+ private boolean isTransformed(Class<?> clasz)
{
return plasticManager.shouldInterceptClassLoading(clasz.getName());
}
@@ -843,6 +863,7 @@ public class ComponentDependencyRegistryImpl implements
ComponentDependencyRegis
return null;
}
+ @SuppressWarnings("rawtypes")
@Override
public Set<Class> getHandledRenderPhases()
{
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
index a0ae6d2ea..1faeecf23 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
@@ -321,7 +321,7 @@ public final class ComponentInstantiatorSourceImpl
implements ComponentInstantia
if (rootPageClassloaderContext == null)
{
- logger.info("Initializing page pool");
+ logger.info("Initializing page pool. Multiple classloaders " +
(!productionMode && multipleClassLoaders ? "enabled" : "disabled") + ".");
pageClassLoaderContextManager.clear();
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
index 8e80d0bd1..5ca2f3715 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/PageLoadModule.java
@@ -22,14 +22,20 @@ import
org.apache.tapestry5.internal.pageload.DefaultComponentRequestSelectorAna
import org.apache.tapestry5.internal.pageload.DefaultComponentResourceLocator;
import org.apache.tapestry5.internal.pageload.PagePreloaderImpl;
import org.apache.tapestry5.internal.services.ComponentDependencyRegistry;
+import org.apache.tapestry5.internal.services.ComponentDependencyRegistryImpl;
+import org.apache.tapestry5.internal.services.ComponentInstantiatorSource;
import org.apache.tapestry5.internal.services.ComponentTemplateSource;
import org.apache.tapestry5.internal.services.ComponentTemplateSourceImpl;
+import
org.apache.tapestry5.internal.services.InternalComponentInvalidationEventHub;
+import org.apache.tapestry5.internal.services.TemplateParser;
+import org.apache.tapestry5.internal.services.assets.ResourceChangeTracker;
import org.apache.tapestry5.ioc.ServiceBinder;
import org.apache.tapestry5.ioc.annotations.Marker;
import org.apache.tapestry5.ioc.annotations.Startup;
import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.ioc.services.ChainBuilder;
-import org.apache.tapestry5.services.ComponentLibraryInfoSource;
+import org.apache.tapestry5.ioc.services.PerthreadManager;
+import org.apache.tapestry5.services.ComponentClassResolver;
import org.apache.tapestry5.services.Core;
import org.apache.tapestry5.services.pageload.ComponentRequestSelectorAnalyzer;
import org.apache.tapestry5.services.pageload.ComponentResourceLocator;
@@ -39,10 +45,12 @@ import
org.apache.tapestry5.services.pageload.PageClassLoaderContextManagerImpl;
import org.apache.tapestry5.services.pageload.PagePreloader;
import org.apache.tapestry5.services.pageload.PreloaderMode;
import org.apache.tapestry5.services.pageload.ReferenceType;
+import org.apache.tapestry5.services.templates.ComponentTemplateLocator;
/**
* @since 5.3
*/
+@SuppressWarnings("deprecation")
@Marker(Core.class)
public class PageLoadModule
{
@@ -53,6 +61,7 @@ public class PageLoadModule
public static void contributeFactoryDefaults(MappedConfiguration<String,
Object> configuration)
{
configuration.add(SymbolConstants.MULTIPLE_CLASSLOADERS, false);
+ configuration.add(SymbolConstants.COMPONENT_DEPENDENCY_FILE,
ComponentDependencyRegistry.FILENAME);
}
public static void bind(ServiceBinder binder)
@@ -109,5 +118,35 @@ public class PageLoadModule
{
configuration.add("Fallback", p -> ReferenceType.SOFT, "after:*");
}
+
+ public static ComponentDependencyRegistry buildComponentDependencyRegistry(
+ InternalComponentInvalidationEventHub
internalComponentInvalidationEventHub,
+ ResourceChangeTracker resourceChangeTracker,
+ ComponentTemplateSource componentTemplateSource,
+ PageClassLoaderContextManager pageClassLoaderContextManager,
+ ComponentInstantiatorSource componentInstantiatorSource,
+ ComponentClassResolver componentClassResolver,
+ TemplateParser templateParser,
+ ComponentTemplateLocator componentTemplateLocator,
+ PerthreadManager perthreadManager,
+ @Symbol(SymbolConstants.COMPONENT_DEPENDENCY_FILE) String
componentDependencyFile,
+ @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode)
+ {
+ ComponentDependencyRegistryImpl componentDependencyRegistry =
+ new ComponentDependencyRegistryImpl(
+ pageClassLoaderContextManager,
+
componentInstantiatorSource.getProxyFactory().getPlasticManager(),
+ componentClassResolver,
+ templateParser,
+ componentTemplateLocator,
+ componentDependencyFile,
+ productionMode);
+
componentDependencyRegistry.listen(internalComponentInvalidationEventHub);
+ componentDependencyRegistry.listen(resourceChangeTracker);
+
componentDependencyRegistry.listen(componentTemplateSource.getInvalidationEventHub());
+ // TODO: remove
+ componentDependencyRegistry.setupThreadCleanup(perthreadManager);
+ return componentDependencyRegistry;
+ }
}
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
index 6dd4039ac..57edc6bd4 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java
@@ -2785,32 +2785,6 @@ public final class TapestryModule
configuration.add(appRootPackage + ".rest.entities");
}
- public static ComponentDependencyRegistry buildComponentDependencyRegistry(
- InternalComponentInvalidationEventHub
internalComponentInvalidationEventHub,
- ResourceChangeTracker resourceChangeTracker,
- ComponentTemplateSource componentTemplateSource,
- PageClassLoaderContextManager pageClassLoaderContextManager,
- ComponentInstantiatorSource componentInstantiatorSource,
- ComponentClassResolver componentClassResolver,
- TemplateParser templateParser,
- ComponentTemplateLocator componentTemplateLocator,
- PerthreadManager perthreadManager)
- {
- ComponentDependencyRegistryImpl componentDependencyRegistry =
- new ComponentDependencyRegistryImpl(
- pageClassLoaderContextManager,
-
componentInstantiatorSource.getProxyFactory().getPlasticManager(),
- componentClassResolver,
- templateParser,
- componentTemplateLocator);
-
componentDependencyRegistry.listen(internalComponentInvalidationEventHub);
- componentDependencyRegistry.listen(resourceChangeTracker);
-
componentDependencyRegistry.listen(componentTemplateSource.getInvalidationEventHub());
- // TODO: remove
- componentDependencyRegistry.setupThreadCleanup(perthreadManager);
- return componentDependencyRegistry;
- }
-
private static final class TapestryCoreComponentLibraryInfoSource
implements
ComponentLibraryInfoSource
{
diff --git
a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PageCatalog.tml
b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PageCatalog.tml
index 0e8242331..bdac0f8b1 100644
---
a/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PageCatalog.tml
+++
b/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/pages/PageCatalog.tml
@@ -43,24 +43,28 @@
</t:actionlink>
</t:if>
<t:actionlink t:id="runGC" zone="pages" class="btn btn-default">Run
the GC</t:actionlink>
- <t:actionlink t:id="storeDependencyInformation" zone="pages"
class="btn btn-warning">Store dependency information</t:actionlink>
- <t:if test="multipleClassLoaders">
- <t:actionlink t:id="preloadPageClassLoaderContexts" class="btn
btn-default">Preload dependency information and page classloader
contexts</t:actionlink>
+ <t:if test="!productionMode">
+ <t:actionlink t:id="storeDependencyInformation" zone="pages"
class="btn btn-warning">Store dependency information</t:actionlink>
+ <t:if test="multipleClassLoaders">
+ <t:actionlink t:id="preloadPageClassLoaderContexts"
class="btn btn-default">Preload dependency information and page classloader
contexts</t:actionlink>
+ </t:if>
</t:if>
</div>
<t:zone t:id="pageStructureZone">
- <div class="panel panel-default vert-offset" t:type="If"
t:test="selectedPage">
- <div class="panel-heading">Component dependency information for
${selectedPage.name} (just direct dependencies)</div>
- <div class="panel-body">
- <ul>
- <li t:type="Loop" t:value="dependency"
t:source="dependencies">
- ${displayLogicalName} (${dependency})
- </li>
- </ul>
- </div>
- </div>
+ <t:if t:test="!productionMode">
+ <div class="panel panel-default vert-offset" t:type="If"
t:test="selectedPage">
+ <div class="panel-heading">Component dependency
information for ${selectedPage.name} (just direct dependencies)</div>
+ <div class="panel-body">
+ <ul>
+ <li t:type="Loop" t:value="dependency"
t:source="dependencies">
+ ${displayLogicalName}
(${dependency})
+ </li>
+ </ul>
+ </div>
+ </div>
+ </t:if>
<div class="panel panel-default vert-offset" t:type="If"
t:test="selectedPage">
<div class="panel-heading">${selectedPage.name}'s component
tree</div>
<div class="panel-body">
@@ -69,12 +73,14 @@
</ul>
</div>
</div>
- <div class="panel panel-default vert-offset" t:type="If"
t:test="selectedPage">
- <div class="panel-heading">${selectedPage.name}'s dependency
tree</div>
- <div class="panel-body">
- <t:graphviz value="graphvizValue"/>
- </div>
- </div>
+ <t:if t:test="!productionMode">
+ <div class="panel panel-default vert-offset" t:type="If"
t:test="selectedPage">
+ <div class="panel-heading">${selectedPage.name}'s
dependency tree</div>
+ <div class="panel-body">
+ <t:graphviz value="graphvizValue"/>
+ </div>
+ </div>
+ </t:if>
</t:zone>
<div class="panel panel-default vert-offset">
diff --git
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
index 78430dd88..b5a6d8e13 100644
---
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
+++
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/components/Border.java
@@ -56,4 +56,15 @@ public class Border
return true;
}
+
+ public String getJvm()
+ {
+ String version = System.getProperty("java.vendor.version");
+ if (version == null)
+ {
+ version = System.getProperty("java.vm.version");
+ }
+ return version + " from " + System.getProperty("java.vendor");
+ }
+
}
diff --git
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
index 5ee5af228..579ac5010 100644
---
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
+++
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentDependencyRegistryImplTest.java
@@ -173,7 +173,7 @@ public class ComponentDependencyRegistryImplTest
componentDependencyRegistry = new ComponentDependencyRegistryImpl(
pageClassLoaderContextManager, plasticManager, resolver,
templateParser,
- componentTemplateLocator);
+ componentTemplateLocator,
ComponentDependencyRegistry.FILENAME, false);
EasyMock.replay(pageClassLoaderContextManager, plasticManager,
resolver);
}
diff --git
a/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/components/Border.tml
b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/components/Border.tml
index 908c91961..93bb9820a 100644
---
a/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/components/Border.tml
+++
b/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/components/Border.tml
@@ -50,6 +50,11 @@
<t:body/>
<hr/>
+
+ <h2>JVM</h2>
+ <p>
+ ${jvm}
+ </p>
<h2>Request</h2>