Java POJO属性更改侦听器-理想方式
我正在开发一个基于REST的web应用程序,它将异步调用第三个系统来获取一些数据(使用WebSocket)。所以 浏览器->休息->我的网络应用->另一个应用->我的网络应用->浏览器 我的Web应用程序与另一个应用程序之间的通信是异步的,我只能使用一些标识符跟踪请求的响应。 因此,我请求C作为Java POJO属性更改侦听器-理想方式,java,while-loop,javabeans,Java,While Loop,Javabeans,我正在开发一个基于REST的web应用程序,它将异步调用第三个系统来获取一些数据(使用WebSocket)。所以 浏览器->休息->我的网络应用->另一个应用->我的网络应用->浏览器 我的Web应用程序与另一个应用程序之间的通信是异步的,我只能使用一些标识符跟踪请求的响应。 因此,我请求C作为.C,响应将是.response,其中两个计数器将相同 为了将响应映射到请求,我将命令、计数器、标志设置为bean。我保持一个while循环,不断检查标志是否已设置。一旦我得到响应,服务器就会设置标志,而
.C
,响应将是.response
,其中两个计数器将相同
为了将响应映射到请求,我将命令、计数器、标志设置为bean。我保持一个while循环,不断检查标志是否已设置。一旦我得到响应,服务器就会设置标志,而循环退出,我知道数据可用
这条路对吗?我觉得(我可能错了!)保持一个打开的while循环是不正确的,所以有没有办法让它变得更好
类bean的设置如下所示
public void setAllProperties(){
bean.setCommand(commandString);
bean.setCounter(counter);
bean.hasResponse(false);
}
webservice中的代码片段是
bean.setAllProperties();
sendToApplication(bean);
int checkCounter = 0;
while(!bean.hasResponse && checkCounter > 0){
if(bean.hasResponse){
checkCounter++;
// loggers and other logic here
}
}
循环破坏了异步操作的许多值。它也会消耗大量的CPU时间(当使用这样的循环时,尝试添加延迟-快速睡眠) 我建议改为使用“wait()”和“notify()”/“notifyAll()” 在等待响应的代码中,执行以下操作:
synchronized ( bean ) {
while ( ! bean.hasResponse ) {
bean.wait();
}
}
在处理响应和更新bean的代码中:
synchronized ( bean ) {
bean.hasResponse = true;
bean.notifyAll();
}
“其他应用程序”如何更新您的bean类?它不是更新bean类,而是返回响应。使用WebSocketThis效果很好,我在其中添加了一个超时,以确保没有线程无限期地等待。谢谢很抱歉反应太晚。