sth を計算する EJB があります。計算が実行される限り、精度が向上します。したがって、1 つの非同期関数が計算を開始し、1 つの非同期関数がそれを停止する必要があります。しかし、Glassfish 3.1.2 呼び出しで実行stopCalculating()
すると、新しいスレッドは作成されませんが、startCalculating()
終了するまで待機します。これは明らかに決して起こりません。
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.AsyncResult;
import javax.ejb.Asynchronous;
import javax.ejb.Singleton;
@Singleton
public class Calculator {
private boolean calculating = false;
private String result = "Empty";
@Asynchronous
public void startCalculating() {
calculating = true;
Logger.getGlobal().log(Level.INFO, "Starting!");
calculate();
}
private void calculate() {
result = "";
while(calculating) {
/*Calculate and update result*/
Logger.getGlobal().log(Level.INFO, "Calculate...");
}
}
@Asynchronous
public Future<String> stopCalculating() {
Logger.getGlobal().log(Level.INFO, "Stopping!");
calculating = false;
return new AsyncResult<String>(result);
}
}
GlassfishstopCalculating()
を別のスレッドで実行するにはどうすればよいですか?