super.init( oServletConfig );
// first setup a logger
_oLog = LogFactory.getLog( HttpDispatcher.class );
Config oConfig;
// load the configuration for the dispatcher
try
{
oConfig
= ConfigLoaderInitializer
.getConfigLoader( oServletConfig ).getConfig();
//System.out.println( "config: \n" + oConfig );
}
catch ( ClassNotFoundException e )
{ throw new ServletException( "init-error: config-loader-initializer", e ); }
catch ( InvocationTargetException e )
{ throw new ServletException( "init-error: config-loader-initializer", e ); }
catch ( IllegalAccessException e )
{ throw new ServletException( "init-error: config-loader-initializer", e ); }
catch ( InstantiationException e )
{ throw new ServletException( "init-error: config-loader-initializer", e ); }
catch ( ConstructorNotFoundException e )
{ throw new ServletException( "init-error: config-loader-initializer", e ); }
catch ( ParameterProviderException e )
{ throw new ServletException( "init-error: config-loader-initializer", e ); }
catch ( ConfigLoaderException e )
{ throw new ServletException( "init-error: config-loader", e ); }
// setup up our classloader
ClassLoader oClassLoader;
try
{
oClassLoader
= ClassLoaderInitializer
.getClassLoader( oConfig.getJavaClassPath(), getClass().getClassLoader() );
}
catch ( ClassNotFoundException e )
{ throw new ServletException( "init-error: class-loader-initializer", e ); }
// we setup the model factory and pool managers early since we now support inject models
// into the initializers for the templating engine, controller resolver, view resolver and
// redirect resolver
ModelFactory oModelFactory = new ModelFactory( oClassLoader,
oServletConfig,
oConfig.getFileUpload() );
ModelPool oModelPool;
try
{
oModelPool = new ModelPool( oConfig.getModelDefs(), oModelFactory, oServletConfig.getServletContext() );
}
catch ( MethodNotFoundException e )
{ throw new ServletException( "init-error: model-pool", e ); }
catch ( InvocationTargetException e )
{ throw new ServletException( "init-error: model-pool", e ); }
catch ( ClassNotFoundException e )
{ throw new ServletException( "init-error: model-pool", e ); }
catch ( ConstructorNotFoundException e )
{ throw new ServletException( "init-error: model-pool", e ); }
catch ( ParameterProviderException e )
{ throw new ServletException( "init-error: model-pool", e ); }
catch ( IllegalAccessException e )
{ throw new ServletException( "init-error: model-pool", e ); }
catch ( InstantiationException e )
{ throw new ServletException( "init-error: model-pool", e ); }
// now set the pool for the model factory to use in model-to-model injection
oModelFactory.setModelPool( oModelPool );
// we instantiate the templating engine early since we now support injecting the
// TemplatingEngine instance into models
TemplatingEngine oTemplatingEngine;
try
{
oTemplatingEngine
= TemplatingEngineInitializer
.getTemplatingEngine( oConfig.getTemplating(),
oModelPool,
oClassLoader,
oServletConfig );
}
catch ( IOException e )
{ throw new ServletException( "init-error: templating-engine-initializer", e ); }
catch ( ClassNotFoundException e )
{ throw new ServletException( "init-error: templating-engine-initializer", e ); }
catch ( InvocationTargetException e )
{ throw new ServletException( "init-error: templating-engine-initializer", e ); }
catch ( IllegalAccessException e )
{ throw new ServletException( "init-error: templating-engine-initializer", e ); }
catch ( InstantiationException e )
{ throw new ServletException( "init-error: templating-engine-initializer", e ); }
catch ( ConstructorNotFoundException e )
{ throw new ServletException( "init-error: templating-engine-initializer", e ); }
catch ( ParameterProviderException e )
{ throw new ServletException( "init-error: templating-engine-initializer", e ); }
// after the templating engine is setup is we set the templating engine in the model factory,
// to make it available to models or any of the other classes that can request it
oModelFactory.setTemplatingEngine( oTemplatingEngine );
// pre-initialize any app scope models that requested it
Log oLog = LogFactory.getLog( ModelPool.class );
for ( Iterator oIter = oConfig.getModelDefs().getModelDefList().iterator(); oIter.hasNext(); )
{
Config.ModelDefs.ModelDef oModelDef = ( Config.ModelDefs.ModelDef ) oIter.next();
if ( oModelDef.isApplicationScope() && oModelDef.isInitOnStartUp() )
{
oLog.info( "model-pool: initializing model: " + oModelDef.getModelClassName() );
try
{
oModelPool.initAppModel( oModelDef.getModelClassName() );
}
catch ( MethodNotFoundException e )
{ throw new ServletException( "init-error: model-init-on-startup", e ); }
catch ( InvocationTargetException e )
{ throw new ServletException( "init-error: model-init-on-startup", e ); }
catch ( ClassNotFoundException e )
{ throw new ServletException( "init-error: model-init-on-startup", e ); }
catch ( ConstructorNotFoundException e )
{ throw new ServletException( "init-error: model-init-on-startup", e ); }
catch ( ParameterProviderException e )
{ throw new ServletException( "init-error: model-init-on-startup", e ); }
catch ( IllegalAccessException e )
{ throw new ServletException( "init-error: model-init-on-startup", e ); }
catch ( InstantiationException e )
{ throw new ServletException( "init-error: model-init-on-startup", e ); }
}
}
// setup the interceptor chain
try
{
RequestInterceptor[] oRequestInterceptorArray;
oRequestInterceptorArray
= RequestInterceptorInitializer
.getRequestInterceptor( oConfig.getRequestInterceptors(),
oModelPool,
oClassLoader,
oServletConfig );
_oRequestInterceptorExecutor
= new RequestInterceptorExecutor( oRequestInterceptorArray,
new RequestInterceptorParameterProviderFactory( oModelPool,
oConfig.getFileUpload(),
oTemplatingEngine,
oClassLoader ) );
}
catch ( ClassNotFoundException e )
{ throw new ServletException( "init-error: request-interceptor-initializer", e ); }
catch ( InvocationTargetException e )
{ throw new ServletException( "init-error: request-interceptor-initializer", e ); }
catch ( IllegalAccessException e )
{ throw new ServletException( "init-error: request-interceptor-initializer", e ); }
catch ( InstantiationException e )
{ throw new ServletException( "init-error: request-interceptor-initializer", e ); }
catch ( ConstructorNotFoundException e )
{ throw new ServletException( "init-error: request-interceptor-initializer", e ); }
catch ( ParameterProviderException e )
{ throw new ServletException( "init-error: request-interceptor-initializer", e ); }
// setup a resolver that maps a request to a controller
try
{
ControllerResolver oControllerResolver;
oControllerResolver
= ControllerResolverInitializer
.getControllerResolver( oConfig.getControllerResolver(),
oConfig.getControllerMapping(),
oModelPool,
oClassLoader,
oServletConfig );
_oControllerResolverExecutor
= new ControllerResolverExecutor( oControllerResolver,
new ControllerResolverParameterProviderFactory( oModelPool,
oConfig.getFileUpload(),
oClassLoader ) );
}
catch ( ClassNotFoundException e )
{ throw new ServletException( "init-error: controller-resolver-initializer", e ); }
catch ( InvocationTargetException e )
{ throw new ServletException( "init-error: controller-resolver-initializer", e ); }
catch ( IllegalAccessException e )
{ throw new ServletException( "init-error: controller-resolver-initializer", e ); }
catch ( InstantiationException e )
{ throw new ServletException( "init-error: controller-resolver-initializer", e ); }
catch ( ConstructorNotFoundException e )
{ throw new ServletException( "init-error: controller-resolver-initializer", e ); }
catch ( ParameterProviderException e )
{ throw new ServletException( "init-error: controller-resolver-initializer", e ); }
catch ( IOException e )
{ throw new ServletException( "init-error: controller-resolver-initializer", e ); }
catch ( MethodNotFoundException e )
{ throw new ServletException( "init-error: controller-resolver-initializer", e ); }
// setup a resolver that maps a request to a view
try
{
ViewResolver oViewResolver;
oViewResolver
= ViewResolverInitializer
.getViewResolver( oConfig.getViewResolver(),
oConfig.getViewMapping(),
oModelPool,
oClassLoader,
oServletConfig );
_oViewResolverExecutor
= new ViewResolverExecutor( oViewResolver,
new ViewResolverParameterProviderFactory( oModelPool,
oConfig.getFileUpload(),
oClassLoader ) );
}
catch ( ClassNotFoundException e )
{ throw new ServletException( "init-error: view-resolver-initializer", e ); }
catch ( InvocationTargetException e )
{ throw new ServletException( "init-error: view-resolver-initializer", e ); }
catch ( IllegalAccessException e )
{ throw new ServletException( "init-error: view-resolver-initializer", e ); }
catch ( InstantiationException e )
{ throw new ServletException( "init-error: view-resolver-initializer", e ); }
catch ( ConstructorNotFoundException e )
{ throw new ServletException( "init-error: view-resolver-initializer", e ); }
catch ( ParameterProviderException e )
{ throw new ServletException( "init-error: view-resolver-initializer", e ); }
catch ( IOException e )
{ throw new ServletException( "init-error: view-resolver-initializer", e ); }
catch ( MethodNotFoundException e )
{ throw new ServletException( "init-error: view-resolver-initializer", e ); }
// setup a resolver that maps a redirect to a URL
try
{
RedirectResolver oRedirectResolver;
oRedirectResolver
= RedirectResolverInitializer
.getRedirectResolver( oConfig.getRedirectResolver(),
oConfig.getRedirectMapping(),
oModelPool,
oClassLoader,
oServletConfig );
_oRedirectResolverExecutor = new RedirectResolverExecutor( oRedirectResolver,
new RedirectResolverParameterProviderFactory( oModelPool,
oConfig.getFileUpload(),
oClassLoader ) );
}
catch ( ClassNotFoundException e )
{ throw new ServletException( "init-error: redirect-resolver-initializer", e ); }
catch ( InvocationTargetException e )
{ throw new ServletException( "init-error: redirect-resolver-initializer", e ); }
catch ( IllegalAccessException e )
{ throw new ServletException( "init-error: redirect-resolver-initializer", e ); }
catch ( InstantiationException e )
{ throw new ServletException( "init-error: redirect-resolver-initializer", e ); }
catch ( ConstructorNotFoundException e )
{ throw new ServletException( "init-error: redirect-resolver-initializer", e ); }
catch ( ParameterProviderException e )
{ throw new ServletException( "init-error: redirect-resolver-initializer", e ); }
catch ( IOException e )
{ throw new ServletException( "init-error: redirect-resolver-initializer", e ); }
catch ( MethodNotFoundException e )
{ throw new ServletException( "init-error: redirect-resolver-initializer", e ); }
// tell the model pool of the redirect resolver, so that models can now request it
oModelFactory.setRedirectResolver( _oRedirectResolverExecutor );
// the ControllerPool manages a pool of controllers, reloading if the underlying controller def changes
ControllerPool oControllerPool = new ControllerPool( oClassLoader, oServletConfig );
// the ControllerExecutor manages the execution of controllers
_oControllerExecutor = new ControllerExecutor( oControllerPool,
new ControllerParameterProviderFactory( oModelPool,
oConfig.getFileUpload(),
oTemplatingEngine,
_oRedirectResolverExecutor,
oClassLoader ) );
// the ViewExecutor manages the loading (when needed) and processing of views
ViewParameterProviderFactory
oViewParameterProviderFactory = new ViewParameterProviderFactory( oModelPool,
oConfig.getFileUpload(),
oTemplatingEngine,
_oRedirectResolverExecutor,
oClassLoader );
ViewFactory
oViewFactory = new ViewFactory( oClassLoader, oViewParameterProviderFactory );