2012-08-13 2 views
2

Наше приложение запускает серию потоков через @Asynchronous annotation на EJB. Однако JBoss (с точностью до this) не ограничивает количество запущенных потоков. Отладка показывает, что он использует класс по умолчанию, а не тот, который настроен в XML, связанном в проблеме выше. Комментарий по классу говорит:JBoss 6.1 не ограничивает количество потоков, которые он запускает с помощью @Asynchronous

Static singleton access to a default java.util.concurrent.ExecutorService 
implementation used by clients who do not supply a 
org.jboss.ejb3.async.spi.AsyncInvocation to handle asynchronous 
EJB 3.1 invocations. 

Таким образом, вопрос, при каких обстоятельствах это JBoss не поставляя org.jboss.ejb3.async.spi.AsyncInvocation класс и как вы можете гарантировать, что это произойдет?

ответ

1

JBoss AS 6.1 действительно должен ограничивать количество потоков по умолчанию, но из-за ошибки это просто не происходит. Глобальные настройки печально игнорируются без предупреждения.

Если это не касается слишком много бобов, вы можете использовать org.jboss.ejb3.annotation.Pool аннотацию:

@Pool(value = POOL_IMPLEMENTATION_STRICTMAX, maxSize = 10) 
public class SomeBean { 
    // ... 
} 

Будьте осторожны, если я не ошибаюсь, это создаст пул каждого компонента.

+0

Спасибо Arjan. Знаете ли вы, что эта ошибка документирована где угодно? Я не мог найти его. – Yishai

+0

Я не уверен, что где-то его документировано. JBoss AS 6.0 завершился очень скоро после его выпуска. Сообществу пришлось много кричать, чтобы получить 6.1, так что ошибки в 6.1 не получили большого внимания. –