Port MBean do JBoss 4.x para o JBoss 7
o momento, estamos no processo de transferir alguns de nossos projetos do JBoss 4.x para o JBoss 7. Até agora, tudo parece funcionar bem, exceto nossos MBeans, que normalmente usamos para fornecer operações simples de gerenciament
Estou pesquisando há um bom tempo, mas sou incapaz de começar com o termo de pesquisa correto ou estou perdendo algum conhecimento para preencher a lacuna entre a definição de MBean no JBoss 4.xe JBoss 7 .
ssim, espero que alguém possa fornecer uma dica sobre o que eu posso estar perdendo ou onde eu teria que ler (talvez alguma documentação, exemplos etc
No Jboss 4.x, nossos MBeans costumam ter esta aparência:
@Service( objectName = "Domain:Name=SomeMBean",
xmbean="resource:<path-to-xmbean.xml>")
class SomeMBean
{
@EJB
private SomeService someService;
public String someOperation()
{
someService.doSomething();
return "success";
}
}
Usamos o@Service
notação para definir o nome do objeto e o descritor xmbean, e o JBoss registraria automaticamente esses mbean
Aparentemente, no JBoss 7, o@Service
anotação @ não existe mais e, portanto, é necessária outra abordage
Até agora, consegui registrar o MBean manualmente no servidor mbean da plataforma, mas gostaria que o JBoss fizesse isso automaticamente. Além disso, até agora não consegui fornecer descrições para os métodos / parâmetros (embora esses sejam mais interessantes de se ter
Vou repetir a pergunta para maior clareza:
Como eu definiria um MBean no JBoss 7 (Java EE 6) que fornece os seguintes recurso
implantação automática acesso aos EJBs acessível através do JConsole ou JMX-Console (atualmente estou usando a porta de Dimitris Andreadis)ornecer descrições para métodos / parâmetrosAtualiza
Aqui está o que eu tenho até agora:
Em primeiro lugar, encontrei esta projeção, que usa CDI para envolver o alvo de injeção de qualquer bean anotado de acordo e faz o registro JMX nopostConstruct()
método:http: //code.google.com/p/jmx-annotations. Além disso, os MBeans encontrados são varridos para anotações de classe / atributo / método / parâmetro que fornecem uma descrição para a propriedade anotad
No entanto, opostConstruct()
método @ parece não ser chamado para EJBs (suponho que seja para não colidir com o contêiner EJB). Portanto, os MBeans agora não devem ser EJBs, mas beans CDI simple
, No entanto, tem a desvantagem de que os MBeans não são instanciados automaticamente. Para superar isso, existe um bean singleton que, na inicialização, percorre todos os beans noBeanManager
e cria uma instância de todos os MBean encontrados. Como os MBeans ainda têm seu alvo de injeção, seupostConstruct()
método @ não será chamado e o bean será registrado no servidor MBea
Aqui está uma visão geral do procedimento de inicialização:
uma extensão CDI personalizada varre cada bean CDI para a anotação @MBean personalizada para cada MBean elegível, o destino da injeção é agrupadoerá iniciado um bean singleton que, no método @PostConstruct, criará instâncias do MBeansapostConstruct()
método @ do destino da injeção do MBean será chamado e, portanto, o MBean será registrado no servidor MBeanUma desvantagem desse método seria o contexto de transação ausente ao executar métodos MBean (todas as chamadas EJB serão executadas em um contexto de transação). No entanto, isso pode ser corrigido usando um interceptor CDI que fornecerá o contexto da transação, se necessário. O projeto Seam parece ter interceptores apropriados para iss
Ainda não tenho certeza se essa é uma abordagem sensata e estável, portanto quaisquer comentários construtivos, dicas etc. são mais que bem-vindo