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 + + + + +