в настоящее время мы находимся в процессе переноса некоторых наших проектов с JBoss 4.x на JBoss 7. Пока что, похоже, все работает нормально, за исключением наших MBean-компонентов, которые мы обычно используем для обеспечения простых операций управления.
Я уже довольно давно занимаюсь поиском, но либо я не могу подобрать правильный термин для поиска, либо мне не хватает некоторых знаний, чтобы преодолеть разрыв между определением MBean в JBoss 4.x и JBoss 7.
Таким образом, мы надеемся, что кто-нибудь сможет подсказать, что мне может не хватать или где мне нужно прочитать (возможно, некоторую документацию, примеры и т. Д.)
В Jboss 4.x наши MBean-компоненты часто выглядят вот так:
@Service( objectName = "Domain:Name=SomeMBean",
xmbean="resource:")
class SomeMBean
{
@EJB
private SomeService someService;
public String someOperation()
{
someService.doSomething();
return "success";
}
}
Мы использовали аннотацию @Service
для определения имени объекта и дескриптора xmbean, и JBoss автоматически регистрировал эти mbeans.
По-видимому, в JBoss 7 аннотации @Service
больше не существует, и поэтому необходим другой подход.
До сих пор мне удавалось зарегистрировать MBean вручную на сервере mbean платформы, но я бы предпочел, чтобы JBoss делал это автоматически. Кроме того, мне до сих пор не удалось предоставить описания методов / параметров (хотя это более приятная функция).
Я повторю вопрос для ясности:
Как мне определить MBean в JBoss 7 (Java EE 6), который предоставляет следующие функции?
Обновление
Вот что я получил на данный момент:
Во-первых, я нашел эту проекцию, который использует CDI для обертывания цели инъекции любого bean-компонента, который соответствующим образом аннотирован, и выполняет регистрацию JMX в методе postConstruct ()
: http://code.google.com/p/jmx- аннотации / . Кроме того, найденные компоненты MBean сканируются на предмет аннотаций класса / атрибута / метода / параметра, которые предоставляют описание аннотированного свойства.
Однако метод postConstruct ()
, похоже, не вызывается для EJB (я предполагаю, что это сделано для того, чтобы не конфликтовать с контейнером EJB). Таким образом, MBean-компоненты теперь должны быть не EJB-компонентами, а простыми CDI-компонентами.
Таким образом, однако, есть недостаток, заключающийся в том, что компоненты MBean не создаются автоматически. Чтобы преодолеть это, существует одноэлементный bean-компонент, который при запуске перебирает все bean-компоненты в BeanManager
и создает экземпляр каждого найденного MBean-компонента. Поскольку у MBean-компонентов все еще есть цель внедрения, его метод postConstruct ()
не будет вызываться, и bean-компонент будет зарегистрирован на сервере MBean.
Вот приблизительный обзор процедуры запуска:
postConstruct ()
целевого объекта внедрения MBean, и, таким образом, MBean регистрируется на сервере MBean . этот метод будет отсутствующим контекстом транзакции при выполнении методов MBean (любые вызовы EJB будут выполняться в контексте транзакции). Однако это можно исправить с помощью перехватчика CDI, который при необходимости предоставит контекст транзакции. В проекте Seam, похоже, есть для этого подходящие перехватчики.
Я все еще не уверен, что это разумный и стабильный подход, поэтому любые конструктивные комментарии, подсказки и т. Д. Более чем приветствуются.