ORACLE - Error when adding an assessment
Description
relates to
Activity
Jacob Cira January 11, 2023 at 8:21 PM
Set to verified on 21x though we don’t have a 21x Oracle server (any more?).
21x https://qa21-mysql.nightly.sakaiproject.org build 632c5116
Andrea Schmidt October 17, 2020 at 4:47 PM
Verified on 22x: https://trunk-oracle.nightly.sakaiproject.org/portal, build: 2bd52359
Quiz not sent to GB and quiz with GB publishes. Had student take both quizzes, no errors
David Bauer October 14, 2020 at 8:49 PM
Earle suggested that we set the hibernate.id.new_generator_mappings value to false in db-components.xml instead of updating the generators for the sequences that were not getting created. That does fix the issue but goes away from the default which would seemingly be the recommended setting when using JPA and Hibernate. I've asked a few questions on the pull request about what we'd recommend in general now and going forward for ID columns in Sakai. I'm always looking to learn more about this kind of stuff, so any thoughts on the subject would be super appreciated!
David Bauer October 14, 2020 at 2:00 PMEdited
I've found that hibernate.id.new_generator_mappings is now set to true by default in hibernate 5.3. So, we can still use the hbm.xml files to create the sequences but the syntax has changed.
<id name="assessmentBaseId" column="ID" type="java.lang.Long" unsaved-value="0">
<generator class="org.hibernate.id.enhanced.SequenceStyleGenerator">
<param name="sequence_name">SAM_ASSESSMENTBASE_ID_S</param>
<param name="optimizer">none</param>
<param name="increment_size">1</param>
</generator>
</id>
Optimizer and increment_size might not be needed.
David Bauer October 14, 2020 at 11:31 AM
I've been able to use one of our local oracle environments to work on this and I see the same errors in the log on startup. I don't think the index warning is nearly as concerning as the missing sequences. After starting Sakai with auto.ddl enabled and an empty database it looks like there are many sequences that are not getting created.
I'm not sure what the solution would be beyond changing from the hbm.xml files to use the annotations, but it's clear that sequences defined like this
<id name="assessmentBaseId" column="ID" type="java.lang.Long" unsaved-value="0">
<generator class="native">
<param name="sequence">SAM_ASSESSMENTBASE_ID_S</param>
</generator>
</id>
are not being created. Whereas sequences created like this are fine
@Id
@SequenceGenerator(name="rbc_rat_seq", sequenceName ="rbc_rat_seq")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "rbc_rat_seq")
private Long id;
If I understand correctly, the first method above is creating the sequence via hibernate while the second is javax.persistance which would explain this not working after the hibernate upgrade. Any thoughts on how to proceed? Can the id column be defined in the hbm.xml file but the sequence for the id defined via annotations in AssessmentBaseData.java? Or does the entire hbm.xml file need to be replaced?
Appears a message when try adding an assessment
Warning: Gradebook has not been deployed properly. Hence, no new assessment can be created. Please contact your local help desk for assistance.
On log
02-Sep-2020 11:37:47.147 ERROR [http-nio-20113-exec-20] org.sakaiproject.tool.assessment.services.assessment.AssessmentService.createAssessment javax.persistence.EntityNotFoundException: Unable to find org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentTemplateData with id 1 java.lang.Exception: javax.persistence.EntityNotFoundException: Unable to find org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentTemplateData with id 1 at org.sakaiproject.tool.assessment.facade.AssessmentFacadeQueries.createAssessment(AssessmentFacadeQueries.java:600) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) at com.sun.proxy.$Proxy199.createAssessment(Unknown Source) at org.sakaiproject.tool.assessment.services.assessment.AssessmentService.createAssessment(AssessmentService.java:282) at org.sakaiproject.tool.assessment.services.assessment.AssessmentService.createAssessment(AssessmentService.java:259) at org.sakaiproject.tool.assessment.ui.listener.author.AuthorAssessmentListener.createAssessment(AuthorAssessmentListener.java:174) at org.sakaiproject.tool.assessment.ui.listener.author.AuthorAssessmentListener.processAction(AuthorAssessmentListener.java:139) at javax.faces.event.ActionEvent.processListener(ActionEvent.java:96) at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:839) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:870) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1418) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:201) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:670) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:426) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at org.sakaiproject.jsf.util.SamigoJsfTool.dispatch(SamigoJsfTool.java:360) at org.sakaiproject.jsf2.util.JsfTool.doPost(JsfTool.java:250) at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:352) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:508) at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1502) at org.sakaiproject.portal.charon.handlers.SiteHandler.doToolBuffer(SiteHandler.java:1254) at org.sakaiproject.portal.charon.handlers.SiteHandler.bufferContent(SiteHandler.java:1088) at org.sakaiproject.portal.charon.handlers.SiteHandler.doSite(SiteHandler.java:499) at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:275) at org.sakaiproject.portal.charon.handlers.SiteHandler.doGet(SiteHandler.java:163) at org.sakaiproject.portal.charon.handlers.WorksiteHandler.doPost(WorksiteHandler.java:69) at org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1175) at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:475) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:679) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: javax.persistence.EntityNotFoundException: Unable to find org.sakaiproject.tool.assessment.data.dao.assessment.AssessmentTemplateData with id 1 at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:163) at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:234) at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:350) at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:127) at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:93) at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1277) at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1265) at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:208) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doGetReference(SessionImpl.java:2846) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.getReference(SessionImpl.java:2825) at org.hibernate.internal.SessionImpl.load(SessionImpl.java:1087) at org.springframework.orm.hibernate5.HibernateTemplate.lambda$load$2(HibernateTemplate.java:516) at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:385) at org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:351) at org.springframework.orm.hibernate5.HibernateTemplate.load(HibernateTemplate.java:511) at org.springframework.orm.hibernate5.HibernateTemplate.load(HibernateTemplate.java:504) at org.sakaiproject.tool.assessment.facade.AssessmentFacadeQueries.getAssessmentTemplate(AssessmentFacadeQueries.java:273) at org.sakaiproject.tool.assessment.facade.AssessmentFacadeQueries.prepareAssessment(AssessmentFacadeQueries.java:526) at org.sakaiproject.tool.assessment.facade.AssessmentFacadeQueries.createAssessment(AssessmentFacadeQueries.java:597) ... 83 more