2012-02-17 3 views
0

Bean 아카이브 항아리에있는 클래스의 관찰자 메소드 2 개 (더 구체적으로 Seam 3 Faces 모듈의 LoginListener)를 사용하지 않으려하고 대신 광산을 사용하려고합니다. 내가 그 클래스있어 my-beans.jar에서@Alternative를 사용하여 웹 애플리케이션에서 구체적인 클래스를 확장하는 방법은 무엇입니까?

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

: my-beans.jar/META-INF/beans.xml에 다음

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

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

, 나는 그것을 활성화 : 콩이의 보관과

나는, 웹 프로젝트가

<?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> 

그리고 동일한 내용이 app.war/WEB-INF/beans.xml입니다.

여기 왜 나는 이해하지 못합니다. 그러나 여전히 원래의 것입니다. LoginListenerobservePostLoginEvent(@Observes PostLoginEvent event)observePreLoginEvent ... 왜 누군가는 알고 있습니까?

답변

1

클래스에 @Specializes (@Alternative @Specializes) 주석을 추가하려고 했습니까? Weld Reference에 따르면이 방법을 사용하면 다른 bean을 (생산자와 관찰자와 함께) 완전히 "숨길"수 있습니다.

+0

좋은 힌트. 나는 그것을 시도했는데 결과는 다음과 같다. '18 : 56 : 42,724 ERROR [org.jboss.msc.service.fail] (MSC 서비스 스레드 1-14) MSC00001 : 서비스 jboss.deployment.unit을 시작하지 못했습니다. "app .war ".WeldService : 서비스 jboss.deployment.unit의 org.jboss.msc.service.StartException"app.war ".WeldService : org.jboss.weld.exceptions.DefinitionException : WELD-000047 Bean을 특수화하려면 다른 Bean을 확장해야합니다 : beans.xml 파일의''를 모두 제거하더라도 ... 한정자를 사용하여 Managed Bean [클래스 com.mycompagny.MyLoginListener]을 ... –

+0

실제로 JBoss 인 것 같습니다. 7.0.2.Final 버그 JBoss 7.1.0.Final에 예외가 없기 때문에 (나는 다른 이상한 예외가 있지만 대신 Faces와 연결되어 있습니다 ...) –

관련 문제