Wie verwende ich @Alternative, um eine konkrete Klasse in einer Webanwendung zu erweitern?
Frage
Ich versuche, zwei Beobachtermethoden einer Klasse zu deaktivieren, die sich in einem Beans-Archiv befindet (genauer gesagt den LoginListener
der Klasse des Seam 3 Faces-Moduls), und verwende stattdessen Minen.
Ich habe ein Webprojekt mit einem Beans-Archiv:
app.war
\- WEB-INF
\- lib
\- seam-faces-3.1.0.Final.jar
|- my-beans.jar
In my-beans.jar
habe ich diese Klasse:
@Alternative
public class MyLoginListener extends LoginListener {
@Override
public void observePostLoginEvent(final PostLoginEvent event) {
}
@Override
public void observePreLoginEvent(final PreLoginEvent event) {
}
}
Dann aktiviere ich es im my-beans.jar/META-INF/beans.xml
:
<?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>
Und derselbe Inhalt im app.war/WEB-INF/beans.xml
.
Hier verstehe ich nicht warum, aber es ist immer noch der ursprüngliche LoginListener
observePostLoginEvent(@Observes PostLoginEvent event)
und observePreLoginEvent
, die aufgerufen werden ... weiß jemand warum?
Lösung
Haben Sie versucht, Ihre Klasse auch mit @Specializes (@Alternative @Specializes) zu kommentieren? Laut Schweißreferenz auf diese WeiseSie können die andere Bohne (mit ihren Produzenten und Beobachtern) vollständig "verstecken"