Seam Interceptor and EntityManager. How do I get the both to play nice with each other?
seanbizzo May 26, 2009 8:30 PMWe are having a problem using an Interceptor and EntityManager to persist an @Entity.
We are able to reference the entityManager
using Component.getInstance(entityManager
) and the object we get back is not null, and isOpen() returns true yet we get an Unknown Entity
stack when trying to persist.
Thanks for any help you can give. We really would like to persist data to the database from an Interceptor using the Seam managed entityManager if possible. Any solutions or workarounds gladly accepted
@Interceptor(around = {
BijectionInterceptor.class,
MethodContextInterceptor.class,
ConversationInterceptor.class,
SynchronizationInterceptor.class,
ConversationalInterceptor.class,
RemoveInterceptor.class,
SeamInterceptor.class,
SecurityInterceptor.class,
TransactionInterceptor.class,
EventInterceptor.class,
HibernateSessionProxyInterceptor.class,
ManagedEntityIdentityInterceptor.class
})
public class AuthenticationInterceptor {
@AroundInvoke
public Object authenticationLogging(InvocationContext invocation) throws Exception {
try {
return invocation.proceed();
} finally {
record();
}
}
private void record() {
EntityManager em = (EntityManager)Component.getInstance("entityManager");
try {
em.persist(new Audit());
em.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Retention(RetentionPolicy.RUNTIME)
@Interceptors(AuthenticationInterceptor.class)
public @interface AuthLogger {}
@Name("authenticator")
@Scope(ScopeType.SESSION)
@AuthLogger
public class Authenticator {
.....
}
[Entity] @Entity @Table(name="t_audit") public class Audit { private Long id; @Id @SequenceGenerator(name = "SEQ_GEN", sequenceName = "s_audit") @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_GEN") public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
11:13:25,785 ERROR [STDERR] java.lang.IllegalArgumentException: Unknown entity: x.xxxx.xxxx.entity.Audit
11:13:25,785 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:215)
11:13:25,785 ERROR [STDERR] at org.jboss.seam.persistence.EntityManagerProxy.persist(EntityManagerProxy.java:135)
11:13:25,785 ERROR [STDERR] at org.hibernate.search.jpa.impl.FullTextEntityManagerImpl.persist(FullTextEntityManagerImpl.java:82)
11:13:25,785 ERROR [STDERR] at org.jboss.seam.persistence.EntityManagerProxy.persist(EntityManagerProxy.java:135)
11:13:25,785 ERROR [STDERR] at x.xxx.xxx.intercept.AuthenticationInterceptor.record(AuthenticationInterceptor.java:110)
11:13:25,785 ERROR [STDERR] at x.xxx.xxx.intercept.AuthenticationInterceptor.authenticationLogging(AuthenticationInterceptor.java:86)
11:13:25,785 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
11:13:25,785 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
11:13:25,785 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
11:13:25,785 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.util.Reflections.invoke(Reflections.java:21)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.intercept.Interceptor.aroundInvoke(Interceptor.java:177)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:72)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:31)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.bpm.BusinessProcessInterceptor.aroundInvoke(BusinessProcessInterceptor.java:49)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke(SynchronizationInterceptor.java:32)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:166)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:102)
11:13:25,786 ERROR [STDERR] at x.xxx.xxx.auth.Authenticator_$$_javassist_17.authenticate(Authenticator_$$_javassist_17.java)
11:13:25,786 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
11:13:25,786 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
11:13:25,786 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
11:13:25,786 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
11:13:25,786 ERROR [STDERR] at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329)
11:13:25,786 ERROR [STDERR] at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:342)
11:13:25,786 ERROR [STDERR] at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58)
11:13:25,786 ERROR [STDERR] at org.jboss.el.parser.AstValue.invoke(AstValue.java:96)
11:13:25,786 ERROR [STDERR] at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:173)
11:13:25,786 ERROR [STDERR] at org.jboss.seam.security.jaas.SeamLoginModule.login(SeamLoginModule.java:108)
11:13:25,786 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
11:13:25,787 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
11:13:25,787 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
11:13:25,787 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
11:13:25,787 ERROR [STDERR] at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
11:13:25,787 ERROR [STDERR] at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
11:13:25,787 ERROR [STDERR] at javax.security.auth.login.LoginContext$5.run(LoginContext.java:706)
11:13:25,787 ERROR [STDERR] at java.security.AccessController.doPrivileged(Native Method)
11:13:25,787 ERROR [STDERR] at javax.security.auth.login.LoginContext.invokeCreatorPriv(LoginContext.java:703)
11:13:25,787 ERROR [STDERR] at javax.security.auth.login.LoginContext.login(LoginContext.java:575)
11:13:25,787 ERROR [STDERR] at org.jboss.seam.security.Identity.authenticate(Identity.java:254)
11:13:25,787 ERROR [STDERR] at org.jboss.seam.security.Identity.authenticate(Identity.java:243)
11:13:25,787 ERROR [STDERR] at org.jboss.seam.security.Identity.login(Identity.java:200)
11:13:25,787 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
11:13:25,787 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
11:13:25,787 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
11:13:25,787 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:585)
11:13:25,787 ERROR [STDERR] at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329)
11:13:25,787 ERROR [STDERR] at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:342)
11:13:25,787 ERROR [STDERR] at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58)
11:13:25,787 ERROR [STDERR] at org.jboss.el.parser.AstValue.invoke(AstValue.java:96)
11:13:25,787 ERROR [STDERR] at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
11:13:25,787 ERROR [STDERR] at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
11:13:25,787 ERROR [STDERR] at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
11:13:25,787 ERROR [STDERR] at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
11:13:25,787 ERROR [STDERR] at javax.faces.component.UICommand.broadcast(UICommand.java:383)
11:13:25,787 ERROR [STDERR] at org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
11:13:25,788 ERROR [STDERR] at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
11:13:25,788 ERROR [STDERR] at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
11:13:25,788 ERROR [STDERR] at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
11:13:25,788 ERROR [STDERR] at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
11:13:25,788 ERROR [STDERR] at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
11:13:25,788 ERROR [STDERR] at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
11:13:25,788 ERROR [STDERR] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
11:13:25,788 ERROR [STDERR] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
11:13:25,788 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
11:13:25,788 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
11:13:25,788 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:532)
11:13:25,788 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
11:13:25,788 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
11:13:25,788 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
11:13:25,788 ERROR [STDERR] at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
11:13:25,788 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
11:13:25,788 ERROR [STDERR] at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
11:13:25,788 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
11:13:25,788 ERROR [STDERR] at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
11:13:25,788 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
11:13:25,788 ERROR [STDERR] at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
11:13:25,788 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
11:13:25,788 ERROR [STDERR] at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
11:13:25,788 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
11:13:25,788 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
11:13:25,788 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
11:13:25,789 ERROR [STDERR] at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
11:13:25,789 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
11:13:25,789 ERROR [STDERR] at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
11:13:25,789 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
11:13:25,789 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
11:13:25,789 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
11:13:25,789 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
11:13:25,789 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
11:13:25,789 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
11:13:25,789 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
11:13:25,789 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
11:13:25,789 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
11:13:25,789 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
11:13:25,789 ERROR [STDERR] at java.lang.Thread.run(Thread.java:613)
Again, thanks for any help on this. Without this working I'm having to look at auditing alternatives like enverse or hibernate events (both very viable) but our preference would be to persist data via the interceptor.
Regards,
Sean