У меня есть приложение Struts / J2EE.
У меня есть класс, который создает вызываемый объект.
ExecutorService executor = Executors.newFixedThreadPool(NO_THREADS);
List<Future<Long>> tripFutureList = new ArrayList<>();
for(Long tripId : tripIds) {
Callable<Long> callable = new CallableTripAutoApprovalEscalation(tripId);
Future<Long> future = executor.submit(callable);
tripFutureList.add(future);
}
for(Future<Long> future : tripFutureList) {
try {
logger.fine("Processed trip auto approval escalation for trip: "+future.get());
} catch (InterruptedException | ExecutionException e) {
logger.severe("There was an error processing trip."+ e.getMessage());
}
}
executor.shutdown();
Это работает, однако моя проблема заключается в том, когда вызываемый должен выполнить его call()
метод, вызываемый не может @Inject
других классов, то есть они null
. Это связано с тем, что вызываемый объект создается с помощью ключевого слова new
и теряет область действия DI.
Вопрос
Как создать вызываемый элемент, чтобы он еще мог выполнять Внедрение зависимостей?
Дополнительная информация:
Вот вызываемый класс (введенный TripAutoApprovalEscalationService
равен null
):
public class CallableTripAutoApprovalEscalation implements Callable<Long> {
public CallableTripAutoApprovalEscalation() {}
public static Logger logger = Logger.getLogger(CallableTripAutoApprovalEscalation.class.getName());
@Inject
private TripAutoApprovalEscalationService tripAutoApprovalEscalation;
private Long tripId;
public CallableTripAutoApprovalEscalation(Long tripId) {
this.tripId = tripId;
}
@Override
public Long call() throws Exception {
logger.info("Execute trip for callable: "+tripId);
return tripAutoApprovalEscalation.performEscalation(tripId);
}
}