Skip to content

Commit

Permalink
Rework node ID generation to Apache Conf 2.6
Browse files Browse the repository at this point in the history
Fixed pom.xml changes related to Apache Commons Configuration 2.6.
Cleaned up ApplicationHomeSetup and StartupConfiguration code.
Fixed handling of midpoint.home throughout midPoint code.
Removed TemplateEngine. It had a sad short life, really. Replaced with
  StringSubstitutor and ConfigurationInterpolator calls.

This should (finally) resolve MID-5904.
  • Loading branch information
mederly committed Dec 11, 2019
1 parent 017ef1f commit b95e40e
Show file tree
Hide file tree
Showing 47 changed files with 605 additions and 1,111 deletions.
28 changes: 6 additions & 22 deletions build-system/pom.xml
Expand Up @@ -379,11 +379,6 @@
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils-core</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
Expand All @@ -397,21 +392,12 @@
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.5</version>
<!-- <exclusions>-->
<!-- <exclusion> &lt;!&ndash; Conflicting version with Spring core &ndash;&gt;-->
<!-- <groupId>commons-logging</groupId>-->
<!-- <artifactId>commons-logging</artifactId>-->
<!-- </exclusion>-->
<!-- <exclusion> &lt;!&ndash; Conflicting version with Jasper Reports &ndash;&gt;-->
<!-- <groupId>commons-digester</groupId>-->
<!-- <artifactId>commons-digester</artifactId>-->
<!-- </exclusion>-->
<!-- <exclusion>-->
<!-- <groupId>commons-beanutils</groupId>-->
<!-- <artifactId>commons-beanutils</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
Expand Down Expand Up @@ -1682,8 +1668,6 @@
<!-- The xjc-plugin does not compile without dependency on this -->
<ignoredUnusedDeclaredDependency>org.apache.cxf:cxf-tools-common</ignoredUnusedDeclaredDependency>

<!-- Cannot help myself with this one (commons-configuration 1.6 causes this) TODO: revisit -->
<ignoredUnusedDeclaredDependency>commons-beanutils:commons-beanutils-core</ignoredUnusedDeclaredDependency>
</ignoredUnusedDeclaredDependencies>
<ignoredUsedUndeclaredDependencies>
<!-- Unreliable detection -->
Expand Down
4 changes: 0 additions & 4 deletions gui/admin-gui/pom.xml
Expand Up @@ -721,10 +721,6 @@
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils-core</artifactId>
</dependency>
<dependency>
<groupId>commons-javaflow</groupId>
<artifactId>commons-javaflow</artifactId>
Expand Down
Expand Up @@ -27,8 +27,6 @@
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsEndpointAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.SystemMetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.jdbc.DataSourcePoolMetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.web.tomcat.TomcatMetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration;
Expand Down Expand Up @@ -93,82 +91,77 @@
})
public abstract class AbstractSpringBootApplication extends SpringBootServletInitializer{

private static final Trace LOGGER = TraceManager.getTrace(MidPointSpringApplication.class);

protected static final String MIDPOINT_HOME_PROPERTY = "midpoint.home";
protected static final String USER_HOME_PROPERTY_NAME = "user.home";


@Autowired StartupConfiguration startupConfiguration;
@Autowired NodeAuthenticationEvaluator nodeAuthenticator;


@Bean
public ServletListenerRegistrationBean<RequestContextListener> requestContextListener() {
return new ServletListenerRegistrationBean<>(new RequestContextListener());
}

@Bean
public FilterRegistrationBean<MidPointProfilingServletFilter> midPointProfilingServletFilter() {
FilterRegistrationBean<MidPointProfilingServletFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new MidPointProfilingServletFilter());
// registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
registration.addUrlPatterns("/*");
return registration;
}

