Como usar @Alternative estendendo uma classe concreta, em um webapp?
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ê?
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)