Configurando WildFly 10
Nos próximos tópicos, iremos conhecer como configurar cada componente Java EE do Wildfly e seus componentes de infraestrutura (como logging), mas antes de darmos início é necessário entendermos como eles foram desenvolvidos no Wildfly.
Diferente de versões anteriores, o Wildfly centralizou a configuração do servidor em um (no máximo dois em modo Domain) arquivo de configuração e que através dele é possível configurar qualquer coisa dentro do servidor. Na verdade, se considerarmos o que seria o Wildfly, ele é simplesmente uma espécie de Kernel do Wildly (conhecido como Wildfly Core) onde é possível adicionar funcionalidades a ele (permitindo assim a extensibilidade na sua arquitetura interna). Para suas funcionalidades foi introduzido os conceitos de extension e subsystem, que são os blocos lógicos para adicionar/remover das funcionalidades do servidor e sua configuração. Mas o que significa esses dois conceitos? Veremos em detalhes a seguir.
Extension
O Extension do Wildfly é a forma como o Wildfly Core pode reconhecer novas funcionalidades e assim agregar ao seu funcionamento principal. Basicamente, a função do extension é registrar uma funcionalidade para o Wildfly Core carregar em memória e também gerenciar o ciclo de vida dela. Por exemplo, as extensions listadas no perfil padrão (standalone.xml) são as seguintes:
- org.jboss.as.clustering.infinispan
- org.jboss.as.connector
- org.jboss.as.deployment-scanner
- org.jboss.as.ee
- org.jboss.as.ejb3
- org.jboss.as.jaxrs
- org.jboss.as.jdr
- org.jboss.as.jmx
- org.jboss.as.jpa
- org.jboss.as.jsf
- org.jboss.as.logging
- org.jboss.as.mail
- org.jboss.as.naming
- org.jboss.as.pojo
- org.jboss.as.remoting
- org.jboss.as.sar
- org.jboss.as.security
- org.jboss.as.transactions
- org.jboss.as.webservices
- org.jboss.as.weld
- org.wildfly.extension.batch.jberet
- org.wildfly.extension.bean-validation
- org.wildfly.extension.io
- org.wildfly.extension.request-controller
- org.wildfly.extension.security.manager
- org.wildfly.extension.undertow
Subsystem
Subsystem nada mais é que a funcionalidade em si implementada e que é registrada no Wildfly Core pela Extenstion. Nela, é possível extender a funcionalidade através da configuração via xml. O Subsystem é onde realmente você terá o suporte a Servlets no Wildfly, EJB, Transações, Logging, etc. Como exemplo, abaixo temos a configuração do subsystem Logging:
<subsystem xmlns="urn:jboss:domain:logging:3.0">
<console-handler name="CONSOLE">
<level name="INFO"/>
<formatter>
<named-formatter name="COLOR-PATTERN"/>
</formatter>
</console-handler>
<periodic-rotating-file-handler name="FILE" autoflush="true">
<formatter>
<named-formatter name="PATTERN"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="server.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<logger category="com.arjuna">
<level name="WARN"/>
</logger>
<logger category="org.jboss.as.config">
<level name="DEBUG"/>
</logger>
<logger category="sun.rmi">
<level name="WARN"/>
</logger>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
<formatter name="PATTERN">
<pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
</formatter>
<formatter name="COLOR-PATTERN">
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
</formatter>
</subsystem>
Histórico de alterações
Uma das maiores funcionalidades no Wildfly é o registro histórico de configurações. Dessa forma, se houver qualquer alteração nos arquivos de configuração (seja ela editando manualmente o arquivo, via JBoss CLI ou Console Web), o Wildfly irá criar um backup das alterações. Isso permite que no caso de alguma alteração afetar negativamente o ambiente é possível reverter a alteração apenas copiando a última versão alterada.
A estrutura de histório está descrita no capítulo Diretórios. Para recuperar o arquivo, basta sobreesrcrever o atual com um dos snapshots que ficam dentro do diretório snapshots
(o snapshot é o nome do arquivo de configuração seguido da data e hora de alteração).
2. NIC = Network Interface Card, ou simplesmente Interface de Rede ↩
3. Definimos offset a soma a ser colocada no número da porta de cada Socket Binding definido no grupo. Ex. Se definir um offset de 150 e a porta definida para o Socket Binding http
é 8080, então o número da porta é 8230. ↩