Class Application
- java.lang.Object
-
- org.apache.wicket.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 ofWebApplication
you will want to subclassWebSession
.
- Author:
- Jonathan Locke
- See Also:
WebApplication
-
-
Field Summary
Fields Modifier and Type Field Description static String
CONFIGURATION
Configuration constant for the 2 types
-
Constructor Summary
Constructors Constructor Description Application()
Constructor.
-
Method Summary
-
-
-
Field Detail
-
CONFIGURATION
public static final String CONFIGURATION
Configuration constant for the 2 types- See Also:
- Constant Field Values
-
-
Constructor Detail
-
Application
public Application()
Constructor. Useinit()
for any configuration of your application instead of overriding the constructor.
-
-
Method Detail
-
exists
public static boolean exists()
Checks if theApplication
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, eitherRuntimeConfigurationType.DEVELOPMENT
orRuntimeConfigurationType.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
-
getMetaData
public final <T> T getMetaData(MetaDataKey<T> key)
Gets metadata for this application using the given key.- Specified by:
getMetaData
in interfaceIMetadataContext<Object,Application>
- Type Parameters:
T
-- Parameters:
key
- The key for the data- Returns:
- The metadata
- See Also:
MetaDataKey
-
getName
public final String getName()
Gets the name of this application.- Returns:
- The application name.
-
getRequestLogger
public final IRequestLogger getRequestLogger()
Gets theIRequestLogger
.- Returns:
- The RequestLogger
-
getSessionStore
public final ISessionStore getSessionStore()
Gets the facade object for working getting/ storing session instances.- Returns:
- The session facade
-
sessionUnbound
public void sessionUnbound(String sessionId)
Description copied from interface:ISessionStore.UnboundListener
Informs the listener that session with specific id has been unbound.- Specified by:
sessionUnbound
in interfaceISessionStore.UnboundListener
- See Also:
ISessionStore.UnboundListener.sessionUnbound(java.lang.String)
-
logEventTarget
public void logEventTarget(IRequestHandler target)
THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL.- Parameters:
target
-
-
logResponseTarget
public void logResponseTarget(IRequestHandler requestTarget)
THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL.- Parameters:
requestTarget
-
-
newSession
public abstract Session newSession(Request 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, seeMetaDataKey
.- Specified by:
setMetaData
in interfaceIMetadataContext<Object,Application>
- Type Parameters:
T
-- Parameters:
key
- The singleton key for the metadataobject
- 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.
-
getExceptionMapperProvider
public Supplier<IExceptionMapper> getExceptionMapperProvider()
Returns a supplier ofIExceptionMapper
that will be used to handle exceptions which were not handled by anyrequest cycle listener
.- Returns:
- the exception mapper supplier
- See Also:
IRequestCycleListener.onException(RequestCycle, Exception)
-
setExceptionMapperProvider
public void setExceptionMapperProvider(Supplier<IExceptionMapper> exceptionMapperProvider)
-
getSessionStoreProvider
public final Supplier<ISessionStore> getSessionStoreProvider()
- Returns:
- Session state provider
-
setSessionStoreProvider
public final Application setSessionStoreProvider(Supplier<ISessionStore> sessionStoreProvider)
- Parameters:
sessionStoreProvider
-
-
newConverterLocator
protected IConverterLocator newConverterLocator()
Creates and returns a new instance ofIConverterLocator
.- Returns:
- A new
IConverterLocator
instance
-
newRequestLogger
protected IRequestLogger newRequestLogger()
creates a new request logger when requests logging is enabled.- Returns:
- The new request logger
-
getRootRequestMapperAsCompound
public final ICompoundRequestMapper getRootRequestMapperAsCompound()
Converts the root mapper to aICompoundRequestMapper
if necessary and returns the converted instance.- Returns:
- compound instance of the root mapper
-
getRootRequestMapper
public final IRequestMapper getRootRequestMapper()
- Returns:
- The root request mapper
-
setRootRequestMapper
public final Application setRootRequestMapper(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 interfaceIEventSink
-
getHeaderContributorListeners
public final HeaderContributorListenerCollection getHeaderContributorListeners()
- Returns:
- Gets the application's
HeaderContributorListenerCollection
-
getInitializers
public final List<IInitializer> getInitializers()
- Returns:
- collection of initializers
-
getApplicationListeners
public final ApplicationListenerCollection getApplicationListeners()
- Returns:
- collection of application listeners
-
getSessionListeners
public final SessionListenerCollection getSessionListeners()
- Returns:
- collection of session listeners
-
getBehaviorInstantiationListeners
public final BehaviorInstantiationListenerCollection getBehaviorInstantiationListeners()
- Returns:
- collection of behavior instantiation 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
-
getComponentInitializationListeners
public final ComponentInitializationListenerCollection getComponentInitializationListeners()
- Returns:
- Gets the application's ComponentInitializationListeners
-
getComponentOnConfigureListeners
public final ComponentOnConfigureListenerCollection getComponentOnConfigureListeners()
- Returns:
- Gets the application's ComponentOnConfigureListeners
-
getComponentPreOnBeforeRenderListeners
public final ComponentOnBeforeRenderListenerCollection getComponentPreOnBeforeRenderListeners()
- Returns:
- ComponentOnBeforeRenderListenerCollection
-
getComponentPostOnBeforeRenderListeners
public final ComponentOnBeforeRenderListenerCollection getComponentPostOnBeforeRenderListeners()
- Returns:
- ComponentOnBeforeRenderListenerCollection
-
getComponentOnAfterRenderListeners
public final ComponentOnAfterRenderListenerCollection getComponentOnAfterRenderListeners()
- Returns:
- on after render listeners collection
-
getRequestCycleListeners
public RequestCycleListenerCollection getRequestCycleListeners()
- Returns:
- the unmodifiable request list of
IRequestCycleListener
s in this application
-
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 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
-
setPageManagerProvider
public final Application setPageManagerProvider(IPageManagerProvider provider)
Set the provider of anIPageManager
.- Parameters:
provider
-- See Also:
DefaultPageManagerProvider
-
getPageRendererProvider
public final IPageRendererProvider getPageRendererProvider()
- Returns:
- PageRendererProvider
-
setPageRendererProvider
public final Application setPageRendererProvider(IPageRendererProvider pageRendererProvider)
- Parameters:
pageRendererProvider
-
-
newResourceReferenceRegistry
protected ResourceReferenceRegistry newResourceReferenceRegistry()
Override to create customResourceReferenceRegistry
.- Returns:
- new
ResourceReferenceRegistry
instance.
-
getResourceReferenceRegistry
public final ResourceReferenceRegistry getResourceReferenceRegistry()
ReturnsResourceReferenceRegistry
for this application.- Returns:
- ResourceReferenceRegistry
-
newSharedResources
protected SharedResources newSharedResources(ResourceReferenceRegistry registry)
- Parameters:
registry
-- Returns:
- SharedResources
-
getSharedResources
public SharedResources getSharedResources()
- Returns:
- SharedResources
-
newResourceBundles
protected ResourceBundles newResourceBundles(ResourceReferenceRegistry registry)
-
getResourceBundles
public ResourceBundles getResourceBundles()
- Returns:
- The registry for resource bundles
-
newPageFactory
protected IPageFactory newPageFactory()
Override to create customIPageFactory
- Returns:
- new
IPageFactory
instance.
-
getPageFactory
public final IPageFactory getPageFactory()
ReturnsIPageFactory
for this application.- Returns:
- page factory
-
getMapperContext
public final IMapperContext getMapperContext()
- Returns:
- mapper context
-
newMapperContext
protected IMapperContext newMapperContext()
Factory method forIMapperContext
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
-
setRequestCycleProvider
public final Application setRequestCycleProvider(IRequestCycleProvider requestCycleProvider)
- Parameters:
requestCycleProvider
-
-
createRequestCycle
public final RequestCycle createRequestCycle(Request request, Response response)
- Parameters:
request
-response
-- Returns:
- request cycle
-
setHeaderResponseDecorator
@Deprecated public final Application setHeaderResponseDecorator(IHeaderResponseDecorator headerResponseDecorator)
Deprecated.useadd(...)
ongetHeaderResponseDecorators()
. This method removes theResourceAggregator
, which is needed to resolve resource dependencies.Sets anIHeaderResponseDecorator
that you want your application to use to decorate header responses.Calling this method replaces the default decorator, which utilizes a
ResourceAggregator
: The given implementation should make sure, that it too wraps responses in aResourceAggregator
, otherwise no dependencies forHeaderItem
s will be resolved.- Parameters:
headerResponseDecorator
- your custom decorator, must not be null
-
getHeaderResponseDecorators
public HeaderResponseDecoratorCollection getHeaderResponseDecorators()
Returns theHeaderResponseDecoratorCollection
used by this application. On this collection you can add additional decorators, which will be nested in the order added.- Returns:
- The
HeaderResponseDecoratorCollection
used by this application.
-
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 theIHeaderResponseDecorator
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
-
-