I thought I was pretty transparent about my thought process above, but here it goes:
In your original log file, the error was reported to occur at DatabaseUpdater.java:188, which is just re-throwing an exception with some additional context information.
The original exception was that org\openmrs\liquibase\updates\liquibase-update-to-lates t-2.0.x.xml does not exist, but when I looked at DatabaseUpdater.java:244 (where the original exception was thrown), I saw it followed a call to liquibase.listUnrunChangeSets(). In order to be able to get the number of change sets that need to be run, Liquibase must be able to read the changelog file. So clearly the error was in our code (i.e., the file must actually exist and be readable or else we would’ve gotten an exception on line 232 instead of line 244).
I dug a bit into the source code for the listUnrunChangeSets() call and discovered that it gets the DatabaseChangeLog object by calling getDatabaseChangeLog(). Evidently, when calling getDatabaseChangeLog() the code was able to find the file, but when we tried to pass the file name to the parser on line 244, it couldn’t find it. (This is enough to see why I came up with that solution, but there were some more supporting points).
In your log, the path was written with usual Windows file separators (\), but inside the Liquibase class, it normalises the slashes to /. So what we were passing when it failed didn’t match what was being used when it succeeds.
When we create the Liquibase object, we pass it two ResourceAccessor objects (the classes that actual do the lookup), on that reads from a classloader, and one that reads from the file system.
When you’re running OpenMRS from the WAR file, the only way it’s going to find one of the built-in liquibase files is using the ClassLoaderFileOpener object. The sensible way to try to load a file from the classpath is ultimately to call cl.getResource(), but cl.getResource() only understands paths with /s, e.g., cl.getResource("org/openmrs/liquibase/updates/liquibase-update-to-latest-2.0.x.xml"), so if you passed it a path like org\openmrs\liquibase\updates\liquibase-update-to-lates t-2.0.x.xml, it would be unable to find the resource.
Basically, I’m a heavy user of my IDE’s “Go to Implementation” feature (I think it’s F3 in Eclipse, but I use Intellij on a Mac, so…). Hope that helps.
All the modules start now, but I’m getting some errors when trying to load resources. Not quite sure what is going on there, but right before they start there’s a stack overflow issue that possible could be hogging resources and breaking other things.
@ibacher@wolf do you know what deal is with this method? Looks like just a method that calls itself??
(FYI @gcliff, I had a chance to talk briefly w/ @ibacher today about test coverage for the FHIR API. Ian is confident that the existing automated tests cover the functionality that should work. However he would like to see those tests run against a distribution (e.g. we could test by running against the QA RefApp). Does this make sense or is more clarity needed for next steps with the FHIR API?
hello @mogoodrich , the PR as been merged ,kindly test this out on the PIH EMR to see if the slight variations from just the standard install of 2.3 and then the upgrade to this version with these latest merged changes fixes the glitches …
hello @mogoodrich , another alpha was released with the latest changes ,…Could you please test this out on the PIH EMR and give us some feedback. The artifacts were released to maven for core and platform.
Am currently doing a local test set-up with the new war file deployment of the latest changes
kindly give us some feedback on how your finding 2.4.0-alpha.3 on the PIH EMR .
I would also like to take this opportunity to invite other community member to test this out locally and share feedback here by doing a maven build of the this release by checking out into 2.4.0-alpha.3 branch. Download link