2012-06-12 5 views
2

다른 ejb-jar의 ejb-jar에서 주석 기반 인터셉터를 사용할 수 있습니까? @Logged 예제와 함께 시도했지만 그걸로 갇혀있다. 누군가 나를 도울 수 있습니까? core.jar를에서CDI - 라이브러리의 인터셉터 클래스 사용

:

@Inherited 
@InterceptorBinding 
@Retention(RUNTIME) 
@Target({METHOD, TYPE}) 
public @interface Logged {} 

@Logged 
@Interceptor 
public class LoggedInterceptor implements Serializable { 

    private static final long serialVersionUID = 1L; 

    public LoggedInterceptor() { 
    } 

    @AroundInvoke 
    public Object logMethodEntry(InvocationContext invocationContext) 
      throws Exception { 
     System.out.println("Entering method: " 
      + invocationContext.getMethod().getName() + " in class " 
      + invocationContext.getMethod().getDeclaringClass().getName()); 

     return invocationContext.proceed(); 
    } 
} 

질문입니다 : 방법 (엔터프라이즈 응용 프로그램 내) 다른 EJB-항아리에서이 인터셉터를 사용하는? 예를 들면 :

module1.jar : 나는 < 인터셉터> < 클래스를 넣어 시도했습니다

public class ModuleClass{ 
    @Logged public void doSomething(){...} 
} 

..... 콩에 방법이 다른 모듈에서 찾을 수 있습니다 비즈니스 메소드 호출을 로깅 . xml도 있지만, 나를 위해 작동하지 않습니다.

어떤 조언을 주셔서 감사합니다! 내가 보스에 꽤 바이올린을 리콜에도 불구하고 확실히 작동합니다

답변

2

, 6

당신은 그것을 정의 년대 JAR의 beans.xml에서 인터셉터를 활성화해야합니다, 그리고 내가 거기 생각 는 EAR 배포에 대한 문제 였지만, 꽤 오래 전이었고 더 이상 소스 코드에 액세스 할 수 없었습니다.

두 JAR 모두에서 beans.xml의 활성화로 작동하지 않아야합니다. 인터셉터가 등록되어 있으면 BeanManager을 쿼리하십시오.

+0

감사합니다. 글래스 피쉬의 JIRA에서 발견 된 "기능"이며 v4에서만 수정됩니다 (v3.2는 건너 뜁니다). http://java.net/jira/browse/GLASSFISH-15119 – user1451106

+0

이 업데이트를 게시 주셔서 감사합니다. –

1

제 JBoss 7에서 제 logging interceptor과 똑같은 문제가 있었고 응용 프로그램에을 오버레이하여 으로 수정했습니다.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <overlays> 
        <overlay> 
         <groupId>com.github.t1</groupId> 
         <artifactId>logging-interceptor</artifactId> 
         <type>jar</type> 
         <targetPath>WEB-INF/classes</targetPath> 
        </overlay> 
       </overlays> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>com.github.t1</groupId> 
     <artifactId>logging-interceptor</artifactId> 
     <version>1.1</version> 
     <optional>true</optional> 
    </dependency> 
</dependencies> 

당신은 여전히 ​​응용 프로그램의 breans.xml에서 인터셉터를 활성화해야합니다.

좋지 않지만 작동합니다. Java EE 7에서는 인터셉터에 @Priority이라는 주석을 달아 활성화하지 않고도 작동합니다.

관련 문제