我的JAX-WS Web服务(它获取客户端的请求击中后),发送到后端遗留平台的请求(通过插座),然后等待20秒的响应。
这使得该请求之前,它更新其独特的交易编号的表格。
一个单独的监听线程(独立的Java应用程序)正在等待该插座用于响应上,每个响应将具有交易号中它识别哪个请求(先前发送的)与相关联。
怎么能这样独立的Java应用程序进行通信的线程,它的响应来了Web服务等,它可以继续处理。
目前,我想到的是监听线程可以更新表(基于事务数)来表示响应到达。 和Web服务线程可以在数据库中保留轮询(检查每2秒)的响应是否已到达。
我要寻找一个在这种情况下,而不是轮询一些推送通知。 怎样才能当其响应到达我的web服务线程的通知。
假设线程服务所述请求,使插座请求,和该线程接收该插座响应,都在相同的JVM:
您可以使用标准的Java等待/通知模式。
http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html 。
基本上,你的请求/插座线将在单(或类似)的地图创建一个对象(一个“锁定”对象),关键是你的唯一的交易号。 然后,该线程将等待该对象。 这将阻止该线程直到另一个线程没有一个是交易ID锁对象通知。
注意锁定对象可以只是一个对象。
你也可以把在等待超时,以避免永远等待。
然后,您的其他线程将抢事务ID的锁定对象,并做就可以了通知。 这再放开第一个线程。
如果第二个线程发现没有锁定对象的事务ID,然后出了问题,你就必须记录错误或相似。
Ps作为地图是一个共享资源,你可能会需要的ConcurrentHashMap。 否则,你可能会击中多个线程更新它同时问题。