Integrating Seam in Vaadin application problem
timkepp Mar 11, 2013 12:34 PMHi all
I'm a newbie in Seam and I'm trying to integrate Seam in a Vaadin application.
I'm trying to get access to the application context in my UI class but Contexts.getApplicationContext() returns NULL.
I don't know what I'm doing wrong. Could anybody help me?
Thx
Tim
MyVaadinApplication.java:
package com.me.ui.application; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.contexts.Contexts; import com.me.presenter.TestPresenter; import com.vaadin.server.VaadinRequest; import com.vaadin.ui.Label; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; @Scope (ScopeType.APPLICATION) @Name("applicationBean") public class MyVaadinApplication extends UI { @Override public void init(VaadinRequest request) { VerticalLayout layout = new VerticalLayout(); layout.addComponent(new Label("some stuff")); setContent(layout); TestPresenter presenter = (TestPresenter) Contexts.getApplicationContext().get(TestPresenter.class); //--> NPE } @Create public void createPresenter() { //--> this is never reached TestPresenter presenter = (TestPresenter) Contexts.getApplicationContext().get(TestPresenter.class); } }
SeamApplicationServlet.java:
package com.me.ui.application; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import com.vaadin.server.DeploymentConfiguration; import com.vaadin.server.ServiceException; import com.vaadin.server.SessionInitEvent; import com.vaadin.server.SessionInitListener; import com.vaadin.server.UIClassSelectionEvent; import com.vaadin.server.UIProvider; import com.vaadin.server.VaadinServlet; import com.vaadin.server.VaadinServletService; import com.vaadin.ui.UI; public class SeamApplicationServlet extends VaadinServlet { private String applicationBean; private static final String APPLICATION_BEAN_NAME_PARAM = "applicationBean"; @Override public void init(ServletConfig servletConfig) throws ServletException { super.init(servletConfig); applicationBean = servletConfig.getInitParameter(APPLICATION_BEAN_NAME_PARAM); if(applicationBean == null) { throw new ServletException("ApplicationBean not specified in servlet parameters"); } } @Override protected VaadinServletService createServletService(DeploymentConfiguration deploymentConfiguration) { VaadinServletService service = super.createServletService(deploymentConfiguration); service.addSessionInitListener(new SessionInitListener() { @Override public void sessionInit(SessionInitEvent event) throws ServiceException { event.getSession().addUIProvider(new SeamProvider()); } }); return service; } private class SeamProvider extends UIProvider { @Override public Class<? extends UI> getUIClass(UIClassSelectionEvent uiClassSelectionEvent) { return MyVaadinApplication.class; } } }
web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Vaadin Web Application</display-name> <context-param> <description>Vaadin production mode</description> <param-name>productionMode</param-name> <param-value>false</param-value> </context-param> <listener> <listener-class>org.jboss.seam.servlet.SeamListener</listener-class> </listener> <filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>Vaadin Application Servlet</servlet-name> <servlet-class>com.me.ui.application.SeamApplicationServlet</servlet-class> <init-param> <description>Vaadin application class to start</description> <param-name>applicationBean</param-name> <param-value>com.me.ui.application.MyVaadinApplication</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Vaadin Application Servlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
component.xml:
<?xml version="1.0" encoding="UTF-8"?> <components xmlns="http://jboss.org/schema/seam/components" xmlns:core="http://jboss.org/schema/seam/core" xmlns:web="http://jboss.com/products/seam/web" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/seam/core http://jboss.org/schema/seam/core-2.3.xsd http://jboss.org/schema/seam/bpm http://jboss.org/schema/seam/bpm-2.3.xsd http://jboss.org/schema/seam/components http://jboss.org/schema/seam/components-2.3.xsd"> <component name="org.jboss.seam.core.init"> <property name="debug">true</property> </component> <web:context-filter url-pattern="/MyVaadinApplication/*"/> </components>