Browse Source

SPR-7477 - Added lazy-init attribute to jee namespace

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4431 50f2f4bb-b051-0410-bef5-90022cba6387
pull/1/merge
Oliver Gierke 15 years ago
parent
commit
67ffadd1f4
  1. 11
      org.springframework.context/src/main/java/org/springframework/ejb/config/AbstractJndiLocatingBeanDefinitionParser.java
  2. 13
      org.springframework.context/src/main/resources/org/springframework/ejb/config/spring-jee-3.1.xsd
  3. 11
      org.springframework.context/src/test/java/org/springframework/ejb/config/JeeNamespaceHandlerTests.java
  4. 13
      org.springframework.context/src/test/java/org/springframework/ejb/config/jeeNamespaceHandlerTests.xml

11
org.springframework.context/src/main/java/org/springframework/ejb/config/AbstractJndiLocatingBeanDefinitionParser.java

@ -17,6 +17,7 @@
package org.springframework.ejb.config; package org.springframework.ejb.config;
import org.w3c.dom.Element; 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.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@ -31,6 +32,7 @@ import org.springframework.util.xml.DomUtils;
* *
* @author Rob Harrop * @author Rob Harrop
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Oliver Gierke
* @since 2.0 * @since 2.0
*/ */
abstract class AbstractJndiLocatingBeanDefinitionParser extends AbstractSimpleBeanDefinitionParser { abstract class AbstractJndiLocatingBeanDefinitionParser extends AbstractSimpleBeanDefinitionParser {
@ -44,7 +46,8 @@ abstract class AbstractJndiLocatingBeanDefinitionParser extends AbstractSimpleBe
@Override @Override
protected boolean isEligibleAttribute(String attributeName) { 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 @Override
@ -61,6 +64,10 @@ abstract class AbstractJndiLocatingBeanDefinitionParser extends AbstractSimpleBe
definitionBuilder.addPropertyValue(JNDI_ENVIRONMENT, new RuntimeBeanReference(envRef)); 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));
}
}
} }

13
org.springframework.context/src/main/resources/org/springframework/ejb/config/spring-jee-3.1.xsd

@ -205,6 +205,19 @@
]]></xsd:documentation> ]]></xsd:documentation>
</xsd:annotation> </xsd:annotation>
</xsd:attribute> </xsd:attribute>
<xsd:attribute name="lazy-init" default="default" type="beans:defaultable-boolean">
<xsd:annotation>
<xsd:documentation><![CDATA[
Indicates whether or not this bean is to be lazily initialized.
If false, it will be instantiated on startup by bean factories
that perform eager initialization of singletons. The default is
"false".
Note: This attribute will not be inherited by child bean definitions.
Hence, it needs to be specified per concrete bean definition.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension> </xsd:extension>
</xsd:complexContent> </xsd:complexContent>
</xsd:complexType> </xsd:complexType>

11
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 Rob Harrop
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Chris Beams * @author Chris Beams
* @author Oliver Gierke
*/ */
public class JeeNamespaceHandlerTests { public class JeeNamespaceHandlerTests {
@ -129,6 +130,16 @@ public class JeeNamespaceHandlerTests {
assertPropertyValue(beanDefinition, "cacheSessionBean", "true"); 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) { private void assertPropertyValue(BeanDefinition beanDefinition, String propertyName, Object expectedValue) {
assertEquals("Property '" + propertyName + "' incorrect", assertEquals("Property '" + propertyName + "' incorrect",
expectedValue, beanDefinition.getPropertyValues().getPropertyValue(propertyName).getValue()); expectedValue, beanDefinition.getPropertyValues().getPropertyValue(propertyName).getValue());

13
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:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util" xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee" 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 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-2.5.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-2.5.xsd" http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd"
default-lazy-init="true"> default-lazy-init="true">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
@ -67,5 +67,12 @@
cache-session-bean="true"> cache-session-bean="true">
<jee:environment>foo=bar</jee:environment> <jee:environment>foo=bar</jee:environment>
</jee:remote-slsb> </jee:remote-slsb>
<!-- Lazy beans Tests-->
<jee:jndi-lookup id="lazyDataSource" jndi-name="jdbc/MyDataSource" lazy-init="true" />
<jee:local-slsb id="lazyLocalBean" jndi-name="ejb/MyLocalBean"
business-interface="org.springframework.beans.ITestBean" lazy-init="true" />
<jee:remote-slsb id="lazyRemoteBean" jndi-name="ejb/MyRemoteBean"
business-interface="org.springframework.beans.ITestBean" lazy-init="true" />
</beans> </beans>

Loading…
Cancel
Save