StandardServletEnvironment supports "spring.jndi.ignore" flag for efficient property lookups

Issue: SPR-14026
master
Juergen Hoeller 9 years ago
parent 35eb52e558
commit d2c0885e29
  1. 30
      spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2012 the original author or authors. * Copyright 2002-2016 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -19,6 +19,8 @@ package org.springframework.jndi;
import javax.naming.InitialContext; import javax.naming.InitialContext;
import javax.naming.NamingException; import javax.naming.NamingException;
import org.springframework.core.SpringProperties;
/** /**
* {@link JndiLocatorSupport} subclass with public lookup methods, * {@link JndiLocatorSupport} subclass with public lookup methods,
* for convenient use as a delegate. * for convenient use as a delegate.
@ -28,6 +30,29 @@ import javax.naming.NamingException;
*/ */
public class JndiLocatorDelegate extends JndiLocatorSupport { public class JndiLocatorDelegate extends JndiLocatorSupport {
/**
* System property that instructs Spring to ignore a default JNDI environment, i.e.
* to always return {@code false} from {@link #isDefaultJndiEnvironmentAvailable()}.
* <p>The default is "false", allowing for regular default JNDI access e.g. in
* {@link JndiPropertySource}. Switching this flag to {@code true} is an optimization
* for scenarios where nothing is ever to be found for such JNDI fallback searches
* to begin with, avoiding the repeated JNDI lookup overhead.
* <p>Note that this flag just affects JNDI fallback searches, not explicitly configured
* JNDI lookups such as for a {@code DataSource} or some other environment resource.
* The flag literally just affects code which attempts JNDI searches based on the
* {@code JndiLocatorDelegate.isDefaultJndiEnvironmentAvailable()} check: in particular,
* {@code StandardServletEnvironment} and {@code StandardPortletEnvironment}.
* @since 4.3
* @see #isDefaultJndiEnvironmentAvailable()
* @see JndiPropertySource
*/
public static final String IGNORE_JNDI_PROPERTY_NAME = "spring.jndi.ignore";
private static final boolean shouldIgnoreDefaultJndiEnvironment =
SpringProperties.getFlag(IGNORE_JNDI_PROPERTY_NAME);
@Override @Override
public Object lookup(String jndiName) throws NamingException { public Object lookup(String jndiName) throws NamingException {
return super.lookup(jndiName); return super.lookup(jndiName);
@ -57,6 +82,9 @@ public class JndiLocatorDelegate extends JndiLocatorSupport {
* {@code false} if not * {@code false} if not
*/ */
public static boolean isDefaultJndiEnvironmentAvailable() { public static boolean isDefaultJndiEnvironmentAvailable() {
if (shouldIgnoreDefaultJndiEnvironment) {
return false;
}
try { try {
new InitialContext().getEnvironment(); new InitialContext().getEnvironment();
return true; return true;

Loading…
Cancel
Save