Hi,
I’m trying to deploy a very simple Vaadin push application.
It works fine with Tomcat and web sockets.
When I deploy the same application with weblogic 12c (12.1.2) I get a message in the debug console saying that websockets is not supported :
Push connection using primary method (websocket) failed. Trying with long-polling
I also get this message in the server console:
SEVERE:
java.lang.NullPointerException
at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.initSessionInfo(ServletRequestImpl.java:2946)
at weblogic.servlet.internal.ServletRequestImpl$SessionHelper._getSessionInternal(ServletRequestImpl.java:2675)
at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getSessionInternal(ServletRequestImpl.java:2663)
at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getSession(ServletRequestImpl.java:2653)
at weblogic.servlet.internal.ServletRequestImpl.getSession(ServletRequestImpl.java:1393)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:255)
at org.atmosphere.cpr.AtmosphereRequest.getSession(AtmosphereRequest.java:758)
at org.atmosphere.cpr.SessionTimeoutSupport.restoreTimeout(SessionTimeoutSupport.java:69)
at org.atmosphere.cpr.AtmosphereResourceImpl.cancel(AtmosphereResourceImpl.java:715)
at org.atmosphere.cpr.AtmosphereResourceImpl.close(AtmosphereResourceImpl.java:785)
at com.vaadin.server.communication.AtmospherePushConnection.disconnect(AtmospherePushConnection.java:293)
at com.vaadin.server.communication.AtmospherePushConnection.connect(AtmospherePushConnection.java:232)
at com.vaadin.server.communication.PushHandler$2.run(PushHandler.java:134)
at com.vaadin.server.communication.PushHandler.callWithUi(PushHandler.java:245)
at com.vaadin.server.communication.PushHandler.access$200(PushHandler.java:56)
at com.vaadin.server.communication.PushHandler$1.onRequest(PushHandler.java:74)
at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:174)
at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:95)
at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:66)
at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1802)
at com.vaadin.server.communication.PushRequestHandler.handleRequest(PushRequestHandler.java:144)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1401)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:237)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:238)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3363)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3333)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:254)
And after that 9 times out of 10 the application just hangs and I get this kind of messages each time I try to do an action:
java.io.IOException: Invalid message length {"csrfToken":"48ecbe63-871f-42f7-93dd-084948c72855", "rpc":[["3","com.vaadin.shared.ui.ui.UIServerRpc","re
size",["963","1280","1280","963"]
],["5","com.vaadin.shared.ui.button.ButtonServerRpc","click",[{"button":"LEFT", "clientY":"11", "clientX":"55", "altK
ey":false, "ctrlKey":false, "type":"1", "shiftKey":false, "metaKey":false, "relativeY":"11", "relativeX":"55"}]]], "syncId":1}
at com.vaadin.server.communication.AtmospherePushConnection$FragmentedMessage.<init>(AtmospherePushConnection.java:66)
at com.vaadin.server.communication.AtmospherePushConnection.receiveMessage(AtmospherePushConnection.java:197)
at com.vaadin.server.communication.PushHandler$3.run(PushHandler.java:162)
at com.vaadin.server.communication.PushHandler.callWithUi(PushHandler.java:245)
at com.vaadin.server.communication.PushHandler.access$200(PushHandler.java:56)
at com.vaadin.server.communication.PushHandler$1.onRequest(PushHandler.java:76)
at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:174)
at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:95)
at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:66)
at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1802)
at com.vaadin.server.communication.PushRequestHandler.handleRequest(PushRequestHandler.java:144)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1401)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:237)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:238)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3363)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3333)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:254)
Caused by: java.lang.NumberFormatException: For input string: "{"csrfToken":"48ecbe63-871f-42f7-93dd-084948c72855", "rpc":[["3","com.vaadin.shared.ui.
ui.UIServerRpc","resize",["963","1280","1280","963"]
],["5","com.vaadin.shared.ui.button.ButtonServerRpc","click",[{"button":"LEFT", "clientY":"11", "c
lientX":"55", "altKey":false, "ctrlKey":false, "type":"1", "shiftKey":false, "metaKey":false, "relativeY":"11", "relativeX":"55"}]]], "syncId":1}"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at com.vaadin.server.communication.AtmospherePushConnection$FragmentedMessage.<init>(AtmospherePushConnection.java:64)
... 30 more
Here is my pom.xml:
[code]
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
<groupId>test.push</groupId>
<artifactId>push</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-server</artifactId>
<version>7.2.6</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-shared</artifactId>
<version>7.2.6</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-push</artifactId>
<version>7.2.6</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-themes</artifactId>
<version>7.2.6</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-client-compiled</artifactId>
<version>7.2.6</version>
</dependency>
</dependencies>
[/code]Here is my app (it just uses the broadcaster class from the Vaadin doc):
[code]
@Push
public class PushUI extends UI implements Broadcaster.BroadcastListener {
/**
* {@inheritDoc}
*
* @param request
*/
@Override
protected void init(VaadinRequest request) {
Broadcaster.register(this);
VerticalLayout view = new VerticalLayout();
Button button = new Button("Hello Vaadin!");
button.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(Button.ClickEvent clickEvent) {
Broadcaster.broadcast("hiiii");
}
});
view.addComponent(button);
setContent(view); }
@Override
public void detach() {
super.detach();
Broadcaster.unregister(this);
}
@Override
public void receiveBroadcast(String message) {
access(new Runnable() {
@Override
public void run() {
Notification.show("broadcast message ok");
}
});
}
}
[/code]And finally here is my web.xml:
[code]
<?xml version="1.0" encoding="UTF-8"?><servlet>
<servlet-name>application</servlet-name>
<servlet-class>
com.vaadin.server.VaadinServlet
</servlet-class>
<init-param>
<param-name>UI</param-name>
<param-value>test.push.PushUI</param-value>
</init-param>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>application</servlet-name>
<url-pattern>/VAADIN/*</url-pattern>
</servlet-mapping>
[/code]Do you have an idea? Did someone manage to make Vaadin push work with weblogic 12c ?
Thanks a lot,
Thomas