diff --git a/src/main/java/org/nrg/xnat/initialization/RootConfig.java b/src/main/java/org/nrg/xnat/initialization/RootConfig.java index 3f7f48c6e9d88f37c4c6c42cb3093279c955f7fc..50af4ad7d9c82fb65a61ec6a52ca7cad32b8f061 100644 --- a/src/main/java/org/nrg/xnat/initialization/RootConfig.java +++ b/src/main/java/org/nrg/xnat/initialization/RootConfig.java @@ -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 { diff --git a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java index 85797a83052236288fa4c3da6a0eb455ddec11c2..b0d1ce4f4e90ec1f10063a64faac811514264365 100644 --- a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java +++ b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java @@ -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; } diff --git a/src/main/webapp/META-INF/context.xml b/src/main/webapp/META-INF/context.xml new file mode 100644 index 0000000000000000000000000000000000000000..16bd2bec3ce56149a803754e2972b96d298abe37 --- /dev/null +++ b/src/main/webapp/META-INF/context.xml @@ -0,0 +1,6 @@ +<?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> diff --git a/src/main/webapp/WEB-INF/conf/InstanceSettings.xml b/src/main/webapp/WEB-INF/conf/InstanceSettings.xml index a1ae1fb6c453dd766fcad64b1e41285fba39f470..a176477249c0a9a4b2ea8352e5fa38ab49692b19 100644 --- a/src/main/webapp/WEB-INF/conf/InstanceSettings.xml +++ b/src/main/webapp/WEB-INF/conf/InstanceSettings.xml @@ -1,22 +1,26 @@ <?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> diff --git a/src/main/webapp/WEB-INF/conf/services.properties b/src/main/webapp/WEB-INF/conf/services.properties index 20628b2e84df9ce746accb503a5d3fce3af92981..17081f1e259c05cd75b9755771a3583cc46d0e9d 100644 --- a/src/main/webapp/WEB-INF/conf/services.properties +++ b/src/main/webapp/WEB-INF/conf/services.properties @@ -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