Перенос MBean с JBoss 4.x на JBoss 7

в настоящее время мы находимся в процессе переноса некоторых наших проектов с 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), который предоставляет следующие функции?

  • автоматическое развертывание
  • доступ к EJB
  • доступно через JConsole или JMX-Console (в настоящее время я использую порт Димитриса Андредиса)
  • предоставляют описания методов / параметров

Обновление

Вот что я получил на данный момент:

Во-первых, я нашел эту проекцию, который использует 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.

Вот приблизительный обзор процедуры запуска:

  • пользовательское расширение CDI сканирует каждый компонент CDI на предмет пользовательской аннотации @MBean
  • для каждого понятного MBean-компонента, в который заключена цель внедрения
  • будет запущен одноэлементный bean-компонент который в своем методе @PostConstruct будет создавать экземпляры компонентов MBean
  • , будет вызываться метод postConstruct () целевого объекта внедрения MBean, и, таким образом, MBean регистрируется на сервере MBean

. этот метод будет отсутствующим контекстом транзакции при выполнении методов MBean (любые вызовы EJB будут выполняться в контексте транзакции). Однако это можно исправить с помощью перехватчика CDI, который при необходимости предоставит контекст транзакции. В проекте Seam, похоже, есть для этого подходящие перехватчики.

Я все еще не уверен, что это разумный и стабильный подход, поэтому любые конструктивные комментарии, подсказки и т. Д. Более чем приветствуются.

13
задан Arjan Tijms 23 July 2013 в 21:05
поделиться