@Bean
public FilterRegistrationBean<WicketFilter> wicket() {
FilterRegistrationBean<WicketFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new WicketFilter());
registration.setDispatcherTypes(DispatcherType.ERROR, DispatcherType.REQUEST, DispatcherType.FORWARD);
registration.addUrlPatterns("/*");
registration.addInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*");
registration.addInitParameter(Application.CONFIGURATION, "deployment"); // deployment development
registration.addInitParameter("applicationBean", "midpointApplication");
registration.addInitParameter(WicketFilter.APP_FACT_PARAM, "org.apache.wicket.spring.SpringWebApplicationFactory");

return registration;
}

// Overriding bean from org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration
// This method is not very clean. We should probably subclass WebSecurityConfiguration instead.
// This is the reason that global bean override is allowed in application.yml
@Bean
public FilterRegistrationBean<DelegatingFilterProxy> springSecurityFilterChain() {
FilterRegistrationBean<DelegatingFilterProxy> registration = new FilterRegistrationBean<>();
registration.setFilter(new DelegatingFilterProxy());
registration.addUrlPatterns("/*");
return registration;
}

@Bean
public FilterRegistrationBean<WroFilter> webResourceOptimizer(WroFilter wroFilter) {
FilterRegistrationBean<WroFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(wroFilter);
registration.addUrlPatterns("/wro/*");
return registration;
}

@Bean
public ServletRegistrationBean<CXFServlet> cxfServlet() {
ServletRegistrationBean<CXFServlet> registration = new ServletRegistrationBean<>();
registration.setServlet(new CXFServlet());
registration.addInitParameter("service-list-path", "midpointservices");
registration.setLoadOnStartup(1);
registration.addUrlMappings("/model/*", "/ws/*");

return registration;
}

@Bean
public ErrorPageRegistrar errorPageRegistrar() {
return new MidPointErrorPageRegistrar();
}
private static final Trace LOGGER = TraceManager.getTrace(MidPointSpringApplication.class);

@Autowired StartupConfiguration startupConfiguration;
@Autowired NodeAuthenticationEvaluator nodeAuthenticator;


@Bean
public ServletListenerRegistrationBean<RequestContextListener> requestContextListener() {
return new ServletListenerRegistrationBean<>(new RequestContextListener());
}

@Bean
public FilterRegistrationBean<MidPointProfilingServletFilter> midPointProfilingServletFilter() {
FilterRegistrationBean<MidPointProfilingServletFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new MidPointProfilingServletFilter());
// registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
registration.addUrlPatterns("/*");
return registration;
}

@Bean
public FilterRegistrationBean<WicketFilter> wicket() {
FilterRegistrationBean<WicketFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new WicketFilter());
registration.setDispatcherTypes(DispatcherType.ERROR, DispatcherType.REQUEST, DispatcherType.FORWARD);
registration.addUrlPatterns("/*");
registration.addInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*");
registration.addInitParameter(Application.CONFIGURATION, "deployment"); // deployment development
registration.addInitParameter("applicationBean", "midpointApplication");
registration.addInitParameter(WicketFilter.APP_FACT_PARAM, "org.apache.wicket.spring.SpringWebApplicationFactory");

return registration;
}

// Overriding bean from org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration
// This method is not very clean. We should probably subclass WebSecurityConfiguration instead.
// This is the reason that global bean override is allowed in application.yml
@Bean
public FilterRegistrationBean<DelegatingFilterProxy> springSecurityFilterChain() {
FilterRegistrationBean<DelegatingFilterProxy> registration = new FilterRegistrationBean<>();
registration.setFilter(new DelegatingFilterProxy());
registration.addUrlPatterns("/*");
return registration;
}

@Bean
public FilterRegistrationBean<WroFilter> webResourceOptimizer(WroFilter wroFilter) {
FilterRegistrationBean<WroFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(wroFilter);
registration.addUrlPatterns("/wro/*");
return registration;
}

@Bean
public ServletRegistrationBean<CXFServlet> cxfServlet() {
ServletRegistrationBean<CXFServlet> registration = new ServletRegistrationBean<>();
registration.setServlet(new CXFServlet());
registration.addInitParameter("service-list-path", "midpointservices");
registration.setLoadOnStartup(1);
registration.addUrlMappings("/model/*", "/ws/*");

return registration;
}

