मेरा जावा ईई 6 एप्लिकेशन कान युद्ध में पैक किया गया एक युद्ध और एक ईजेबी मॉड्यूल शामिल है। मैं DI के लिए सीडीआई का उपयोग कर रहा हूं (यानी मेरे पास दोनों मॉड्यूल में beans.xml फ़ाइल है)। मैं एक लॉगिंग इंटरसेप्टर का उपयोग करना चाहता हूं जिसे युद्ध मॉड्यूल में ईजेबी मॉड्यूल में भी परिभाषित किया गया है। मैं EJB के beans.xml में इंटरसेप्टर सक्रिय कर दिया है:सीडीआई: विभिन्न मॉड्यूल/बीन अभिलेखागारों में इंटरसेप्टर्स का उपयोग
<beans>
<interceptors>
<class>com.test.interceptor.LoggingInterceptor</class>
</interceptors>
</beans>
यह कक्षाएं कि EJB मॉड्यूल में इंटरसेप्टर से एनोटेट के लिए ही काम कर रहा है। युद्ध मॉड्यूल में कक्षाओं को अवरुद्ध नहीं किया जाता है (हालांकि वे भी इंटरसेप्टर के साथ एनोटेटेड हैं)। मैंने सोचा कि समाधान युद्ध के इंटरसेप्टर में इंटरसेप्टर को सक्षम करना होगा, साथ ही (ऊपर की तरह)।
गंभीर:: लेकिन आवेदन निम्न संदेश के साथ तैनात नहीं किया जा सकता अपवाद जबकि एप्लिकेशन को लोड करने: वेल्ड-001,417 सक्षम इंटरसेप्टर वर्ग वर्ग com.test.interceptor.LoggingInterceptor न टिप्पणी की जाती है और न ही @Interceptor एक पोर्टेबल विस्तार के माध्यम से पंजीकृत
मेरे LoggingInterceptor इस तरह दिखता है:
@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)});
}
}
}
और इंटरसेप्टर बाध्यकारी:
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Log {}
मैं दोनों मॉड्यूल के लिए इंटरसेप्टर का उपयोग कैसे कर सकता हूं?
क्या आपको इस समस्या का समाधान मिला है? यह देखना दिलचस्प होगा। – mik
@ मिल्क नंबर, मैंने नहीं किया है। मैंने एक मॉड्यूल मॉड्यूल में सभी मॉड्यूल को समेकित किया, जो जावा ईई 6. – Theo
वाह के बाद से संभव है, इसे स्पष्ट रूप से बाहर रखने के लिए धन्यवाद। मुझे एक ही समस्या थी और इसे एक मॉड्यूल में हल करने के लिए इसे हल किया गया था। कभी-कभी जे 2 ईई बस चीजों को कड़ी मेहनत करने की कोशिश करता है ... – JoshC13