Injected SLSB not getting interceptors sometimes
stu2 Apr 4, 2007 5:27 PMI'm running Seam 1.2.1, and these symptoms appear in SeamTest.
I have SLSB A which is injected via @In with SLSB B. A seems to have all appropriate interceptors, and @Logger injection works fine. A calls B. B blows up upon writing to the log because the log is never initialized. I've tried having B declare @Logger Log log explicitly and (in the example I'll post here) by extending EntityController.
Here's relevant bits of A:
@Name("ingestService") @Stateless @AutoCreate public class IngestServiceImpl implements IngestService { @Logger static Log log; @In CsvIngest ingestUtil; .... (in a method) ingestResult = ingestUtil.ingest(feedFile, feedDefinition, previousFeedItems);
B will throw NullPointerException when it tries to log. What I found odd is that A has all indications of receiving the interceptors, which do the injection. B looks like a direct invocation (no sign of interceptors). And I can's see a meaningful difference between A and B - so I'm stuck.
Anyway, here's the relevant bits from B:
@Stateless @Name("ingestUtil") @AutoCreate public class CsvIngestUtil extends EntityController implements CsvIngest { ... below from the throwing method - last line is 135 referenced from stacktrace item.setFeedItemStatus(FeedItemStatus.INSERT_REQUESTED); // I put this here to test if the em was injected - it is because the assert doesn't throw assert getEntityManager() != null : "null entity manager!"; System.out.println("EntityManager is not null. [" + getEntityManager().getClass().getName() + "]"); debug("Scheduling item [" + item.getUniqueInternalCode() + "] for insert"); // throws here
The stacktrace showing the (to me) unexpected presence/absence of interceptors is:
aused by: java.lang.NullPointerException at org.jboss.seam.framework.Controller.debug(Controller.java:183) at com.fb.core.business.ingest.CsvIngestUtil.updateItemFromPreviousData(CsvIngestUtil.java:135) at com.fb.core.business.ingest.CsvIngestUtil.ingest(CsvIngestUtil.java:85) at com.fb.core.business.IngestServiceImpl.processFeedImportNoPersistance(IngestServiceImpl.java:76) at com.fb.core.business.IngestServiceImpl.processFeedImport(IngestServiceImpl.java:52) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:109) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166) at org.jboss.seam.intercept.EJBInvocationContext.proceed(EJBInvocationContext.java:37) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:57) at org.jboss.seam.interceptors.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:47) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69) at org.jboss.seam.interceptors.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:27) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:103) at org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:53) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
Any idea what I'm doing wrong here? Any more info I could provide if not?
I confess I'm a bit confused by when I should expect interception. I'm using SLSB more often than I would otherwise because I want @Logger and other interceptor services to work, but I realize this is because I don't understand enough yet.
Thanks,
Stu