It does preclude reading them back. The DB based stats was bolted on to the existing portal event API with the goal of not modifying it at all (at the time I'm sure that goal was noble, or more likely driven by costs of doing a full bi directional implementation). The problem is that work never intended to read the raw stats back in using those same objects. Right now the only way to read raw stats data is with direct SQL.

-Eric

On 3/15/11 7:41 PM, Drew Wills wrote:
Hey devs --

I'm trying to prototype a auditing feature that would read one or two of the less-common (terribly uncommon?) portal events from the statsDb. The stats persistence uses hibernate, so I figured I could follow the established examples and best practices for using hibernate in the portal. But I'm encountering an unexpected form of obstacle -- I'm sensing that perhaps that the hibernate setup for stats precludes reading the entities back out of the database, which is a pity.

I'm getting "TransientObjectException" (stack trace posted at end). I'm not a hibernate guru, but my best guess is that the PortalEvent's relationship with the EventType class (pseudo-enum) is severed from the database-backed object, and hibernate refuses to give me back PortalEvents for that reason.

Can anyone give me some tips for working with persisted PortalEvents?

thanks,

drew

*****

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.jasig.portal.events.EventType org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
    org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
    org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:87)
org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38) org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
    org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
    org.hibernate.loader.Loader.doQuery(Loader.java:673)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    org.hibernate.loader.Loader.doList(Loader.java:2213)
    org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2136)
    org.hibernate.loader.Loader.list(Loader.java:2096)
    org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338) org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:65)
org.jasig.portal.events.handlers.db.JpaPortalEventStore.getPortalEvents(JpaPortalEventStore.java:159)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:54) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:77) org.jasig.portal.portlet.dao.jpa.ThreadContextClassLoaderAspect.doThreadContextClassLoaderUpdate(ThreadContextClassLoaderAspect.java:51)
    sun.reflect.GeneratedMethodAccessor111.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627) org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616) org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:64) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    $Proxy59.getPortalEvents(Unknown Source)
org.jasig.portal.rest.StatsLayoutModificationsController.getEventCounts(StatsLayoutModificationsController.java:116) org.jasig.portal.rest.StatsLayoutModificationsController.handleRequestInternal(StatsLayoutModificationsController.java:97) org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)




Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to