diff --git a/org.springframework.context/src/main/java/org/springframework/ejb/config/AbstractJndiLocatingBeanDefinitionParser.java b/org.springframework.context/src/main/java/org/springframework/ejb/config/AbstractJndiLocatingBeanDefinitionParser.java
index ffb51da94b9..f3b7aff7579 100644
--- a/org.springframework.context/src/main/java/org/springframework/ejb/config/AbstractJndiLocatingBeanDefinitionParser.java
+++ b/org.springframework.context/src/main/java/org/springframework/ejb/config/AbstractJndiLocatingBeanDefinitionParser.java
@@ -17,6 +17,7 @@
package org.springframework.ejb.config;
import org.w3c.dom.Element;
+import static org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.*;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@@ -31,6 +32,7 @@ import org.springframework.util.xml.DomUtils;
*
* @author Rob Harrop
* @author Juergen Hoeller
+ * @author Oliver Gierke
* @since 2.0
*/
abstract class AbstractJndiLocatingBeanDefinitionParser extends AbstractSimpleBeanDefinitionParser {
@@ -44,7 +46,8 @@ abstract class AbstractJndiLocatingBeanDefinitionParser extends AbstractSimpleBe
@Override
protected boolean isEligibleAttribute(String attributeName) {
- return (super.isEligibleAttribute(attributeName) && !ENVIRONMENT_REF.equals(attributeName));
+ return (super.isEligibleAttribute(attributeName) && !ENVIRONMENT_REF.equals(attributeName) && !LAZY_INIT_ATTRIBUTE
+ .equals(attributeName));
}
@Override
@@ -61,6 +64,10 @@ abstract class AbstractJndiLocatingBeanDefinitionParser extends AbstractSimpleBe
definitionBuilder.addPropertyValue(JNDI_ENVIRONMENT, new RuntimeBeanReference(envRef));
}
}
- }
+ String lazyInit = element.getAttribute(LAZY_INIT_ATTRIBUTE);
+ if (StringUtils.hasText(lazyInit) && !DEFAULT_VALUE.equals(lazyInit)) {
+ definitionBuilder.setLazyInit(TRUE_VALUE.equals(lazyInit));
+ }
+ }
}
diff --git a/org.springframework.context/src/main/resources/org/springframework/ejb/config/spring-jee-3.1.xsd b/org.springframework.context/src/main/resources/org/springframework/ejb/config/spring-jee-3.1.xsd
index 217f391800b..014077d96b1 100644
--- a/org.springframework.context/src/main/resources/org/springframework/ejb/config/spring-jee-3.1.xsd
+++ b/org.springframework.context/src/main/resources/org/springframework/ejb/config/spring-jee-3.1.xsd
@@ -205,6 +205,19 @@
]]>
+
+
+
+
+
diff --git a/org.springframework.context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java b/org.springframework.context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java
index b51d691d664..1afb7000f3c 100644
--- a/org.springframework.context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java
+++ b/org.springframework.context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java
@@ -35,6 +35,7 @@ import org.springframework.jndi.JndiObjectFactoryBean;
* @author Rob Harrop
* @author Juergen Hoeller
* @author Chris Beams
+ * @author Oliver Gierke
*/
public class JeeNamespaceHandlerTests {
@@ -129,6 +130,16 @@ public class JeeNamespaceHandlerTests {
assertPropertyValue(beanDefinition, "cacheSessionBean", "true");
}
+ @Test
+ public void testLazyInitJndiLookup() throws Exception {
+ BeanDefinition definition = this.beanFactory.getMergedBeanDefinition("lazyDataSource");
+ assertTrue(definition.isLazyInit());
+ definition = this.beanFactory.getMergedBeanDefinition("lazyLocalBean");
+ assertTrue(definition.isLazyInit());
+ definition = this.beanFactory.getMergedBeanDefinition("lazyRemoteBean");
+ assertTrue(definition.isLazyInit());
+ }
+
private void assertPropertyValue(BeanDefinition beanDefinition, String propertyName, Object expectedValue) {
assertEquals("Property '" + propertyName + "' incorrect",
expectedValue, beanDefinition.getPropertyValues().getPropertyValue(propertyName).getValue());
diff --git a/org.springframework.context/src/test/java/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml b/org.springframework.context/src/test/java/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml
index acd3a192ef5..6d1a3ddf833 100644
--- a/org.springframework.context/src/test/java/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml
+++ b/org.springframework.context/src/test/java/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml
@@ -3,9 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
- http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
+ http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd"
default-lazy-init="true">
@@ -67,5 +67,12 @@
cache-session-bean="true">
foo=bar
+
+
+
+
+