@Bean
public ErrorPageRegistrar errorPageRegistrar() {
return new MidPointErrorPageRegistrar();
}

@Bean
public SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}

}
Expand Up @@ -7,6 +7,7 @@

package com.evolveum.midpoint.web.boot;

import com.evolveum.midpoint.common.configuration.api.MidpointConfiguration;
import com.evolveum.midpoint.gui.impl.factory.TextAreaPanelFactory;
import com.evolveum.midpoint.gui.impl.registry.GuiComponentRegistryImpl;
import com.evolveum.midpoint.util.logging.Trace;
Expand Down Expand Up @@ -128,16 +129,17 @@ protected SpringApplicationBuilder configure(SpringApplicationBuilder applicatio
}

private static SpringApplicationBuilder configureApplication(SpringApplicationBuilder application) {
String mpHome = System.getProperty(MIDPOINT_HOME_PROPERTY);
String mpHome = System.getProperty(MidpointConfiguration.MIDPOINT_HOME_PROPERTY);
if (StringUtils.isEmpty(mpHome)) {
LOGGER.info("{} system property is not set, using default configuration", MIDPOINT_HOME_PROPERTY);
LOGGER.info("{} system property is not set, using default configuration",
MidpointConfiguration.MIDPOINT_HOME_PROPERTY);

mpHome = System.getProperty(USER_HOME_PROPERTY_NAME);
mpHome = System.getProperty(MidpointConfiguration.USER_HOME_PROPERTY);
if (!mpHome.endsWith("/")) {
mpHome += "/";
}
mpHome += "midpoint";
System.setProperty(MIDPOINT_HOME_PROPERTY, mpHome);
System.setProperty(MidpointConfiguration.MIDPOINT_HOME_PROPERTY, mpHome);
}

System.setProperty("spring.config.additional-location", "${midpoint.home}/");
Expand Down
Expand Up @@ -389,7 +389,7 @@ private void initializeSchrodinger() {
}

String value = environment.getProperty(MidpointConfiguration.MIDPOINT_SCHRODINGER_PROPERTY);
Boolean enabled = Boolean.parseBoolean(value);
boolean enabled = Boolean.parseBoolean(value);

if (enabled) {
LOGGER.info("Schrodinger plugin enabled");
Expand Down
Expand Up @@ -8,6 +8,7 @@

import java.lang.management.ManagementFactory;

import com.evolveum.midpoint.common.configuration.api.MidpointConfiguration;
import org.apache.commons.lang.StringUtils;
import org.springframework.boot.Banner;
import org.springframework.boot.ExitCodeGenerator;
Expand All @@ -24,7 +25,6 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.boot.AbstractSpringBootApplication;
import com.evolveum.midpoint.web.boot.MidPointSpringApplication;

/**
* @author katka
Expand Down Expand Up @@ -107,16 +107,17 @@ protected SpringApplicationBuilder configure(SpringApplicationBuilder applicatio

//what is this for? why static?
private static SpringApplicationBuilder configureApplication(SpringApplicationBuilder application) {
String mpHome = System.getProperty(MIDPOINT_HOME_PROPERTY);
String mpHome = System.getProperty(MidpointConfiguration.MIDPOINT_HOME_PROPERTY);
if (StringUtils.isEmpty(mpHome)) {
LOGGER.info("{} system property is not set, using default configuration", MIDPOINT_HOME_PROPERTY);
LOGGER.info("{} system property is not set, using default configuration",
MidpointConfiguration.MIDPOINT_HOME_PROPERTY);

mpHome = System.getProperty(USER_HOME_PROPERTY_NAME);
mpHome = System.getProperty(MidpointConfiguration.USER_HOME_PROPERTY);
if (!mpHome.endsWith("/")) {
mpHome += "/";
}
mpHome += "midpoint";
System.setProperty(MIDPOINT_HOME_PROPERTY, mpHome);
System.setProperty(MidpointConfiguration.MIDPOINT_HOME_PROPERTY, mpHome);
}

System.setProperty("spring.config.additional-location", "${midpoint.home}/");
Expand Down
Expand Up @@ -166,7 +166,7 @@ private ResourceBundleMessageSource buildSource(String basename, ClassLoader cla
}

private URL buildMidpointHomeLocalizationFolderUrl() {
String midpointHome = System.getProperty("midpoint.home");
String midpointHome = System.getProperty(MidpointConfiguration.MIDPOINT_HOME_PROPERTY);

File file = new File(midpointHome, "localization");
try {
Expand Down
Expand Up @@ -12,15 +12,19 @@
/**
* @author mamut
*/

public interface MidpointConfiguration {

// Names of system properties. Note that they are also copied into config.xml-loaded configuration.
String MIDPOINT_SILENT_PROPERTY = "midpoint.silent";
String MIDPOINT_HOME_PROPERTY = "midpoint.home";
String MIDPOINT_SCHRODINGER_PROPERTY = "midpoint.schrodinger";
String MIDPOINT_LOGGING_ALT_ENABLED_PROPERTY = "midpoint.logging.alt.enabled";
String MIDPOINT_LOGGING_ALT_FILENAME_PROPERTY = "midpoint.logging.alt.filename";
String MIDPOINT_LOGGING_ALT_PREFIX_PROPERTY = "midpoint.logging.alt.prefix";

String USER_HOME_PROPERTY = "user.home";

// Other commonly-used configuration properties
String MIDPOINT_NODE_ID_PROPERTY = "midpoint.nodeId";
String MIDPOINT_NODE_ID_EXPRESSION_PROPERTY = "midpoint.nodeIdExpression";
String MIDPOINT_NODE_ID_SOURCE_PROPERTY = "midpoint.nodeIdSource";
Expand All @@ -29,11 +33,7 @@ public interface MidpointConfiguration {
String MIDPOINT_HOST_NAME_PROPERTY = "midpoint.hostName";
String MIDPOINT_HTTP_PORT_PROPERTY = "midpoint.httpPort";

// TODO read these from the MidpointConfiguration instead of system properties.
// It will provide greater flexibility, as the administrator will be able to set them permanently in config.xml.
String MIDPOINT_SCHRODINGER_PROPERTY = "midpoint.schrodinger";

// names of configuration sections
// Names of configuration sections
String AUDIT_CONFIGURATION = "midpoint.audit";
String SYSTEM_CONFIGURATION = "midpoint.system";
String GLOBAL_CONFIGURATION = "midpoint.global";
Expand All @@ -55,6 +55,9 @@ public interface MidpointConfiguration {
*/
String MIDPOINT_SYSTEM_PROPERTIES_BASE_PATH = "midpoint-system";

/**
* @return midPoint home directory. Currently it is the same value as in "midpoint.home" system property.
*/
String getMidpointHome();

/**
Expand All @@ -65,27 +68,40 @@ public interface MidpointConfiguration {
* Samples of names:
* <li>
* <ul>repository -> midpoint.repository</ul>
* <ul> provisioning -> midpoint.provisioning</ul>
* <ul> model -> midpoint.model</ul>
* <ul>provisioning -> midpoint.provisioning</ul>
* </li>
*
* @return Configuration object
* Sample how to get config value: {@code config.getInt("port", 1234);}
*/
Configuration getConfiguration(String component);

/**
* @return Global configuration.
*/
Configuration getConfiguration();

/**
* @return True if we are running in safe mode (the exact meaning gradually evolves; but the overall idea is to make
* midPoint barely usable to be able to fix the worst problems preventing it from running normally).
*/
boolean isSafeMode();

/**
* @return true if the profiling interceptor should be loaded
* @return True if the profiling interceptor should be loaded.
*/
@SuppressWarnings("unused") // It is actually used from ctx-interceptor.xml
boolean isProfilingEnabled();

/**
* @return Current profiling mode e.g. on, off, dynamic.
*/
@NotNull
ProfilingMode getProfilingMode();

/**
* @return "midpoint.system" section of the system configuration
*/
@NotNull
SystemConfigurationSection getSystemSection();
}

0 comments on commit b95e40e

Please sign in to comment.