SeamFramework.orgCommunity Documentation
Weld permite que você evite que classes em seu arquivo sejam escaneadas, que acionem eventos de ciclo de vida, e que sejam implantadas como beans.
Neste tutorial iremos explorar essa funcionalidade através de um exemplo, uma especificação mais formal pode ser encontrada no xsd: http://jboss.org/schema/weld/beans_1_1.xsd
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:weld="http://jboss.org/schema/weld/beans"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">
<weld:scan>
<!-- Don't deploy the classes for the swing app! -->
<weld:exclude name="com.acme.swing.**" />
<!-- Don't include GWT support if GWT is not installed -->
<weld:exclude name="com.acme.gwt.**">
<weld:if-class-available name="!com.google.GWT"/>
</weld:exclude>
<!--
Exclude classes which end in Blether if the system property verbosity is set to low
i.e.
java ... -Dverbosity=low
-->
<weld:exclude pattern="^(.*)Blether$">
<weld:if-system-property name="verbosity" value="low"/>
</weld:exclude>
<!--
Don't include JSF support if Wicket classes are present, and the viewlayer system
property is not set
-->
<weld:exclude name="com.acme.jsf.**">
<weld:if-class-available name="org.apahce.wicket.Wicket"/>
<weld:if-system-property name="!viewlayer"/>
</weld:exclude>
</weld:scan>
</beans
>
Neste exemplo iremos mostrar o mais comum dos casos quando é preciso ter um maior controle de quais classes o Weld irá scanear. O primeiro filtro exclui todas as classes pertencentes a package com.acme.swing
, e na maioria dos casos isso já será o suficiente para as suas necessidades.
Entretanto, as vezes é útil ser capas de ativar filtros dependendo do ambiente utilizado. Neste caso, Weld permite que você ative (ou desative) um filtro baseado em se tanto propriedades do sistema ou classes estão presente. O segundo filtro mostra o caso quando o escaneamento de certas classes é desativado dependendo do ambiente em que o sistema é implantado – neste caso estamos excluindo suporte ao GWT se o GWT não esta instalado.
Repare que usamos !
no atributo name
para inverter a condição de ativação do filtro. Você pode inverter qualquer condição de ativação deste modo.
O terceiro filtro usa uma expressão regular para selecionar as classes (normalmente utilizamos padrões simples baseados em nomes, eles não requerem que determinemos o ponto que delimita a hierarquia de pacotes).
Se você especificar somente o nome da propriedade do sistema, o Weld irá ativar o filtro se a propriedade tiver sido configurada (com qualquer valor). Se você também especificar o valor da propriedade do sistema, então o Weld irá ativar o filtro somente se o valor da propriedade corresponde exatamente com o valor dado a propriedade
O quarto filtro mostra uma configuração mais avançada, onde usamos múltiplas condições para decidir se filtro vai ser ativado ou não.
Você pode combinar quantas condições quiser (todas necessariamente tem que ser verdadeiras para o filtro ser ativado). Se você quiser que um filtro seja ativado se qualquer das condições seja verdadeira, você precisa de múltiplos filtros idênticos, cada um com condições de ativação diferentes.
No geral, a semântica definida pelas patterns sets do Ant (http://ant.apache.org/manual/dirtasks.html#patternset) são seguidas.