1
我有一个EJB来计算某物。只要计算运行,精度就越高。 所以一个异步函数开始计算,一个异步应该停止它。但在Glassfish 3.1.2上运行,调用stopCalculating()
不会创建新线程,而是等到startCalculating()
结束时,显然永远不会发生。Glassfish 3.1.2似乎不在一个EJB中运行多个线程
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);
}
}
我怎样才能得到Glassfish的到在其它线程中运行stopCalculating()
?
谢谢,这帮了我很多。 – user2140206 2013-03-12 14:21:42