Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为将数据推送到Websocket的服务使用@Startup注释?_Java_Exception_Jakarta Ee_Websocket_Startup - Fatal编程技术网

Java 如何为将数据推送到Websocket的服务使用@Startup注释?

Java 如何为将数据推送到Websocket的服务使用@Startup注释?,java,exception,jakarta-ee,websocket,startup,Java,Exception,Jakarta Ee,Websocket,Startup,这是JavaEE7@Startup注释,仅供参考。我正在使用最新的GlassFish服务器和IntelliJ来运行服务器 我需要实例化此服务,以便它可以定期将数据包发送到websocket进行处理,但我使用 session.getBasicRemote().sendObject(消息) 最后迫使我抛出IOException和EncodeException 这是不好的,因为@Startup或@Singleton在实例化时不允许使用异常: war分解:java.io.IOException:com.

这是JavaEE7@Startup注释,仅供参考。我正在使用最新的GlassFish服务器和IntelliJ来运行服务器

我需要实例化此服务,以便它可以定期将数据包发送到websocket进行处理,但我使用

session.getBasicRemote().sendObject(消息)

最后迫使我抛出IOException和EncodeException

这是不好的,因为@Startup或@Singleton在实例化时不允许使用异常:

war分解:java.io.IOException:com.sun.enterprise.admin.remote.RemoteFailureException:部署期间发生错误:部署应用程序时发生异常[keyBoard\u war\u exploded]:生命周期方法[printSchedule]不能引发选中的异常

这是我的密码:

package site.xxxx.models;
导入site.xxxx.message.message;
导入site.xxxx.message.TextMessage;
导入site.xxxx.modules.Packet;
导入site.xxxx.websocket.MainServerEndpoint;
导入javax.annotation.PostConstruct;
导入javax.ejb.Schedule;
导入javax.ejb.Singleton;
导入javax.ejb.Startup;
导入javax.json.json;
导入javax.json.JsonObject;
导入javax.websocket.EncodeException;
导入javax.websocket.Session;
导入java.io.IOException;
导入java.util.Set;
@启动
@独生子女
公务舱服务{
私有静态服务;
设置peers=MainServerEndpoint.peers;
@施工后
public void mainLoop()引发IOException、EncodeException、InterruptedException{
sendSpamPacket();
}
私有void sendSpamPacket()引发IOException,EncodeException{
JsonObject ret=Json.createObjectBuilder()
.add(“键入”、“文本消息”)
.添加(“文本”,“ayyyy”)
.build();
数据包=新数据包(新文本消息(ret));
MainServerEndpoint.sendPacket(数据包);
//导致调用session.getBasicRemote().sendObject(消息);
}
}

启动期间,您向谁发送数据?在应用程序成功启动之前,应用程序不会处理任何请求,而在@startupbeans初始化之后,就会发生这种情况。我没有使用过EE WebSocket API,但通常在建立WebSocket时会得到一个事件,您需要保留WebSocket会话的句柄,以便将数据推送到客户端。抛出异常是您唯一的拦截器吗?你能简单地在方法中处理它们吗?或者将它们作为RuntimeException重新抛出如果我想在构造方法mainLoop()后使用它,我需要抛出它们。“在应用程序成功启动之前,应用程序不会处理任何请求,而在@startupbeans初始化之后会发生这种情况。”--这正是我的问题;我希望应用程序启动并立即启动mainLoop,以便开始向websocket端点发送数据包,即使没有连接会话。