Pergunta

Estou tentando desabilitar 2 métodos de observador de uma classe que está em um jar de arquivo de feijão (mais especificamente, a classe LoginListener do módulo Seam 3 Faces) e usar minas em seu lugar.

Eu tenho um projeto da web, com um arquivo de beans nele:

app.war
\- WEB-INF
  \- lib
    \- seam-faces-3.1.0.Final.jar
    |- my-beans.jar

Em my-beans.jar, tenho essa classe:

@Alternative
public class MyLoginListener extends LoginListener {
    @Override
    public void observePostLoginEvent(final PostLoginEvent event) {
    }

    @Override
    public void observePreLoginEvent(final PreLoginEvent event) {
    }
}

Então, em my-beans.jar/META-INF/beans.xml eu o ativo:

<?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"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
    <alternatives>
        <class>com.mycompagny.MyLoginListener</class>
    </alternatives>
</beans>

E o mesmo conteúdo em app.war/WEB-INF/beans.xml.

Não entendo o porquê, mas ainda é o LoginListener original observePostLoginEvent(@Observes PostLoginEvent event) e observePreLoginEvent que são chamados ... alguém sabe por quê?

Foi útil?

Solução

Você tentou fazer anotações em sua classe também com @Specializes (@Alternative @Specializes)? De acordo com a Referência do Weld desta formavocê pode "ocultar" completamente o outro bean (com seus produtores e observadores)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top