我有一个 EJB,它被注入到我的一个类中。EJB 有一种方法可以从注入资源的类开始监视资源。monitor 方法中有一个 while 循环,如果其中一个变量被更新,则需要中断该循环。代码看起来像这样:
public class MyObject()
{
@EJB
private MyEJB myEjb;
private Collection stuffToMonitor;
public MyObject()
{
//empty
}
public void doSomething()
{
// create collection of stuffToMonitor
myEjb.startMonitoring(stuffToMonitor);
// code that does something
if(conditionsAreMet)
{
myEjb.stopMonitoring();
}
// more code
}
}
@Stateful
public class MyEJB()
{
private volatile boolean monitoringStopped = false;
public MyEJB()
{
//empty
}
public void startMonitoring(Collection stuffToMonitor)
{
int completed = 0;
int total = stuffToMonitor.size();
while(completed < total)
{
// using Futures, track completed stuff in collection
// log the value of this.monitoringStopped
if (this.monitoringStopped)
{
break;
}
}
}
public voide stopMonitoring()
{
this.monitoringStopped = true;
// log the value of this.monitoringStopped
}
}
在我的日志中,我可以看到 this.monitoringStopped 的值是true
在调用 stopMonitoring 方法之后,但它总是false
在 while 循环中记录。
最初,MyEJB 是无状态的,它已被更改为有状态,并且我也将变量设置为 volatile,但在 while 循环中没有获取更改。
我缺少什么来获取我的代码以获取 monitoringStopped 变量的更新值?