2009-08-05 4 views
0

에 다시 한 번 추가합니다. 여기에서 이음선 주제에 대한 도움을 요청합니다. 현재세션 객체를 Seam 인터셉터

우리는 내가 감사

@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
@Interceptors(LoggingInterceptor.class) 
public @interface IAuditavel { 

} 

에 대해 다음 인터셉터 및 인터셉터 자체

private EntityManager em; 

    @Logger 
    private Log logger; 

    @In(required = false) 
    Usuario usuario; 

    @AroundInvoke 
    public Object aroundInvoke(InvocationContext ctx) throws Exception { 
     if (ctx.getMethod().isAnnotationPresent(IAuditavel.class) || isInterceptorEnabled()) { 
      // Inicializa o EM fora do escopo do SEAM 
      em = (EntityManager) Component.getInstance("entityManager"); 

      // Entidade para logging 
      LogEntidade entidade = new LogEntidade(); 

      // Chave 0 
      entidade.setIdLog(new BigDecimal(0)); 

      // Metodo chamado 
      entidade.setAcao(ctx.getTarget().getClass().getSimpleName() + "." + ctx.getMethod().getName()); 

      // Usuario logado no momento 
      entidade.setUsuario(usuario); 

      // Parametros 
      Object[] params = ctx.getParameters(); 
      StringBuilder sb = new StringBuilder(""); 

      for (Object o : params){ 
       sb.append(o + ", "); 
      } 

      // Data da execução 
      entidade.setDataAlteracao(new Date()); 

      // Salva e desconecta a entidade 
      em.persist(entidade); 
      em.flush(); 

      // Põe os valores da entidade no log do jboss 
      saveToServerLog(entidade); 
     } 

     // Continua a execução do método interceptado 
     return ctx.proceed(); 
    } 

    /*** 
    * Retorna true caso a classe/método seja anotada com o nosso interceptor 
    */ 
    public boolean isInterceptorEnabled() { 
     return getComponent().beanClassHasAnnotation(IAuditavel.class); 
    } 

    public void saveToServerLog(LogEntidade entidade) { 
     if (logger.isInfoEnabled()) { 
      logger.info("> " + entidade.getDataAlteracao() + ":" 
        + entidade.getAcao() + " com os parametros : " 
        + entidade.getParametros()); 
     } 
    } 

을 추정 한

@In(required = false) 
    Usuario usuario; 
심 도메인이 없기 때문에

이 작동하지 않습니다 요격기에 들어가십시오. 그렇다면 로그인 메소드에 설정된 세션 속성을 인증 자 클래스의

@In(required = false) 
    @Out(scope = ScopeType.SESSION, required = false) 
    Usuario usuario; 

으로 삽입하려면 어떻게해야합니까?

미리 감사드립니다.

답변

2

대답 필요했다 :

// Inicializa o EM fora do escopo do SEAM 
em = (EntityManager) Component.getInstance("entityManager"); 

// Recupera o usuário logado 
usuario = (Usuario) Contexts.getSessionContext().get("usuario"); 

모두

:

주입 떨어져