2016-04-01 37 views
1

Bir avcı bağlama arayüzü ile bir günlükçü önleme tanımlamak çalışıyorum:post yapım yöntemleri için @Target ({METOD, TYPE)) ile interceptor ciltleme arabirimini kullanamaz mı?

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

    @Nonbinding 
    public String operationName() default ""; 
    @Nonbinding 
    public String details() default ""; 
} 

ama glassfish 4.1 getiri derlemesinde bu hata iletisi: yaşam döngüsü geri aramaları keseni [sınıf com için

bir avcı. adldoost.dwm.security.interceptor.OperationLoggerInterceptor , @OperationLogger] 'ı kestirir ve kesişme önleyici arabirimi com.adldoost.dwm.security.interceptorbinding.OperationLogger , METHOD ile birlikte @Targ ve.

da 8.1 düzenleyici anlatır NetBeans'i: yaşam döngüsü geri aramalar için

bir önleme sadece @Target (TYPE) olarak tanımlanır önleme bağlayıcı tipleri ilan edebilir. Interceptor com.adldoost.dwm.security.interceptor.OperationLoggerInterceptor , uyumsuzluk önleyici bağlayıcısını com.adldoost.dwm.security.interceptorbinding.OperationLogger olarak bildirir.

Peki benim hatam nedir?

cevap

0

Böyle bir yaşam döngüsü geri arama yöntemi yolunu kesmek için çalışıyoruz:

@Stateless 
public class MrBean { 

    @PostConstruct 
    @OperationLogger 
    private void init() { 
     // ... 
    } 

} 

Ya da sadece

@Stateless 
@OperationLogger 
public class MrBean { 
    @PostConstruct 
    // ... 
} 

Sen METHOD ile bağlanan bir önleme kullanarak (@PreDestroy dahil) yaşam döngüsü geri aramalar müdahale edemez hedef olarak. OperationLogger hedefini sadece @Target(TYPE) yapın veya tüm ders notunu içeren yaşam döngüsü geri aramalarına açıklama eklemeyin.

+0

Hedefim şu şekilde ayarlandı: @Target ({METOD, TYPE}) sadece yöntem değil! sadece TYPE olarak değiştirmem gerekiyor mu? –

+0

Dediğim gibi, sadece @ @ Taretle (TYPE) ile bağlayıcınıza not ekleyin veya sınıfınıza "OperationLogger" eklemeyin ve yaşam döngüsü geri çağırma yöntemleri. – andrepnh