Class Application

  • All Implemented Interfaces:
    IEventSink, IMetadataContext<Object,​Application>, ISessionStore.UnboundListener
    Direct Known Subclasses:
    WebApplication

    public abstract class Application
    extends Object
    implements ISessionStore.UnboundListener, IEventSink, IMetadataContext<Object,​Application>
    Base class for all Wicket applications. To create a Wicket application, you generally should not directly subclass this class. Instead, you will want to subclass some subclass of Application, like WebApplication, which is appropriate for the protocol and markup type you are working with.

    Application has the following interesting features / attributes:

    • Name - The Application's name, which is the same as its class name.
    • Home Page - The Application's home Page class. Subclasses must override getHomePage() to provide this property value.
    • Settings - Application settings are partitioned into sets of related settings using interfaces in the org.apache.wicket.settings package. These interfaces are returned by the following methods, which should be used to configure framework settings for your application: getApplicationSettings(), getDebugSettings(), getExceptionSettings(), getMarkupSettings(), getPageSettings(), getRequestCycleSettings(), getSecuritySettings and getSessionSettings(). These settings are configured by default through the constructor or internalInit methods. Default the application is configured for DEVELOPMENT. You can configure this globally to DEPLOYMENT or override specific settings by implementing the init() method.
    • Shared Resources - Resources added to an Application's SharedResources have application-wide scope and can be referenced using a logical scope and a name with the ResourceReference class. ResourceReferences can then be used by multiple components in the same application without additional overhead (beyond the ResourceReference instance held by each referee) and will yield a stable URL, permitting efficient browser caching of the resource (even if the resource is dynamically generated). Resources shared in this manner may also be localized. See ResourceReference for more details.
    • Custom Session Subclasses- In order to install your own Session subclass you must override ApplicationnewSession(Request, Response). For subclasses of WebApplication you will want to subclass WebSession.
    Author:
    Jonathan Locke
    See Also:
    WebApplication
    • Constructor Detail

      • Application

        public Application()
        Constructor. Use init() for any configuration of your application instead of overriding the constructor.
    • Method Detail

      • exists

        public static boolean exists()
        Checks if the Application threadlocal is set in this thread
        Returns:
        true if get() can return the instance of application, false otherwise
      • get

        public static Application get()
        Get Application for current thread.
        Returns:
        The current thread's Application
      • get

        public static Application get​(String applicationKey)
        Gets the Application based on the application key of that application. You typically never have to use this method unless you are working on an integration project.
        Parameters:
        applicationKey - The unique key of the application within a certain context (e.g. a web application)
        Returns:
        The application or null if application has not been found
      • getApplicationKeys

        public static Set<String> getApplicationKeys()
        Gets the keys of the currently registered Wicket applications for this web application. You typically never have to use this method unless you are working on an integration project.
        Returns:
        unmodifiable set with keys that correspond with getApplicationKey(). Never null, but possibly empty
      • configure

        public final void configure()
        Configures application settings to good defaults.
      • getApplicationKey

        public abstract String getApplicationKey()
        Gets the unique key of this application within a given context (like a web application). NOT INTENDED FOR FRAMEWORK CLIENTS.
        Returns:
        The unique key of this application
      • getConfigurationType

        public abstract RuntimeConfigurationType getConfigurationType()
        Gets the configuration mode to use for configuring the app, either RuntimeConfigurationType.DEVELOPMENT or RuntimeConfigurationType.DEPLOYMENT.

        The configuration type. Must currently be either DEVELOPMENT or DEPLOYMENT. Currently, if the configuration type is DEVELOPMENT, resources are polled for changes, component usage is checked, wicket tags are not stripped from output and a detailed exception page is used. If the type is DEPLOYMENT, component usage is not checked, wicket tags are stripped from output and a non-detailed exception page is used to display errors.

        Note that you should not run Wicket in DEVELOPMENT mode on production servers - the various debugging checks and resource polling is inefficient and may leak resources, particularly on webapp redeploy.

        To change the deployment mode, add the following to your web.xml, inside your mapping (or mapping if you're using 1.3.x):

         <init-param>
                     <param-name>configuration</param-name>
                     <param-value>deployment</param-value>
         </init-param>
         

        You can alternatively set this as a <context-param> on the whole context.

        Another option is to set the "wicket.configuration" system property to either "deployment" or "development". The value is not case-sensitive.

        The system property is checked first, allowing you to add a web.xml param for deployment, and a command-line override when you want to run in development mode during development.

        You may also override Application.getConfigurationType() to provide your own custom switch, in which case none of the above logic is used.

        IMPORTANT NOTE

        THIS METHOD IS CALLED OFTEN FROM MANY DIFFERENT POINTS IN CODE, INCLUDING DURING THE RENDER PROCESS, THEREFORE THE IMPLEMENTATION SHOULD BE FAST - PREFERRABLY USING A FAST-TO-RETRIEVE CACHED VALUE
        Returns:
        configuration
        Since:
        1.2.3 (function existed as a property getter), 1.3.0 (abstract, used to configure things)
      • getHomePage

        public abstract Class<? extends Page> getHomePage()
        Application subclasses must specify a home page class by implementing this abstract method.
        Returns:
        Home page class for this application
      • getConverterLocator

        public final IConverterLocator getConverterLocator()
        Returns:
        The converter locator for this application
      • getName

        public final String getName()
        Gets the name of this application.
        Returns:
        The application name.
      • getSessionStore

        public final ISessionStore getSessionStore()
        Gets the facade object for working getting/ storing session instances.
        Returns:
        The session facade
      • logEventTarget

        public void logEventTarget​(org.apache.wicket.request.IRequestHandler target)
        THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL.
        Parameters:
        target -
      • logResponseTarget

        public void logResponseTarget​(org.apache.wicket.request.IRequestHandler requestTarget)
        THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL.
        Parameters:
        requestTarget -
      • newSession

        public abstract Session newSession​(org.apache.wicket.request.Request request,
                                           org.apache.wicket.request.Response response)
        Creates a new session. Override this method if you want to provide a custom session.
        Parameters:
        request - The request that will create this session.
        response - The response to initialize, for example with cookies. This is important to use cases involving unit testing because those use cases might want to be able to sign a user in automatically when the session is created.
        Returns:
        The session
        Since:
        1.3
      • setMetaData

        public final <T> Application setMetaData​(MetaDataKey<T> key,
                                                 T object)
        Sets the metadata for this application using the given key. If the metadata object is not of the correct type for the metadata key, an IllegalArgumentException will be thrown. For information on creating MetaDataKeys, see MetaDataKey.
        Specified by:
        setMetaData in interface IMetadataContext<Object,​Application>
        Type Parameters:
        T -
        Parameters:
        key - The singleton key for the metadata
        object - The metadata object
        Throws:
        IllegalArgumentException
        See Also:
        MetaDataKey
      • onDestroy

        protected void onDestroy()
        Called when wicket servlet is destroyed. Overrides do not have to call super.
      • init

        protected void init()
        Allows for initialization of the application by a subclass. Use this method for any application setup instead of the constructor.
      • internalDestroy

        public void internalDestroy()
        THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL IT.
      • internalInit

        protected void internalInit()
        THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT OVERRIDE OR CALL. Internal initialization.
      • getSessionStoreProvider

        public final Supplier<ISessionStore> getSessionStoreProvider()
        Returns:
        Session state provider
      • setSessionStoreProvider

        public final Application setSessionStoreProvider​(Supplier<ISessionStore> sessionStoreProvider)
        Parameters:
        sessionStoreProvider -
      • newRequestLogger

        protected IRequestLogger newRequestLogger()
        creates a new request logger when requests logging is enabled.
        Returns:
        The new request logger
      • getRootRequestMapperAsCompound

        public final org.apache.wicket.request.mapper.ICompoundRequestMapper getRootRequestMapperAsCompound()
        Converts the root mapper to a ICompoundRequestMapper if necessary and returns the converted instance.
        Returns:
        compound instance of the root mapper
      • getRootRequestMapper

        public final org.apache.wicket.request.IRequestMapper getRootRequestMapper()
        Returns:
        The root request mapper
      • setRootRequestMapper

        public final Application setRootRequestMapper​(org.apache.wicket.request.IRequestMapper rootRequestMapper)
        Sets the root request mapper
        Parameters:
        rootRequestMapper -
      • initApplication

        public final void initApplication()
        Initialize the application
      • validateInit

        protected void validateInit()
        Gives the Application object a chance to validate if it has been properly initialized
      • setName

        public final void setName​(String name)
        Sets application name. This method must be called before any other methods are invoked and can only be called once per application instance.
        Parameters:
        name - unique application name
      • getMimeType

        public String getMimeType​(String fileName)
        Returns the mime type for given filename.
        Parameters:
        fileName -
        Returns:
        mime type
      • onEvent

        public void onEvent​(IEvent<?> event)
        Called when an event is sent to this sink
        Specified by:
        onEvent in interface IEventSink
      • getInitializers

        public final List<IInitializer> getInitializers()
        Returns:
        collection of initializers
      • getSessionListeners

        public final SessionListenerCollection getSessionListeners()
        Returns:
        collection of session listeners
      • getOnComponentTagListeners

        public final OnComponentTagListenerCollection getOnComponentTagListeners()
        Returns:
        collection of application's on-component-tag listeners
      • getComponentInstantiationListeners

        public final ComponentInstantiationListenerCollection getComponentInstantiationListeners()
        Returns:
        Gets the application's ComponentInstantiationListenerCollection
      • getApplicationSettings

        public final ApplicationSettings getApplicationSettings()
        Returns:
        Application's application-wide settings
        Since:
        1.2
      • setApplicationSettings

        public final Application setApplicationSettings​(ApplicationSettings applicationSettings)
        Parameters:
        applicationSettings -
      • getJavaScriptLibrarySettings

        public final JavaScriptLibrarySettings getJavaScriptLibrarySettings()
        Returns:
        Application's JavaScriptLibrary settings
        Since:
        6.0
      • setJavaScriptLibrarySettings

        public final Application setJavaScriptLibrarySettings​(JavaScriptLibrarySettings javaScriptLibrarySettings)
        Parameters:
        javaScriptLibrarySettings -
      • getDebugSettings

        public final DebugSettings getDebugSettings()
        Returns:
        Application's debug related settings
      • setDebugSettings

        public final Application setDebugSettings​(DebugSettings debugSettings)
        Parameters:
        debugSettings -
      • getExceptionSettings

        public final ExceptionSettings getExceptionSettings()
        Returns:
        Application's exception handling settings
      • setExceptionSettings

        public final Application setExceptionSettings​(ExceptionSettings exceptionSettings)
        Parameters:
        exceptionSettings -
      • getFrameworkSettings

        public final FrameworkSettings getFrameworkSettings()
        Returns:
        Wicket framework settings
      • setFrameworkSettings

        public final Application setFrameworkSettings​(FrameworkSettings frameworkSettings)
        Parameters:
        frameworkSettings -
      • getPageSettings

        public final PageSettings getPageSettings()
        Returns:
        Application's page related settings
      • setPageSettings

        public final Application setPageSettings​(PageSettings pageSettings)
        Parameters:
        pageSettings -
      • getRequestCycleSettings

        public final RequestCycleSettings getRequestCycleSettings()
        Returns:
        Application's request cycle related settings
      • setRequestCycleSettings

        public final Application setRequestCycleSettings​(RequestCycleSettings requestCycleSettings)
        Parameters:
        requestCycleSettings -
      • getMarkupSettings

        public MarkupSettings getMarkupSettings()
        Returns:
        Application's markup related settings
      • setMarkupSettings

        public final Application setMarkupSettings​(MarkupSettings markupSettings)
        Parameters:
        markupSettings -
      • getRequestLoggerSettings

        public final RequestLoggerSettings getRequestLoggerSettings()
        Returns:
        Application's request logger related settings
      • setRequestLoggerSettings

        public final Application setRequestLoggerSettings​(RequestLoggerSettings requestLoggerSettings)
        Parameters:
        requestLoggerSettings -
      • getResourceSettings

        public final ResourceSettings getResourceSettings()
        Returns:
        Application's resources related settings
      • setResourceSettings

        public final Application setResourceSettings​(ResourceSettings resourceSettings)
        Parameters:
        resourceSettings -
      • getSecuritySettings

        public final SecuritySettings getSecuritySettings()
        Returns:
        Application's security related settings
      • setSecuritySettings

        public final Application setSecuritySettings​(SecuritySettings securitySettings)
        Parameters:
        securitySettings -
      • getStoreSettings

        public final StoreSettings getStoreSettings()
        Returns:
        Application's stores related settings
      • setStoreSettings

        public final Application setStoreSettings​(StoreSettings storeSettings)
        Parameters:
        storeSettings -
      • checkSettingsAvailable

        protected void checkSettingsAvailable()
      • getPageManagerProvider

        public final IPageManagerProvider getPageManagerProvider()
        Returns:
        PageManagerProvider
      • getPageRendererProvider

        public final IPageRendererProvider getPageRendererProvider()
        Returns:
        PageRendererProvider
      • getSharedResources

        public SharedResources getSharedResources()
        Returns:
        SharedResources
      • getResourceBundles

        public ResourceBundles getResourceBundles()
        Returns:
        The registry for resource bundles
      • getPageFactory

        public final IPageFactory getPageFactory()
        Returns IPageFactory for this application.
        Returns:
        page factory
      • getMapperContext

        public final IMapperContext getMapperContext()
        Returns:
        mapper context
      • newMapperContext

        protected IMapperContext newMapperContext()
        Factory method for IMapperContext implementations. DefaultMapperContext may be a good starting point for custom implementations.
        Returns:
        new instance of mapper context to be used in the application
      • fetchCreateAndSetSession

        public Session fetchCreateAndSetSession​(RequestCycle requestCycle)
        Parameters:
        requestCycle -
        Returns:
        Session
      • getRequestCycleProvider

        public final IRequestCycleProvider getRequestCycleProvider()
        Returns:
        RequestCycleProvider
      • createRequestCycle

        public final RequestCycle createRequestCycle​(org.apache.wicket.request.Request request,
                                                     org.apache.wicket.request.Response response)
        Parameters:
        request -
        response -
        Returns:
        request cycle
      • decorateHeaderResponse

        public final IHeaderResponse decorateHeaderResponse​(IHeaderResponse response)
        INTERNAL METHOD - You shouldn't need to call this. This is called every time Wicket creates an IHeaderResponse. It gives you the ability to incrementally add features to an IHeaderResponse implementation by wrapping it in another implementation. To decorate an IHeaderResponse in your application, set the IHeaderResponseDecorator on the application.
        Parameters:
        response - the response Wicket created
        Returns:
        the response Wicket should use in IHeaderContributor traversal
        See Also:
        IHeaderResponseDecorator
      • usesDevelopmentConfig

        public final boolean usesDevelopmentConfig()
        Returns:
        true, of app is in Development mode
      • usesDeploymentConfig

        public final boolean usesDeploymentConfig()
        Returns:
        true, of app is in Deployment mode