Hi Community,
I am trying to deploy a Tapestry 5.2.4 application to a JBoss 5.1 application
server.
During startup of the TapestryFilter an IOException is thrown, which is caused
by an URISyntaxException thrown by the JBoss VFS handlers.
The URI which caused the exception looks like this
vfszip:/D:/Programme/jboss-5.1.0.GA/server/default/deploy/TapestryTestCase-0.0.1-SNAPSHOT.war/WEB-INF/lib/tapestry-core-5.2.4.jar/org/apache/tapestry5/corelib/pages/PK__/
with the last two characters (after the 'PK') being an ASCII ETX(03) and an
ASCII EOT(04). It does not specify any folder included in the war and is
somehow 'added' to the file structure.
I created a small test application to eliminate as many sideeffects as
possible. The deployed application is a single war file, including only the
necessary libraries for tapestry to run and a simple 'Hello World' tapestry
page. This is deployed to a vanilla JBoss 5.1 default server causing the
problem mentioned above.
I traced the problem down to the class 'ClassNameLocatorImpl' in the
org.apache.tapestry5.ioc.internal.services package and the 'scanDirStream'
method.
The java.io.LineNumberReader returns the lines that are used to create the
nonexistent wrong URI mentioned above.
The environment and versions I am using when building the test application and
experiencing this error are:
- Tapestry 5.2.4
- JBoss 5.1.0
- JDK 1.6.0_19
- Windows XP
- Eclipse 3.5.2 with m2e plugin 0.10.2 using the embedded maven
version 3.0-SNAPSHOT
This error only occurs in this particular Tapestry/JBoss combination, i.e.
Tapestry 5.2.4 with JBoss 4.2.3 works fine as well as Tapestry 5.1.5 with JBoss
5.1.0.
At the moment I can only work around this problem by patching the tapestry
source, which I don't want to do, if I can avoid it.
Any help and/or comment on this problem is appreciated, including any field
report of deploying an application in the mentioned setup successfully.
I will send out the test application if needed to reproduce the problem.
For the sake of completeness the stacktrace from the JBoss log:
09:51:05,768 INFO [STDOUT] 09:51:05,768 INFO [RegistryBuilder] Adding module
definition for class org.apache.tapestry5.ioc.services.TapestryIOCModule
09:51:06,456 INFO [STDOUT] 09:51:06,456 INFO [RegistryBuilder] Adding module
definition for class org.apache.tapestry5.services.TapestryModule
09:51:06,518 INFO [STDOUT] 09:51:06,518 INFO [RegistryBuilder] Adding module
definition for class org.apache.tapestry5.internal.services.InternalModule
09:51:06,940 ERROR [1-SNAPSHOT]] Exception starting filter tapestryFilter
java.lang.RuntimeException: java.io.IOException
at
org.apache.tapestry5.ioc.internal.services.ClassNameLocatorImpl.locateClassNames(ClassNameLocatorImpl.java:80)
at
$ClassNameLocator_12da29eb5e0.locateClassNames($ClassNameLocator_12da29eb5e0.java)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl.fillNameToClassNameMap(ComponentClassResolverImpl.java:305)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl.rebuild(ComponentClassResolverImpl.java:294)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl.performRebuild(ComponentClassResolverImpl.java:222)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl.access$100(ComponentClassResolverImpl.java:40)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl$2.run(ComponentClassResolverImpl.java:195)
at
org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier$2.invoke(ConcurrentBarrier.java:200)
at
org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier$2.invoke(ConcurrentBarrier.java:197)
at
org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withWrite(ConcurrentBarrier.java:140)
at
org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withWrite(ConcurrentBarrier.java:206)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl.rebuild(ComponentClassResolverImpl.java:191)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl.locate(ComponentClassResolverImpl.java:536)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl.access$300(ComponentClassResolverImpl.java:40)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl$4.invoke(ComponentClassResolverImpl.java:448)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl$4.invoke(ComponentClassResolverImpl.java:445)
at
org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
at
org.apache.tapestry5.internal.services.ComponentClassResolverImpl.isPageName(ComponentClassResolverImpl.java:444)