Hello, everyone. I agree with Bob that CDI support fits better as an extra. 
However, there is something I believe should be a core part of Click, and that 
is better configuration support. Click applications are typically configured 
with a click.xml file. This file is usually simple and causes no serious 
problems. However, I believe Click would be a more flexible framework if it had 
less dependence on XML. This would allow Click to be configured in other 
languages, including Java. The key to this flexibility is ConfigService. 
However, implementing this interface is no small task. Extending 
XmlConfigService is one way to address this problem, but you're still tied to 
XML. I believe the solution is to create a generic abstract class with 
functionality common to all configurations. This class can be extended by 
implementing methods and overriding others.

To demonstrate my idea, I created a class named AbstractConfigService. This 
class contains all the same logic as XmlConfigService, minus the XML parsing. 
It contains an abstract method named onConfigure() where developers can plug in 
custom logic to configure their applications. It also defines protected methods 
for adding pages, interceptors, and other objects easily. The following is an 
example of how the AbstractConfigService API may be used:

public class TestConfigService extends AbstractConfigService {

    @Override
    protected void onConfigure() throws Exception {
        addPackage("click.tapestryioc.page");
        addPage("test_1.htm", TestPage1.class)
            .setHeader("Pragma", "no-cache")
            .setHeader("Cache-Control", "max-age=3600, must-revalidate");
        addPage("test_2.htm", TestPage2.class);
        addPageInterceptor(TestInterceptor.class, "request")
            .setProperty("property1", "value1")
            .setProperty("property2", "value2");
    }
}

As you can see, this is the same configuration data that would be typically 
defined in a click.xml file. I would like to submit my code for consideration 
in a future release.
                                          

Reply via email to