I am trying a simple websocket application using Jakarta EE9 and JSF 3.0 on a glassfish 6.2.5 server. When I run it, messages are not received, when the server shuts down the following is printed in the web console:
WebSocket connection to 'ws://localhost:8080/folder/jakarta.faces.push/someChannel?c10aaeaa-2007-4a19-96bb-630f88285f6c' failed:
t.open @ jsf.js.xhtml?ln=jakarta.faces:1
My xhtml is the following:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
</h:head>
<h:body>
<div class="Home-Page">
<div class="Home-window">
<h:commandButton
id="sendMessage"
type="submit"
action="#{msgBean.sendMessage()}" value="Send Message">
<f:ajax />
</h:commandButton>
<f:websocket channel="someChannel" onmessage="function test(m){console.log(m);}" >
</f:websocket>
</div>
</div>
</h:body>
</html>
And I use the following bean:
import jakarta.faces.push.Push;
import jakarta.faces.push.PushContext;
import jakarta.faces.view.ViewScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;
@Named("msgBean")
@ViewScoped
public class MsgBeanimplements java.io.Serializable{
@Inject
@Push
private PushContext someChannel;
public void sendMessage() {
someChannel.send("hello");
}
}
My faces-config is like this:
<faces-config
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_3_0.xsd"
version="3.0">
</faces-config>
And web-config:
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<context-param>
<param-name>jakarta.faces.ENABLE_CDI_RESOLVER_CHAIN</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>jakarta.faces.ENABLE_WEBSOCKET_ENDPOINT</param-name>
<param-value>true</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>
Does anyone know how to solve this? I have tried adding a FakeEndPoint like recommended here, but then I get the following error:
Cannot invoke "jakarta.servlet.FilterRegistration$Dynamic.setAsyncSupported(boolean)" because "reg" is null
Via Active questions tagged javascript - Stack Overflow https://ift.tt/W2GBlXu
Comments
Post a Comment