Какие шаблоны дизайна используются при интеграции пружины с vaadin / gwt?
Небольшое изменение того, что было предоставлено выше.Он работает для меня и очень прост, поэтому я публикую его здесь.
Я добавил следующее в web.xml и использовал точную ссылку на путь к классу для Spring-контекста зависимости (измените путь в соответствии с вашими потребностями):
<!-- Spring context loader -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:com/company/appserv/spring/spring-context.xml</param-value>
</context-param>
Выше предполагается, что вы добавили spring-web в ваш файл pom.xml, поэтому обязательно сделайте это.Вам также понадобится сервлет-API.Таким образом, вы добавите в свой pom следующее, измените версии в соответствии с вашими потребностями:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
Теперь создайте следующий класс:
import com.vaadin.Application;
import com.vaadin.terminal.gwt.server.WebApplicationContext;
import javax.servlet.ServletContext;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SpringContextHelper {
private ApplicationContext context;
private static Logger logger = LoggerFactory.getLogger(SpringContextHelper.class);
public SpringContextHelper(Application application) {
ServletContext servletContext = ((WebApplicationContext) application.getContext()).getHttpSession().getServletContext();
context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
logger.debug("Number of beans: {}",context.getBeanDefinitionCount());
}
public Object getBean(final String beanRef) {
return context.getBean(beanRef);
}
}
И теперь создайте свой класс DAOкак предложено в предыдущем посте):
import com.company.appserv.dbo.DatabaseHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.vaadin.Application;
public class DAO {
private static DatabaseHelper databaseHelper;
private static Logger logger = LoggerFactory.getLogger(DAO.class);
public static final void initialize(Application application) {
logger.debug("DAO initializing...");
if (databaseHelper == null) {
logger.debug("Creating databaseHelper...");
SpringContextHelper helper = new SpringContextHelper(application);
databaseHelper = (DatabaseHelper)helper.getBean("databaseHelper");
}
}
public static DatabaseHelper getDatabaseHelper() {
return databaseHelper;
}
}
Наконец, обязательно инициализируйте ваш DAO, который вы теперь будете использовать в различных классах представлений.Эта инициализация будет происходить в любом классе, который вы расширили Application, как показано ниже:
import com.vaadin.Application;
import com.vaadin.ui.Window;
/**
* The Application's "main" class
*
* Vaadin framework associates requests with sessions so that
* an application class instance is really a session object.
*/
@SuppressWarnings("serial")
public class VoucherTool extends Application
{
private Window mainWindow;
@Override
public void init() {
mainWindow = new Window("Application");
setMainWindow(mainWindow);
// Needed because composites are full size
mainWindow.getContent().setSizeFull();
LoginView myComposite = new LoginView();
mainWindow.addComponent(myComposite);
setTheme("applicationtheme");
DAO.initialize(this);
}
}