Eu tenho um MDB do qual, que por motivos que não vem ao acaso, não me interessa ter mais de uma instância em cada nó de um cluster JBoss. Ou seja, preciso de alguma maneira de dizer ao servidor que não quero mais que uma instância no pool de instâncias de cada deployment no cluster. Tudo blz, mas configuração do pool de instâncias de EJB é dependente de implementação e portanto não é padronizado, o que nos força a usar recursos proprietários do app-server que estivermos usando.
A maneira programática de fazer no jboss é
@PoolClass (value=“org.jboss.ejb3.StrictMaxPool”, maxSize = 1, timeout=9999999)
Ou seja, como o que eu quero é uma configuração eu emporcalho o meu MDB com um import de uma classe concreta e ainda por cima do JBoss. O que mostra o quanto a idéia de configuração programática pode ser perigosa e contra-producente em algumas situações.
Já usando o descritor jboss, meu bean fica limpinho, eu configuro ele numa boa e todos ficam felizes. Se eu tiver que deployar no Weblogic é colocar mais um descritor e tudo continua ok.
<?xml version="1.0" encoding="UTF-8"?>
<javaee:jboss version="3.0" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ../../schemas/jboss_5_0.xsd ">
<javaee:enterprise-beans>
<javaee:message-driven>
<javaee:ejb-name>JobExecutorBean</javaee:ejb-name>
<javaee:pool-config>
<javaee:pool-class>org.jboss.ejb3.StrictMaxPool</javaee:pool-class>
<javaee:pool-max-size>1</javaee:pool-max-size>
<javaee:pool-timeout>99999999</javaee:pool-timeout>
</javaee:pool-config>
</javaee:message-driven>
</javaee:enterprise-beans>
</javaee:jboss>
Fica claro que a solução baseada em um descritor externo é mais clara e limpa. Pode-se até discutir que XML é verboso, mas para quem usa eclipse ou IntelliJ o recurso de code completion funciona perfeitamente. E uma coisa é o uso de XML, outra é o uso de descritores externos, nada impediria que usássemos YAML como linguagem dos descritores. Da mesma maneira, o relacionamento hierárquico das propriedades de configuração fica óbvio em um XML ou YAML, coisa que não acontece com uma lista de statements no meio do código java.