Skip to content
Snippets Groups Projects
Commit 98f9d85d authored by Rick Herrick's avatar Rick Herrick
Browse files

Got plugins folder loading properly using context.xml. Added module loading code to initializer.

parent 5e3d1295
No related branches found
No related tags found
No related merge requests found
......@@ -19,17 +19,18 @@ import java.util.List;
@Configuration
@ComponentScan({"org.nrg.framework.datacache.impl.hibernate",
"org.nrg.framework.services.impl",
"org.nrg.xdat.daos",
"org.nrg.xdat.services",
"org.nrg.xft.daos",
"org.nrg.xft.services", "org.nrg.xapi.configuration",
"org.nrg.xnat.helpers.merge",
"org.nrg.xnat.configuration",
"org.nrg.xnat.services",
"org.nrg.prefs.repositories",
"org.nrg.prefs.services.impl.hibernate",
"org.nrg.dicomtools.filters"})
"org.nrg.framework.services.impl",
"org.nrg.xdat.daos",
"org.nrg.xdat.services",
"org.nrg.xft.daos",
"org.nrg.xft.services",
"org.nrg.xapi.configuration",
"org.nrg.xnat.helpers.merge",
"org.nrg.xnat.configuration",
"org.nrg.xnat.services",
"org.nrg.prefs.repositories",
"org.nrg.prefs.services.impl.hibernate",
"org.nrg.dicomtools.filters"})
@ImportResource({"WEB-INF/conf/xnat-security.xml", "WEB-INF/conf/orm-config.xml", "WEB-INF/conf/mq-context.xml"})
public class RootConfig {
......
......@@ -5,16 +5,22 @@ import org.apache.axis.transport.http.AxisHTTPSessionListener;
import org.apache.axis.transport.http.AxisServlet;
import org.apache.commons.lang3.StringUtils;
import org.apache.turbine.Turbine;
import org.nrg.dcm.DicomSCPManager;
import org.nrg.framework.processors.XnatModuleBean;
import org.nrg.xdat.servlet.XDATAjaxServlet;
import org.nrg.xdat.servlet.XDATServlet;
import org.nrg.xnat.restlet.servlet.XNATRestletServlet;
import org.nrg.xnat.restlet.util.UpdateExpirationCookie;
import org.nrg.xnat.security.XnatSessionEventPublisher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.web.filter.DelegatingFilterProxy;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.*;
import java.io.IOException;
import java.util.*;
public class XnatWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
......@@ -57,7 +63,10 @@ public class XnatWebAppInitializer extends AbstractAnnotationConfigDispatcherSer
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { RootConfig.class };
final List<Class<?>> configClasses = new ArrayList<>();
configClasses.add(RootConfig.class);
configClasses.addAll(getModuleConfigs());
return configClasses.toArray(new Class[configClasses.size()]);
}
@Override
......@@ -65,6 +74,26 @@ public class XnatWebAppInitializer extends AbstractAnnotationConfigDispatcherSer
return new Class<?>[0];
}
private List<Class<?>> getModuleConfigs() {
final List<Class<?>> moduleConfigs = new ArrayList<>();
try {
final PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
final Resource[] resources = resolver.getResources("classpath*:META-INF/xnat/**/*-module.properties");
for (final Resource resource : resources) {
final Properties properties = PropertiesLoaderUtils.loadProperties(resource);
final XnatModuleBean module = new XnatModuleBean(properties);
final Class<?> moduleConfig = module.getConfigClass();
moduleConfigs.add(moduleConfig);
}
} catch (IOException e) {
throw new RuntimeException("An error occurred trying to locate XNAT module definitions.");
} catch (ClassNotFoundException e) {
_log.error("Did not find a class specified in a module definition.", e);
}
return moduleConfigs;
}
private void addServlet(final Class<? extends Servlet> clazz, final int loadOnStartup, final String... mappings) {
final String name = StringUtils.uncapitalize(clazz.getSimpleName());
final ServletRegistration.Dynamic registration = _context.addServlet(name, clazz);
......@@ -105,5 +134,6 @@ public class XnatWebAppInitializer extends AbstractAnnotationConfigDispatcherSer
private ServletContext _context;
}
private static final Logger _log = LoggerFactory.getLogger(XnatWebAppInitializer.class);
private ServletContext _context;
}
<?xml version='1.0' encoding='utf-8'?>
<Context antiResourceLocking="true">
<Loader className="org.apache.catalina.loader.VirtualWebappLoader" searchVirtualFirst="true" virtualClasspath="${xnat.home}/plugins/*.jar"/>
<JarScanner scanAllDirectories="true" />
<Parameter name="xnatHome" value="${xnat.home}"/>
</Context>
<?xml version="1.0" encoding="UTF-8"?>
<Instance_Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schemas/xdat/instance.xsd"
site_url="http://localhost:8080" admin_email="administrator@xnat.org" archive_root_path="/data/xnat/archive"
prearchive_path="/data/xnat/prearchive" cache_path="/data/xnat/cache"
smtp_server="irony.wusm.wustl.edu" ftp_path="/data/xnat/ftp" build_path="/data/xnat/build"
pipeline_path="/data/xnat/pipeline" require_login="true" user_registration="false" enable_csrf_token="true">
<Databases>
<Database Type="POSTGRESQL" Id="xnat" Driver="org.postgresql.Driver" Url="jdbc:postgresql://localhost/xnat" User="xnat" Pass="xnat" MaxConnections="10"/>
</Databases>
<Models>
<Data_Model File_Name="security.xsd" File_Location="schemas/security" DB="xnat"/>
<Data_Model File_Name="birnprov.xsd" File_Location="schemas/birn" DB="xnat"/>
<Data_Model File_Name="xnat.xsd" File_Location="schemas/xnat" DB="xnat"/>
<Data_Model File_Name="workflow.xsd" File_Location="schemas/pipeline" DB="xnat"/>
<Data_Model File_Name="repository.xsd" File_Location="schemas/pipeline" DB="xnat"/>
<Data_Model File_Name="project.xsd" File_Location="schemas/project" DB="xnat"/>
<Data_Model File_Name="assessments.xsd" File_Location="schemas/assessments" DB="xnat"/>
<Data_Model File_Name="catalog.xsd" File_Location="schemas/catalog" DB="xnat"/>
<Data_Model File_Name="protocolValidation.xsd" File_Location="schemas/validation" DB="xnat"/>
<Data_Model File_Name="screeningAssessment.xsd" File_Location="schemas/screening" DB="xnat"/>
</Models>
<Instance_Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schemas/xdat/instance.xsd"
site_url="http://localhost:8080" admin_email="administrator@xnat.org"
archive_root_path="/data/xnat/archive"
prearchive_path="/data/xnat/prearchive" cache_path="/data/xnat/cache"
smtp_server="mail.server" ftp_path="/data/xnat/ftp" build_path="/data/xnat/build"
pipeline_path="/data/xnat/pipeline" require_login="true" user_registration="false"
enable_csrf_token="true">
<Databases>
<Database Type="POSTGRESQL" Id="xnat" Driver="org.postgresql.Driver" Url="jdbc:postgresql://localhost/xnat"
User="xnat" Pass="xnat" MaxConnections="10"/>
</Databases>
<Models>
<Data_Model File_Name="security.xsd" File_Location="schemas/security" DB="xnat"/>
<Data_Model File_Name="birnprov.xsd" File_Location="schemas/birn" DB="xnat"/>
<Data_Model File_Name="xnat.xsd" File_Location="schemas/xnat" DB="xnat"/>
<Data_Model File_Name="workflow.xsd" File_Location="schemas/pipeline" DB="xnat"/>
<Data_Model File_Name="repository.xsd" File_Location="schemas/pipeline" DB="xnat"/>
<Data_Model File_Name="project.xsd" File_Location="schemas/project" DB="xnat"/>
<Data_Model File_Name="assessments.xsd" File_Location="schemas/assessments" DB="xnat"/>
<Data_Model File_Name="catalog.xsd" File_Location="schemas/catalog" DB="xnat"/>
<Data_Model File_Name="protocolValidation.xsd" File_Location="schemas/validation" DB="xnat"/>
<Data_Model File_Name="screeningAssessment.xsd" File_Location="schemas/screening" DB="xnat"/>
</Models>
</Instance_Settings>
......@@ -10,13 +10,13 @@
#
site.title=XNAT
datasource.name=xnat17
datasource.name=xnat
datasource.driver=org.postgresql.Driver
datasource.url=jdbc:postgresql://localhost/xnat17
datasource.url=jdbc:postgresql://localhost/xnat
datasource.username=xnat
datasource.password=xnat
mailserver.host=irony.wusm.wustl.edu
mailserver.host=mail.server
mailserver.port=25
mailserver.username=
mailserver.password=
......@@ -61,7 +61,7 @@ security.sessions.concurrent_max=1000
# The following parameters are used to allow/force users to enter change justifications when modifying data.
audit.require_change_justification=false
audit.show_change_justification=false
# Sets default values for the ActiveMQ configuration.
amq.usage.temp=128mb
amq.usage.mem=512mb
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment