I am trying to include dwr in my project that uses spring mvc 4.0.5. Java based configurations are used in project. for java based configurations I am using following lines of code in MVCConfiguration.
@Bean
public DwrController dwrController(){
Map<String,String> configParam = new HashMap<String, String>();
configParam.put("activeReverseAjaxEnabled","true");
DwrController dwrController = new DwrController();
dwrController.setDebug(true);
dwrController.setConfigParams(configParam);
/*
AnnotationsConfigurator annotationsConfigurator = new AnnotationsConfigurator();
annotationsConfigurator.configure();
dwrController.setConfigurators(configurators);
*/
List<Configurator> configurators = new ArrayList<Configurator>();
configurators.add(annotationsConfigurator);
return dwrController;
}
@Bean
public BeanNameUrlHandlerMapping beanNameUrlHandlerMapping(){
BeanNameUrlHandlerMapping beanNameUrlHandlerMapping = new BeanNameUrlHandlerMapping();
return beanNameUrlHandlerMapping;
}
@Bean
public DwrHandlerMapping dwrHandlerMapping(){
Map<String,String> urlMap = new HashMap<String, String>();
urlMap.put("/dwr/**/*","dwrController");
DwrHandlerMapping dwrHandlerMapping = new DwrHandlerMapping();
dwrHandlerMapping.setAlwaysUseFullPath(true);
dwrHandlerMapping.setUrlMap(urlMap);
return dwrHandlerMapping;
}
WebApplicationInitializer extending class i have added mapping for dwr requests.
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/dwr/*");
dispatcher.addMapping("/");
But on deployment it shows error stating "The required 'configurators' property should be set". Can you please suggest if the configuration requires any modifications also how to set the configurators.
Changed dwrController() method to :
@Bean
@Autowired
public DwrController dwrController(BeanFactory beanFactory){
Map<String,String> configParam = new HashMap<String, String>();
configParam.put("activeReverseAjaxEnabled","true");
DwrController dwrController = new DwrController();
dwrController.setDebug(true);
dwrController.setConfigParams(configParam);
AnnotationsConfigurator annotationsConfigurator = new AnnotationsConfigurator();
SpringContainer springContainer = new SpringContainer();
springContainer.setBeanFactory(beanFactory);
annotationsConfigurator.configure(springContainer);
List<Configurator> configurators = new ArrayList<Configurator>();
configurators.add(annotationsConfigurator);
dwrController.setConfigurators(configurators);
return dwrController;
}
Now application is getting deployed but for /dwr/engine.js and other requests it is giving error The requested resource is not available
.
Thanks.
I finally got the working configuration. Here is my cofiguration class's code
@Bean
public DwrController dwrController(ApplicationContext applicationContext){
BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry)applicationContext.getAutowireCapableBeanFactory();
Map<String,String> configParam = new HashMap<String, String>();
configParam.put("activeReverseAjaxEnabled","true");
ClassPathBeanDefinitionScanner scanner = new DwrClassPathBeanDefinitionScanner(beanDefinitionRegistry);
scanner.addIncludeFilter(new AnnotationTypeFilter(RemoteProxy.class));
scanner.addIncludeFilter(new AnnotationTypeFilter(DataTransferObject.class));
scanner.addIncludeFilter(new AnnotationTypeFilter(GlobalFilter.class));
scanner.scan("package.to.scan");
DwrController dwrController = new DwrController();
dwrController.setDebug(true);
dwrController.setConfigParams(configParam);
SpringConfigurator springConfigurator = new SpringConfigurator();
List<Configurator> configurators = new ArrayList<Configurator>();
configurators.add(springConfigurator);
dwrController.setConfigurators(configurators);
return dwrController;
}
@Bean
public BeanNameUrlHandlerMapping beanNameUrlHandlerMapping(){
BeanNameUrlHandlerMapping beanNameUrlHandlerMapping = new BeanNameUrlHandlerMapping();
return beanNameUrlHandlerMapping;
}
@Bean
public DwrHandlerMapping dwrHandlerMapping(DwrController dwrController){
Map<String,DwrController> urlMap = new HashMap<String, DwrController>();
urlMap.put("/dwr/**/*",dwrController);
DwrHandlerMapping dwrHandlerMapping = new DwrHandlerMapping();
dwrHandlerMapping.setAlwaysUseFullPath(true);
dwrHandlerMapping.setUrlMap(urlMap);
return dwrHandlerMapping;
}
Added dispatcher mapping in WebApplicationInitializer implementing class as
dispatcher.addMapping("/dwr/*");
dispatcher.addMapping("/");
Note : DwrClassPathBeanDefinitionScanner will skip scan of @Controller,@Service,@Repository,@Component
so do not use @RemoteProxy
along with anyone of these spring annotations.