Ứng dụng Java EE 6 của tôi bao gồm một chiến tranh và một mô-đun ejb được đóng gói trong tập tin tai. Tôi đang sử dụng CDI cho DI (nghĩa là tôi có tệp bean.xml trong cả hai mô-đun). Tôi cũng muốn sử dụng bộ chặn ghi log được định nghĩa trong mô-đun ejb trong mô-đun chiến tranh. Tôi đã kích hoạt các đánh chặn ở beans.xml của ejb:CDI: Sử dụng Bộ chặn qua các mô-đun khác nhau/lưu trữ đậu
<beans>
<interceptors>
<class>com.test.interceptor.LoggingInterceptor</class>
</interceptors>
</beans>
này chỉ đang làm việc cho các lớp được chú thích với các đánh chặn trong module ejb. Các lớp trong mô-đun chiến tranh không bị chặn (mặc dù chúng được chú thích với bộ chặn). Tôi nghĩ rằng giải pháp sẽ là để kích hoạt kẻ đánh chặn trong máy bay đánh chặn của chiến tranh, cũng như (như trên). Tuy nhiên, ứng dụng không thể được triển khai với thông báo sau:
NGHIÊM TRỌNG: ngoại lệ khi tải ứng dụng: HÀN-001.417 Enabled chặn lớp lớp com.test.interceptor.LoggingInterceptor không phải là dự chú thích @Interceptor cũng không đăng ký thông qua một phần mở rộng di động
My LoggingInterceptor trông như thế này:
@Log
@Interceptor
public class LoggingInterceptor {
private static final Logger logger = Logger.getLogger(LoggingInterceptor.class.getName());
static {
logger.setLevel(Level.ALL);
}
@AroundInvoke
public Object logMethod(InvocationContext ctx) throws Exception {
logger.log(Level.FINE, "ENTRY {0} {1}",
new Object[]{ ctx.getTarget().getClass().getName(), ctx.getMethod().getName() });
long startTime = System.nanoTime();
try {
return ctx.proceed();
} finally {
long diffTime = System.nanoTime() - startTime;
logger.log(Level.FINE, "RETURN {0} {1}",
new Object[]{ ctx.getTarget().getClass().getName(), ctx.getMethod().getName() });
logger.log(Level.FINE, "{0} took {1} ms", new Object[]{ ctx.getMethod(),
TimeUnit.MILLISECONDS.convert(diffTime, TimeUnit.NANOSECONDS)});
}
}
}
Và đánh chặn ràng buộc:
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Log {}
Tôi có thể sử dụng bộ chặn cho cả hai mô-đun như thế nào?
Bạn đã tìm thấy giải pháp cho vấn đề này chưa? Thật thú vị khi thấy nó. – mik
@milk no, tôi không có. Tôi củng cố tất cả các mô-đun thành một mô-đun chiến tranh, có thể kể từ khi Java EE 6. – Theo
wow, cảm ơn vì đã đặt ra điều này một cách rõ ràng. Tôi đã có cùng một vấn đề chính xác và hợp nhất tất cả nó thành một mô-đun đã giải quyết nó. Đôi khi J2EE chỉ cố gắng làm cho mọi thứ trở nên khó khăn trên ya ... – JoshC13