Why do I get java.lang.LinkageError when I invoke public methods of my page classes?
In Tapestry, there are always two versions of page (or component) classes. The first version is the version loaded by standard class loader: the simple POJO version that you wrote. The second version is much more complicated; it’s the transformed version of your code, with lots of extra hooks and changes to allow the class to operate inside Tapestry. This includes implementing new interfaces and methods, adding new constructors, and changing access to existing fields and methods. Although these two classes have the same fully qualified class name, they are distinct classes because they are loaded by different class loaders.