Wie verwende ich @Alternative, um eine konkrete Klasse in einer Webanwendung zu erweitern?

StackOverflow https://stackoverflow.com/questions/9332311

  •  27-10-2019
  •  | 
  •  

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?

War es hilfreich?

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"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top