You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Peter Ertl (Commented) (JIRA)" <ji...@apache.org> on 2012/04/04 16:37:25 UTC

[jira] [Commented] (WICKET-4350) Add more programmatic support for web app construction via servlet 3.0

    [ https://issues.apache.org/jira/browse/WICKET-4350?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13246301#comment-13246301 ] 

Peter Ertl commented on WICKET-4350:
------------------------------------

During my tests with my local 'test.war' file I just found out that there are "subtle" differences in the way application servers are scanning for 'META-INF/services'. Depending on the app server it will look for either

(a) folder 'META-INF/services' inside 'test.jar' which is packaged in 'test.war' at package location 'WEB-INF/lib/test.jar'
(b) folder 'META-INF/services' residing in the root of 'test.war' (not to be confused with the web root in src/main/webapp), not needing a separate test.jar

This is what the servers used in my local setup on OS X 10.7.3 running Java 1.6.0_29 (64 bit) used:
 
jboss 7.1.1:   (a)
tomcat 7.0.26: (a)
jetty 8.1.2:   (b)
glassfish 3:   (b)

Based on my current knowledge scanning for java service initializers in app servers seems unpredictable / broken to me.

For a platform independent startup you probably have to deploy a duplicate 'javax.servlet.ServletContainerInitializer' file supporting variant (a) and (b). I don't know if there exist even more variants.

Consider, if you have the choice, to use 'web.xml' with an <listener> entry and configure your application using ServletContextListener. This will be old-school but should work anywhere.
                
> Add more programmatic support for web app construction via servlet 3.0 
> -----------------------------------------------------------------------
>
>                 Key: WICKET-4350
>                 URL: https://issues.apache.org/jira/browse/WICKET-4350
>             Project: Wicket
>          Issue Type: Improvement
>          Components: wicket
>    Affects Versions: 1.5.4, 6.0.0-beta1
>            Reporter: Peter Ertl
>            Assignee: Peter Ertl
>            Priority: Minor
>             Fix For: 1.5.5, 6.0.0-beta1
>
>         Attachments: Initializer.java, Start.java, javax.servlet.ServletContainerInitializer
>
>
> Since servlet 3.0 web applications can be set up completely in code.
> To support this kind of setup wicket should
> - support the manual assignment of an web application instance to WicketFilter
> - support setting the runtime configuration type in WebApplication programmtically through a setter instead of reading web.xml
> sample code for demonstrating the use case:
> public class AppContextListener implements ServletContextListener
> {
> 	private GuiceContext guiceContext;
> 	@Override
> 	public void contextInitialized(ServletContextEvent sce)
> 	{
> 		// create configuration
> 		final AppConfig configuration = new WebAppConfig();
> 		// setup guice
> 		guiceContext = new GuiceContext(configuration);
> 		// create injector
> 		final Injector injector = guiceContext.createInjector();
> 		// create wicket application
> 		WebApplication application = injector.getInstance(WebApplication.class);
> 		application.setConfigurationType(RuntimeConfigurationType.DEVELOPMENT);
> 		// create wicket filter
> 		WicketFilter filter = new WicketFilter(application);
> 		filter.setFilterPath("");
>     // dynamically add wicket filter
> 		final FilterRegistration.Dynamic wicket = sce.getServletContext().addFilter("wicket", filter);
> 		// add filter mapping for path '/'
> 		wicket.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
> 	}
> 	
>   // ...
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira