Skip to content

Commit

Permalink
Preserve the thread-local classloader if it's one of OMRS's classloaders
Browse files Browse the repository at this point in the history
  • Loading branch information
ibacher committed Jun 24, 2022
1 parent 1b7d01f commit 9c69ce6
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions api/src/main/java/org/openmrs/util/DatabaseUpdater.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import org.openmrs.liquibase.ChangeLogVersionFinder;
import org.openmrs.liquibase.ChangeSetExecutorCallback;
import org.openmrs.liquibase.LiquibaseProvider;
import org.openmrs.module.ModuleClassLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -846,11 +847,11 @@ public void visit(ChangeSet changeSet, DatabaseChangeLog databaseChangeLog, Data
if (callback != null) {
callback.executing(changeSet, numChangeSetsToRun);
}
Map<String, Object> scopevalues = new HashMap<>();
scopevalues.put(Scope.Attr.resourceAccessor.name(), getCompositeResourceAccessor(null));
Map<String, Object> scopeValues = new HashMap<>();
scopeValues.put(Scope.Attr.resourceAccessor.name(), getCompositeResourceAccessor(null));
String scopeId = null;
try {
scopeId = Scope.enter(scopevalues);
scopeId = Scope.enter(scopeValues);
super.visit(changeSet, databaseChangeLog, database, filterResults);
}
catch (Exception e) {
Expand All @@ -872,8 +873,12 @@ public void visit(ChangeSet changeSet, DatabaseChangeLog databaseChangeLog, Data
*/
private static CompositeResourceAccessor getCompositeResourceAccessor(ClassLoader classLoader) {
if (classLoader == null) {
classLoader = OpenmrsClassLoader.getInstance();
classLoader = Thread.currentThread().getContextClassLoader();
if (!(classLoader instanceof OpenmrsClassLoader) && !(classLoader instanceof ModuleClassLoader)) {
classLoader = OpenmrsClassLoader.getInstance();
}
}

ResourceAccessor openmrsFO = new ClassLoaderFileOpener(classLoader);
ResourceAccessor fsFO = new FileSystemResourceAccessor(OpenmrsUtil.getApplicationDataDirectoryAsFile());
return new CompositeResourceAccessor(openmrsFO, fsFO);
Expand Down

0 comments on commit 9c69ce6

Please sign in to comment.