If this is the case, then this seems like a bug that we definitely want
to backport down to 1.6...
On 05/10/2012 03:08 PM, Mark Goodrich wrote:
I was running into a problem where when I was retiring an object, the
retire handler was recursively handling and retiring all
Collection<OpenmrsObject> associated with that object…
If this is indeed the problem, this annotation would be the solution.
I backported it to 1.9, but that was it. I think it would be possible
to backport to earlier releases:
Here’s the ticket, with a link to the commit and code review:
https://tickets.openmrs.org/browse/TRUNK-3174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#issue-tabs
fwiw, in the case below, I believe if you retired a
DrugOrderCohortDefinition, it would retire all associated Concepts and
Drugs, which is definitely not the functionality we want! Might be
worth testing.
Mark
*From:*dev@openmrs.org [mailto:dev@openmrs.org] *On Behalf Of *Ben Wolfe
*Sent:* Thursday, May 10, 2012 11:17 AM
*To:* openmrs-deve...@listserv.iupui.edu
*Subject:* Re: [OPENMRS-DEV] ARV reporting problem
This is one reason why Mark created the annotation for ignoring some
of the save handler calls. What ticket was that and was it
backported? If it was backported, your module would just need to add
an annotation that says "don't save this list of concepts when saving
this object"
Ben
On Thu, May 10, 2012 at 10:33 AM, Rowan Seymour <rseym...@pih.org
<mailto:rseym...@pih.org>> wrote:
Upgrading this to dev list. We're working on a custom cohort
definition in the reporting framework for patients having drug orders.
We added a configuration property to the definition so that we can
specify a list of concepts to describe all ARV drugs:
@ConfigurationProperty(required=false)
private List<Concept> masterDrugSets;
but when we try and save the definition we get a
LazyInitializationException:
/An Internal Error has Occurred/
/org.hibernate.LazyInitializationException/
/failed to lazily initialize a collection of role:
org.openmrs.Concept.names, no session or session was closed/
More details in emails below including complete exception. We'll try
using a PersonAttributeCohortDefinition and see if the same thing
happens as suggested.
On 10 May 2012 16:16, Michael Seaton <msea...@pih.org
<mailto:msea...@pih.org>> wrote:
Hi Rowan,
I would use the dev list for this kind of question. Here is what I
would guess is happening:
The way the RequiredDataAdvice works in OpenMRS is that it AOPs around
any method in a service that implements OpenmrsService and which is
like "save*(obj)" and makes sure any required data that can be
automatically handled (createdBy, dateCreated, changedBy, dateChanged,
etc.) are set. It also recurses over any property which is a
Collection containing objects that implement OpenmrsObject, and
applies the same processing to these objects. So that is what is
happening here - by virtue of saving the CohortDefinition, OpenMRS
core is saving all underlying Concepts configured on this
CohortDefinition as well.
Now, there are a number of issues here:
* I would think we do not want this behavior in general for this type
of Object - eg. we do not want saving Definitions in the reporting
module to perform a save on any associated data. However, I don't
believe there is any way to turn this off, particularly in 1.6.x. I
think Mark ran into this recently though in another context, and may
have applied some patches, so I'm copying him here to comment. *@Mark?*
* Even if we can live with this behavior the way it is currently
working, this stack trace is a problem. I don't know why it is
happening. I'm in Malawi with not great connectivity at the moment,
but you might want to look through JIRA in the reporting module and/or
trunk to see if a similar error message has previously been reported
and resolved that might indicate that updating to 1.6.x or the
reporting module would help. That being said, the
CodedObsCohortDefinition and the PersonAttributeCohortDefinition both
use a List<Concept> property, and don't believe there are any open
tickets around these. Can you try configuring one of these in the UI
and saving it with multiple Concepts and see if you get this stack
trace when saving? Could you try upgrading a dev/test environment to
1.6.x and see if that helps as well? Can you reproduce your bug in a
unit test?
I would hit the dev list to see if Ben or anyone else remembers any
specific fixes or other details around this error. If all else fails,
since you are writing your reports in code and not via the UI, you
could change your configuration property from a List<Concept>
masterDrugSets to a List<Integer> masterDrugSetConceptIds and this
would alleviate the problem...
Mike
On 05/09/2012 10:39 AM, Rowan Seymour wrote:
Hi guys
So Mariam and I have been trying to add that functionality to our ARV
reports that we discussed before - that is being able to check that a
patient's regimen is /EXACTLY /the specified regimen and that they are
not taking additional ARVs. We can't modify the PatientSetService as
this has to work with OpenMRS 1.6.x. So I added two new properties to
our DrugOrderCohortDefinition class (in bold):
@ConfigurationProperty(required=false)
private List<Drug> drugList;
@ConfigurationProperty(required=false)
private List<Concept> drugSets;
@ConfigurationProperty(required=false)
private GroupMethod anyOrAll;
*@ConfigurationProperty(required=false)*
*private Boolean exactlyAll;*
*@ConfigurationProperty(required=false)*
*private List<Concept> masterDrugSets;*
with setters and getters, and then created our own service methods for
checking drug orders against a master list of drugs which in our case
will be the list of all ARV drugs. However we're now getting an
exception whenever we save the cohort definition, i.e.
DrugOrderCohortDefinition onRegimen = new DrugOrderCohortDefinition();
onRegimen.setName("patient on........" + regimenName + "regimen");
onRegimen.addParameter(new Parameter("startDate","Start of Period",
Date.class));
onRegimen.addParameter(new Parameter("endDate","End of Period",
Date.class));
onRegimen.setDrugList(drugs);
onRegimen.setAnyOrAll(GroupMethod.ALL);
*onRegimen.addMasterDrugSet(Context.getConceptService().getConcept(1085));
// All ARVs*
*onRegimen.setExactlyAll(true);*
h.replaceCohortDefinition(onRegimen);
The exception is in email below from Mariam. Am hoping you can point
us in the right direction. Thanks!
On 9 May 2012 15:39, Mariam N. <nmary...@gmail.com
<mailto:nmary...@gmail.com>> wrote:
An Internal Error has Occurred
*org.hibernate.LazyInitializationException*
failed to lazily initialize a collection of role: org.openmrs.Concept.names, no
session or session was closed
Consult the help document <http://localhost:8080/openmrs/help.htm>.
Contact your friendly neighborhood administrator if it cannot be
resolved.
Hide stack trace
<http://localhost:8080/openmrs/module/rwandamohreports/register_HIVCareAndARTReport.form>
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343)
org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:163)
*org.openmrs.Concept.getNames(Concept.java:1028)*
*org.openmrs.Concept.getNames(Concept.java:1012)*
*org.openmrs.api.handler.ConceptSaveHandler.handle(ConceptSaveHandler.java:46)*
*org.openmrs.api.handler.ConceptSaveHandler.handle(ConceptSaveHandler.java:1)*
*org.openmrs.aop.RequiredDataAdvice.recursivelyHandle(RequiredDataAdvice.java:217)*
*org.openmrs.aop.RequiredDataAdvice.recursivelyHandle(RequiredDataAdvice.java:234)*
*org.openmrs.aop.RequiredDataAdvice.recursivelyHandle(RequiredDataAdvice.java:180)*
*org.openmrs.aop.RequiredDataAdvice.before(RequiredDataAdvice.java:130)*
org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:49)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy8432.saveDefinition(Unknown Source)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
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.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy8432.saveDefinition(Unknown Source)
*org.openmrs.module.rwandamohreports.reporting.Helper.replaceCohortDefinition(Helper.java:172)*
*org.openmrs.module.rwandamohreports.reporting.SetupHIVCareAndARTReport.createReportDefinition(SetupHIVCareAndARTReport.java:874)*
*org.openmrs.module.rwandamohreports.reporting.SetupHIVCareAndARTReport.setup(SetupHIVCareAndARTReport.java:66)*
*org.openmrs.module.rwandamohreports.web.controller.RwandaSetupReportsFormController.registerHIVCareAndARTReport(RwandaSetupReportsFormController.java:74)*
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:421)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:136)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:326)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:313)
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:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
*org.openmrs.module.web.filter.ModuleFilterChain.doFilter(ModuleFilterChain.java:76)*
*org.openmrs.module.web.filter.ModuleFilter.doFilter(ModuleFilter.java:58)*
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
*org.openmrs.web.filter.OpenmrsFilter.doFilterInternal(OpenmrsFilter.java:112)*
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
*org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:82)*
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
*org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:82)*
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
*org.openmrs.web.filter.StartupFilter.doFilter(StartupFilter.java:82)*
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
java.lang.Thread.run(Unknown Source)
OpenMRS Version: 1.6.3 dev Build 18591
--
*Dr Rowan Seymour*/
Partners In Health, Rwanda/
Tel: +250783835665 <tel:%2B250783835665>
--
*Dr Rowan Seymour*/
Partners In Health, Rwanda/
Tel: +250783835665 <tel:%2B250783835665>
------------------------------------------------------------------------
Click here to unsubscribe
<mailto:lists...@listserv.iupui.edu?body=SIGNOFF%20openmrs-devel-l>
from OpenMRS Developers' mailing list
------------------------------------------------------------------------
Click here to unsubscribe
<mailto:lists...@listserv.iupui.edu?body=SIGNOFF%20openmrs-devel-l>
from OpenMRS Developers' mailing list
------------------------------------------------------------------------
Click here to unsubscribe
<mailto:lists...@listserv.iupui.edu?body=SIGNOFF%20openmrs-devel-l>
from OpenMRS Developers' mailing list
_________________________________________
To unsubscribe from OpenMRS Developers' mailing list, send an e-mail to
lists...@listserv.iupui.edu with "SIGNOFF openmrs-devel-l" in the body (not
the subject) of your e-mail.
[mailto:lists...@listserv.iupui.edu?body=SIGNOFF%20openmrs-devel-l]