Fra*_*ank 0 java sockets ejb java-ee
我的应用程序必须打开到服务器的tcp套接字连接并定期收听传入的消息.
在JEE 7应用程序中实现此目的的最佳实践是什么?
现在我有这样的事情:
@javax.ejb.Singleton
public class MessageChecker {
@Asynchronous
public void startChecking() {
// set up things
Socket client = new Socket(...);
[...]
// start a loop to retrieve the incoming messages
while((line = reader.readLine())!=null){
LOG.debug("Message from socket server: " + line);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用@PostConstruct方法从@Startup bean调用MessageChecker.startChecking()函数.
@javax.ejb.Singleton
@Startup
public class Starter() {
@Inject
private MessageChecker checker;
@PostConstruct
public void startup() {
checker.startChecking();
}
}
Run Code Online (Sandbox Code Playgroud)
你认为这是正确的方法吗?实际上它运作不佳.应用程序服务器(JBoss 8 Wildfly)挂起,不再对关闭或重新部署命令作出反应.我感觉它被困在while(...)循环中.
干杯弗兰克
Frank,在EJB环境中进行任何I/O操作都是不好的做法.这背后的原因很简单.在群集中工作时:
现在,我知道你的bean是一个@Singleton所以你的架构不依赖于事务性,集群和从该套接字读取的分布.所以你可能会对此感到满意.
但是:D,您要求采用符合Java EE的方式解决此问题.这是应该做的:
messaging功能(发送消息并等待回复).您可能正在使用同步协议来执行异步消息传递.试试吧.有一些适配器,有些适合像手套,有些可能有点过度设计.
| 归档时间: |
|
| 查看次数: |
2231 次 |
| 最近记录: |