I’m not sure what I am doing wrong, but it appears as though my Vaadin application cannot handle more than 1 user at a time. I keep getting the following exception once a second user tries logging in:
javax.servlet.ServletException: java.lang.UnsupportedOperationException
com.vaadin.terminal.gwt.server.AbstractApplicationServlet.handleServiceException(AbstractApplicationServlet.java:999)
com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:548)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
java.lang.UnsupportedOperationException
com.vaadin.ui.CustomComponent.removeComponent(CustomComponent.java:248)
com.vaadin.ui.AbstractComponentContainer.addComponent(AbstractComponentContainer.java:207)
com.vaadin.ui.CustomComponent.setCompositionRoot(CustomComponent.java:113)
org.vaadin.appfoundation.view.AbstractView.setContent(AbstractView.java:34)
org.vaadin.appfoundation.view.AbstractView.<init>(AbstractView.java:22)
com.paymentzen.ui.view.RegPanelPendingView.<init>(RegPanelPendingView.java:14)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
org.vaadin.appfoundation.view.DefaultViewFactory.initView(DefaultViewFactory.java:22)
org.vaadin.appfoundation.view.ViewItem.getView(ViewItem.java:67)
org.vaadin.appfoundation.view.ViewHandler.activateView(ViewHandler.java:243)
org.vaadin.appfoundation.view.ViewHandler.activateView(ViewHandler.java:205)
com.paymentzen.ui.web.PaymentZenUIApplication.handleParameters(PaymentZenUIApplication.java:153)
com.vaadin.ui.Window.handleParameters(Window.java:502)
com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:528)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
The code that it is executing when getting the error is the super(mainLayout) of the following snippet:
public class RegPanelPendingView extends AbstractView<AbsoluteLayout> {
private static final long serialVersionUID = -3644738281248436114L;
private static AbsoluteLayout mainLayout;
public RegPanelPendingView() {
super(mainLayout);
buildMainLayout();
setCompositionRoot(mainLayout);
}
I am using the ViewHandler pattern, so I don’t know if that has anything to do with it. What I do, is in the init of my Application class, I do:
ViewHandler.addView(myPanel.class, this);
Where this is my application class:
Then, I use the handleParameters method to choose the proper screen based on the parameters in the URL:
public void handleParameters(Map<String, String[]> parameters) {
do {
if (parameters.size() == 0)
break;
.......
ViewHandler.activateView(RegPanelPendingView.class, payee);
} while (false);
}
The ViewHandler.activateView(RegPanelPendingView.class,payee) is what is throwing the exception. It appears as though there is something I don’t understand about the ViewHandler pattern that may be causing this problem.
The init in my program:
public class PaymentZenUIApplication extends Application implements
ParameterHandler, ViewContainer {
@Autowired(required=true)
private AddressDataService addressDataService = null;
private static final long serialVersionUID = 1164965093900283124L;
private AbstractView<?> currentView = null;
private VerticalLayout mainLayout = new VerticalLayout();
@Override
public void init() {
getContext().addTransactionListener(new ViewHandler(this));
SpringContextHelper springHelper = new SpringContextHelper(this);
Window mainWindow = new Window("MYNAME");
mainWindow.getContent().setSizeFull();
mainLayout.setSizeFull();
// select window theme
mainWindow.addParameterHandler(this);
mainWindow.addComponent(mainLayout);
// Register child views
ViewHandler.addView(RegPanelPendingView.class.class, this);
....
Any assistance would be great. I am trying to test this with customers and I don’t understand what is going on.
Thanks,
Tom