Previously we use to load the application's Spring configuration files manually using a custom class (SpringLoader) that was a wrapper around the Spring's ClassPathXmlApplicationContext class. Seemed like an easy way to do things at the time.
All the GWT server-side services would manually look up their required Spring beans which provided the back-end/server tier functionality.
For example:
public class GwtSecurityServiceImpl extends RemoteServiceServlet implements GwtSecurityService { /** The service used to check user's access rights and to load user menus. */ private UserSecurityService userSecurityService = (UserSecurityService) SpringLoader.getBean(SpringBeanId.SECURITY_SERVICE_ID); public CatchSystemMenu isValidUser(String username, String catchSystem) throws CatchSystemsGwtException { ... Boolean validUser = userSecurityService.isValidUser(username, catchSystem); ... }
Better Approach:
Use the usual Spring's context listener (defined in the application's web.xml) to load the application's Spring context on application start on.
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:myapp-spring.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
Define a base class for all the GWT service classes to extend. This class provides the injection of the Spring managed attributes, using Spring's functionality.
Base GWT service class:
public class SpringRemoteServiceImpl extends RemoteServiceServlet { private static final long serialVersionUID = 1L; @Override public void init() throws ServletException { super.init(); setSpringServices(); } private void setSpringServices() { WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); AutowireCapableBeanFactory beanFactory = ctx.getAutowireCapableBeanFactory(); beanFactory.autowireBean(this); } }
The individual GWT service classes just extend this class and use the usual Spring @Autowired annotation to inject their Spring-managed attributes.
public class GwtSecurityServiceImpl extends SpringRemoteServiceImpl implements GwtSecurityService { /** The service used to check user's access rights and to load user menus. */ @Autowired private UserSecurityService userSecurityService; public CatchSystemMenu isValidUser(String username, String catchSystem) throws CatchSystemsGwtException { ... Boolean validUser = userSecurityService.isValidUser(username, catchSystem); ... } }
Nice and easy.
Have a banana.
No comments:
Post a Comment