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]

Reply via email to