I found that I can use org.jboss.ejb3.common.proxy.plugins.async.AsyncUtils in the following way:
@Stateful
public class ComputerBean implements ComputerRemote {
@EJB
private ProcessorLocal processor;
public void startComputations() {
Random r = new Random();
while(true) {
AsyncUtils.mixinAsync(processor).compute(r.nextInt());
}
}
}
Then it is possible to use Future interface to get result (when it will be ready). I tested it - works, but I have also noticed something strange. Let's consider following code:
@Stateless
public class ProcessorBean implements ProcessorLocal {
private static int COUNTER = 0;
@PostConstruct
public void init() {
System.out.println("constructing");
COUNTER++;
}
@PreDestroy
public void destroy() {
System.out.println("destroying");
COUNTER--;
}
public void compute(int i) {
System.out.println("----------------> " + COUNTER);
// some dummy computations - it's here only in order to take some time
double d = 0.3;
for (int j=0; j<100; j++) {
d+= 0.2 % 4 + i;
}
}
}
Counter is increased and printed to the console - it looks as SLSB are pooled and their number is increased when needed.
However, counter is _never_ decremented - even if I stop computations for 15 minutes and then restart it.
I would say that I expected that after some downtime number of pooled SLSB will go to some small number.
Is this something wrong with my code (some hold references etc.) ?
Thanks,
Piotr