This document summarizes changes made in versions 2.5.6 and 2.5.6.SEC01 of the Spring Framework. It lists updates to various packages in the framework, including bug fixes, dependency upgrades, and new features. Highlights include improved support for AspectJ, EHCache, TestNG, OpenJPA, and EclipseLink, as well as various enhancements to AOP, beans, caching, JDBC, JMS, and remoting.
Download as TXT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
1K views
Changelog
This document summarizes changes made in versions 2.5.6 and 2.5.6.SEC01 of the Spring Framework. It lists updates to various packages in the framework, including bug fixes, dependency upgrades, and new features. Highlights include improved support for AspectJ, EHCache, TestNG, OpenJPA, and EclipseLink, as well as various enhancements to AOP, beans, caching, JDBC, JMS, and remoting.
------------------------------------- Package org.springframework.aop * changed serialization behavior of AbstractRegexpMethodPointcut and JdkRegexpMe thodPointcut to avoid recompilation Package org.springframework.core * fixed issue with GenericTypeResolver where garbage collection was prevented un der certain circumstances
Changes in version 2.5.6 (2008-10-31)
------------------------------------- General * removed outdated EAR support from sample applications * upgraded to AspectJ 1.6.2 (retaining compatibility with AspectJ 1.5.x and 1.6. x) * upgraded to EHCache 1.5.0 (retaining compatibility with EHCache 1.2 and higher ) * upgraded to TestNG 5.8 (retaining compatibility with TestNG 5.5 and higher) * upgraded to OpenJPA 1.1.0 (retaining compatibility with OpenJPA 1.0.x as well as 1.2.0) * upgraded to EclipseLink 1.0.1 (EclipseLinkJpaVendorAdapter requires EclipseLin k 1.0.0+ now) Package org.springframework.aop * AbstractAutoProxyCreator (as used by "aop:config") correctly ignores null bean instances * "aop:aspect" doesn't insist on aspect bean reference to be specified when just containing declare-parents elements * "bean" pointcut matches exposed FactoryBean products only; "&..." syntax suppo rted for matching FactoryBean itself Package org.springframework.beans * BeanUtils skips conventional editor check for array classes (in order to not b reak AspectJ weaving) * BeanWrapper's introspection resolves bridge methods to find setter method for getter method with covariant return type * TypeMismatchException message differentiates between editor with inappropriate value returned versus no editor at all * containing bean definition is exposed to ParserContext for BeanDefinitionDecor ators as well * BeanDefinition objects are considered equal even if their originating resource objects are different * AbstractFactoryBean's early singleton proxy handles equals, hashCode and toStr ing calls locally (avoiding eager init) * PropertyPathFactoryBean logs a warning if the target bean is still in creation at the time of obtaining the property * exposed public "copyRegisteredEditorsTo" method on ConfigurableBeanFactory int erface * fixed corner case in AbstractBeanDefinition where a ClassCastException could a rise in "getBeanClass(Name)" * DefaultSingletonBeanRegistry eagerly cleans up cached dependency information w hen destroying a bean * AbstractBeanFactory rejects getBean request with arguments in case of a pre-ex isting singleton of same name as well * AbstractAutowireCapableBeanFactory preserves possible matches hint in property exception * SmartInstantiationAwareBeanPostProcessor's "determineCandidateConstructors" is only invoked for non-null bean Class * ServiceLocatorFactoryBean handles equals and hashCode based on proxy object id entity * factored out "createBeanDefinition" template method in BeanDefinitionParserDel egate * turned visibility of BeanDefinitionParserDelegate's "checkNameUniqueness" meth od to protected * XML list/set/map elements (in both the beans and the util namespace) support n ested description element Package org.springframework.cache * EhCacheFactoryBean obtains decorated Ehcache instead of raw Cache, honoring pr e-configured cache decorators * removed useless "diskStorePath" property from EhCacheFactoryBean (ignored by a ll current EHCache versions anyway) Package org.springframework.context * DefaultMessageSourceResolvable and FieldError implement "equals" and "hashCode " such that all fields are respected * ClassPathBeanDefinitionScanner performs trace/debug logging during class resou rce introspection * ClassPathBeanDefinitionScanner ignores same class found multiple times in the classpath (i.e. equal bean definition) * component-scan preserves original source of scanned bean definitions, for sile ntly ignoring already scanned classes * annotation-config registers PersistenceAnnotationBeanPostProcessor independent from client bundle's class loader * added CUSTOM value to FilterType enumeration Package org.springframework.core * ClassPathResource uses cleaned path for relative resources as well * PathMatchingResourcePatternResolver considers URL protocol "vfszip" as jar fil e (to search JBoss-managed jars) * GenericCollectionTypeResolver correctly resolves collection element type even when target bean is a collection itself Package org.springframework.ejb * SpringBeanAutowiringInterceptor calls "InvocationContext.proceed()" in order t o invoke subsequent interceptors as well Package org.springframework.instrument * ShadowingClassLoader excludes "net.sf.cglib." package from shadowing by defaul t Package org.springframework.jdbc * provided Jdbc4SqlXmlHandler as default implementation of the SqlXmlHandler int erface * added SqlValue class to "jdbc.support" package, with SqlXmlValue derived from SqlValue instead of SqlTypeValue * SQLErrorCodesFactory always loads its "sql-error-codes.xml" files from Spring' s class loader (-> static singleton) * added "transientDataAccessResourceCodes" category to "sql-error-codes.xml", wi th default codes for DB2 and Sybase * SQLErrorCodeSQLExceptionTranslator applies default SQLExceptionSubclassTransla tor after error code translation only * SQLErrorCodeSQLExceptionTranslator is able to work without fallback SQLState t ranslation as well * SQLExceptionSubclassTranslator translates SQLFeatureNotSupportedException to I nvalidDataAccessApiUsageException * SQLStateSQLExceptionTranslator returns TransientDataAccessResourceException fo r well-known vendor-specific SQL states * factored out AbstractFallbackSQLExceptionTranslator base class for consistent "fallbackTranslator" capabilities * CallableStatementCreatorFactory strictly honors "SqlParameter.isInputValueProv ided" (allowing for statement caching) * JdbcTemplate passes full Calendar argument to JDBC driver even in case of no S QL type specified * JdbcTemplate does not call the costly "Statement.getWarnings()" unless ignoreW arnings=false or debug logging is on * added "checkFullyPopulated" setting to BeanPropertyRowMapper, for validating t hat all bean properties have been mapped Package org.springframework.jms * JmsException message and logged JMSException message explicitly includes linke d exception now if not already contained * SingleConnectionFactory only calls "Connection.stop()" on reset when the share d Connection has actually been started * SingleConnectionFactory explicitly creates Queue/TopicConnection when first ca ll is createQueue/TopicConnection method * CachingConnectionFactory explicitly creates Queue/TopicSession when first call is createQueue/TopicConnection method * CachingConnectionFactory's JMS Session proxies implement SessionProxy interfac e, allowing for access to target Session * CachingConnectionFactory rolls back cached transacted JMS Sessions on logical close if no commit/rollback was issued * CachingConnectionFactory explicitly closes cached JMS Sessions on Connection c lose * CachingConnectionFactory's cached producers pass on "disableMessageID" and "di sableMessageTimestamp" properties * CachingConnectionFactory also caches MessageConsumers (controlled through "cac heConsumers" property) * AbstractJmsListeningContainer eagerly clears shared JMS Connection after relea sing, avoiding repeated close exceptions * revised DefaultMessageListenerContainer to correctly work with non-JMS transac tion manager and CACHE_CONNECTION level * DefaultMessageListenerContainer supports a stop notification callback for unli mited maxMessagesPerTask as well now * introduced SubscriptionNameProvider interface for message listener objects sug gesting default subscription names * "jms:listener-container" uses actual message listener object's class name as d efault subscription name Package org.springframework.jmx * fixed NotificationListenerHolder to correctly handle multiple specified object names * added "allowEagerInit" property to MBeanExporter, for autodetecting lazy-init beans and FactoryBean-produced objects * added "environment" property to MBeanClientInterceptor and NotificationListene rRegistar, allowing for JMX env entries * added "refreshOnConnectFailure" property to MBeanClientInterceptor, allowing f or reconnect in case of I/O failure Package org.springframework.mail * ConfigurableMimeFileTypeMap explicitly closes the InputStream that it uses for "mime.types" resource reading Package org.springframework.mock * SimpleNamingContextBuilder supports "deactivate()"+"activate()", with the stan dard JNDI provider exposed inbetween Package org.springframework.orm * HibernateTemplate detects Spring-managed transactional Session even with Sessi onFactory proxy and allowCreate=false * HibernateTemplate's "loadAll" operation selects distinct root entities (avoidi ng duplicate entries in result list) * HibernateTemplate translates Hibernate's DataException into a Spring DataInteg rityViolationException (for consistency) * fixed HibernateTransactionManager's "earlyFlushBeforeCommit" feature to apply to the outermost transaction only * added "packagesToScan" property to Hibernate AnnotationSessionFactoryBean, for autodetection of @Entity classes * HibernateJpaDialect checks "EntityManager.getDelegate()" as well to find Hiber nate Session (for Seam compatibility) * added "persistenceXmlLocation" property to DefaultPersistenceUnitManager, as a lternative to "persistenceXmlLocations" * @PersistenceContext of type TRANSACTION allows returned Query objects to be pa rameterized and executed as well * @PersistenceContext for default EntityManagerFactory lookup works even in an @ Configurable Hibernate entity Package org.springframework.remoting * added "interceptors" property to RemoteExporter, allowing for registering cust om AOP interceptors before the endpoint * RmiClientInterceptor always logs connect failure at warn level, even when debu g logging (incl. stacktrace) is active * JndiRmiClientInterceptor skips narrowing for RmiInvocationHandler stubs (fixin g a regression in 2.5.4) * Hessian/Burlap service exporters explicitly close input and output streams now (not relying on servlet container) * Simple/CommonsHttpInvokerRequestExecutor set the current locale according to L ocaleContextHolder as HTTP lang header * JaxWsPortProxyFactoryBean exposes the JAX-WS BindingProvider interface in the Spring-generated proxy as well Package org.springframework.scheduling * SchedulerFactoryBean populates scheduler context first before satisfying Sched ulerContextAware on a given JobFactory * SchedulerFactoryBean uses bean name as default scheduler name (when "scheduler Name" property not explicitly specified) * SchedulerFactoryBean does not accept a pre-registered Scheduler instance in th e Quartz SchedulerRepository anymore * SchedulerFactoryBean does not expose the Spring-created/managed Scheduler to t he Quartz SchedulerRepository anymore * added "exposeSchedulerInRepository" flag to SchedulerFactoryBean, for explicit exposure to the SchedulerRepository * introduced SchedulerAccessorBean for registering jobs/triggers/listeners on an existing Quartz Scheduler instance * ScheduledExecutorFactoryBean uses Runnable decorator for logging exceptions th at lead to termination of execution Package org.springframework.test * SpringJUnit4ClassRunner skips execution of test classes with non-matching @IfP rofileValue annotation completely Package org.springframework.transaction * AbstractPlatformTransactionManager resumes after any kind of inner begin failu re (not just after TransactionException) * TransactionSynchronizationManager interaction gets logged at trace level only (minimizing debug log per transaction) * JotmFactoryBean sets "defaultTimeout" value as actual JOTM default (even if no transaction timeout specified at all) Package org.springframework.util * fixed "StringUtils.delete" to prevent an eternal loop in case of the pattern b eing empty * "StringUtils.cleanPath" preserves leading slash if given in original path * "FileSystemUtils.copyRecursively" ignores 'special' files (i.e. neither a regu lar file nor a directory) Package org.springframework.web * HttpRequestHandlerServlet propagates HTTP request locale into Spring's LocaleC ontextHolder * revised "WebUtils.extractFilenameFromUrlPath" to search actual URI part only e ven when given a URL with query string * Log4jNestedDiagnosticContextFilter/Interceptor explicitly remove the NDC stack if depth=0 after the "NDC.pop()" call * fixed FacesWebRequest's "getParameterValues" implementation to use "ExternalCo ntext.getRequestParameterValuesMap" * PortletContextResource cleans given path (analogous to ServletContextResource) * Servlet/PortletContextResource accept path with leading "/../" part as well (a s accepted by most servlet containers) * DispatcherServlet removes error-view-driven servlet request attributes after r endering (for Tomcat compatibility) * exposed "getParamName()" method on LocaleChangeInterceptor and ThemeChangeInte rceptor * added "cacheSecondsForSessionAttributeHandlers" property to Servlet/Portlet An notationMethodHandlerAdapter * AnnotationMethodHandlerAdapter exposes special ModelMap that removes BindingRe sult if target attribute gets replaced * Servlet AnnotationMethodHandlerAdapter always takes first exact @RequestMappin g path match as best path match * @MVC handler methods, model attribute methods and init binder methods allow fo r overriding a generic superclass method * @ModelAttribute annotated handler method arguments can resolve to a null value as well (when contained in the model) * standard method argument subtypes (such as a Principal subclass) fail with a d escriptive exception if incompatible * Portlet AbstractCommandController falls back to lazy command creation if sessi on timed out after action phase * ByteArray/StringMultipartFileEditor do not log warning but rather include root cause in IllegalArgumentException * InternalResourceView's "preventDispatchLoop" checks against the same request's URI only (for Portlet compatibility) * made RedirectView's "renderMergedOutputModel" implementation non-final * VelocityConfigurer exposes ServletContext as VelocityEngine attribute (analogo us to the standard VelocityViewServlet) * revised XsltView to specify full resource URI as StreamSource system id, for p roperly resolving relative paths * officially deprecated AbstractXsltView in favor of XsltView and its more flexi ble "locateSource" mechanism * revised error logging during XSLT processing to properly log compilation error s before an eventual fatal exception * moved internal TransformerUtils helper class to generic "org.springframework.u til.xml" package Changes in version 2.5.5 (2008-06-23) ------------------------------------- General * fixed SCM URL in Maven POMs * "-with-dependencies" distribution includes "jarcontent" folder now (needed for building from the source) * upgraded to Quartz 1.6.1 (includes a fix for the Spring trigger persistence pr oblem that was introduced in 1.6.0) * upgraded to Hibernate 3.3.0 (while retaining compatibility with Hibernate 3.1/ 3.2) * upgraded to iBATIS SQL Maps 2.3.2 (while retaining compatibility with iBATIS 2 .3.0) Package org.springframework.aop * added "proxyClassLoader" property to ProxyFactoryBean, AbstractSingletonProxyF actoryBean and AbstractAutoProxyCreator * CustomizableTraceInterceptor hides proxy class names even in log replacement s trings (if hideProxyClassNames=true) * CustomizableTraceInterceptor properly escapes all "\" and "$" symbols in repla cement values Package org.springframework.beans * revised GenericTypeAwarePropertyDescriptor for compatibility with IBM's JDK 1. 6 (avoiding NPE) * TypeMismatchException shows type description for mismatching JDK proxy values (listing their implemented interfaces) * CustomNumberEditor explicitly removes all inline whitespace from input Strings (for compatibility with French locales) * added "getDescription()" method to BeanDefinition interface (exposing the valu e of the XML bean description element) * AbstractFactoryBean uses bean ClassLoader for the generation of early singleto n proxies * PropertyPlaceholderConfigurer correctly manages resolution of set entries and map keys with modified hash code * fixed DefaultSingletonBeanRegistry's singleton exposure to remove singleton fa ctory after creation of singleton object * DefaultSingletonBeanRegistry only exposes related causes on outermost creation exception (avoiding excessive logging) * DefaultSingletonBeanRegistry only registers same related cause (i.e. same mess age, same chained cause) once * DefaultListableBeanFactory only registers causes during constructor resolution when resolution eventually fails * DefaultListableBeanFactory checks primary attribute in bean definitions of par ent factory as well * fixed DefaultListableBeanFactory to use a post-processing lock (for proper syn chronization of annotation scanning) * dependency check "simple" accepts Number, Date, URI, URL and Locale as well (c onsistent with simple MVC value types) * UnsatisfiedDependencyException preserves full nested exception stacktrace in c ase of a BeansException * added overloaded BeanComponentDefinition constructor with aliases argument * GenericBeanFactoryAccessor's "getBeansWithAnnotation" performs deep search (in cluding interfaces and target class) * added "findAnnotationOnBean" method to GenericBeanFactoryAccessor, performing a deep search on a specific bean * BeanConfigurerSupport (@Configurable processing) includes type of bean in warn log when called in unconfigured state * restored BeanConfigurerSupport's silent skipping in case of no BeanFactory con figured yet Package org.springframework.context * factored out MessageSourceSupport base class from AbstractMessageSource, provi ding common MessageFormat handling * DelegatingMessageSource resolves message arguments in default messages even if there is no parent MessageSource * MessageSourceResourceBundle exposes Spring-specified locale through overridden "ResourceBundle.getLocale()" method * revised CommonAnnotationBeanPostProcessor's "getResource" method to allow for proper overriding in subclasses * ClassPathBeanDefinitionScanner always accepts explicit bean definition of same name as override for scanned bean * added type="custom" expression="<classname>" option to component-scan's "inclu de-filter"/"exclude-filter" * component-scan's "include-filter"/"exclude-filter" entries are validated indiv idually (for Spring IDE) Package org.springframework.core * added assertions to GenericTypeResolver (avoiding NPEs) * factored out generic ConfigurableObjectInputStream class from CodebaseAwareObj ectInputStream in RMI support * re-enabled PathMatchingResourcePatternResolver's JarURLConnection handling (ac cidentally disabled in 2.5.4) Package org.springframework.ejb * "jee:local/remote-slsb" accepts plain object returned from EJBHome create meth od (for JBoss 4.2 EJB3 compatibility) * added "exposeAccessContext" flag to AbstractSlsbInvokerInterceptor, for WebLog ic resource factories with authorization * added "expose-access-context" flag to "jee:local-slsb", "jee:remote-slsb" and "jee:jndi-lookup" Package org.springframework.jdbc * added SimpleDriverDataSource alternative to DriverManagerDataSource, avoiding class loading and synchronization issues * BeanPropertySqlParameterSource uses specific integer/decimal SQL types by defa ult now (e.g. TINYINT, BIGINT, DOUBLE) * introduced SqlXmlHandler abstraction (for the XML support in the Advanced Pack for Oracle Database) * added further SQL error code mapping for MS SQL Server Package org.springframework.jms * SingleConnectionFactory and TransactionAwareConnectionFactoryProxy use JMS API ClassLoader for proxy generation * JmsTemplate properly allows for overriding "getDefaultDestination()" and "getD efaultDestinationName()" * AbstractJmsListeningContainer sets Connection to null on shutdown, allowing fo r smooth reinitialization * DefaultMessageListenerContainer performs lazy setup in case of any connection exception (also JNDI lookup failure) * DefaultMessageListenerContainer is able to recover all cases where the provide r is not available on startup * fixed DefaultMessageListenerContainer to avoid race condition when stopping th rough lock on unified monitor * added "container-class" attribute to "jms:listener-container" element, for spe cifying a custom implementation class * MessageListenerAdapter and JmsInvokerServiceExporter use message id as correla tion id if no request correlation id set Package org.springframework.jmx * MBeanExporter performs default MBeanServer lookup even when registering notifi cation listeners only Package org.springframework.jndi * added "exposeAccessContext" flag to JndiObjectFactoryBean, for WebLogic resour ce factories with authorization Package org.springframework.mail * removed overlapping "application/x-pointplus" MIME type for "css" extension fr om MimeMessageHelper's default mappings Package org.springframework.orm * improved HibernateTransactionManager's InvalidIsolationLevelException exceptio n message (-> SpringTransactionFactory) * added "hibernateManagedSession" flag to HibernateTransactionManager, for worki ng with a custom CurrentSessionContext * documented use of Hibernate StatelessSession with Spring's DataSourceTransacti onManager/HibernateTransactionManager * added support for Derby and H2 through Hibernate/OpenJpa/TopLink/EclipseLinkJp aVendorAdapter's "database" property * Hibernate/TopLink/JDO/JPA proxy classes are generated in the ORM provider's Cl assLoader (for full visibility in OSGi) * Spring-enriched JPA proxies are created in the application's ClassLoader (maki ng any vendor interfaces work in OSGi) * fixed AbstractEntityManagerFactoryBean's EMF proxy to handle equals/hashCode l ocally (for correct equals behavior) * iBATIS SqlMapClientFactoryBean supports multiple sql-map-config files and also patterns ("configLocations" property) * iBATIS SqlMapClientFactoryBean supports Spring resource/pattern lookup of sql- map files ("mappingLocations" property) Package org.springframework.remoting * RemoteAccessException explicitly declares serialVersionUID (for serialization compatibility on WebLogic) * (Simple)HttpInvokerServiceExporter uses the ClassLoader of the containing Bean Factory for deserialization * fixed JaxWsClientInterceptor to throw a RemoteConnectFailureException (if appl icable) instead of returning it * added support for "username"/"password"/"maintainSession"/"useSoapAction"/etc properties to JaxWsClientInterceptor * added SimpleHttpServerJaxWsServiceExporter, allowing for exposure through a fu lly configurable Sun JDK 1.6 HttpServer * added "filters" and "authenticator" property to SimpleHttpServerFactoryBean fo r Sun's JDK 1.6 HttpServer * revised HessianExporter's "debug" feature to work on Hessian 3.0.20+ as well ( with input debugging only) Package org.springframework.scheduling * SchedulerFactoryBean's "jobSchedulingDataLocation" feature is compatible with Quartz 1.6.1 now (requiring 1.6.1+) Package org.springframework.scripting * ScriptFactoryPostProcessor ignores any "predictBeanType" failure (in particula r reference to currently created bean) * GroovyScriptFactory also converts CompilationFailedException to ScriptCompilat ionException during type determination Package org.springframework.test * added "prepareApplicationContext(GenericApplicationContext)" template method t o AbstractSingleSpringContextTests * added "prepareContext(GenericApplicationContext)" template method to AbstractG enericContextLoader * removed unnecessary "throws Exception" declarations from ReflectionTestUtils * added "getField" and "invokeGetterMethod" methods to ReflectionTestUtils Package org.springframework.transaction * transactional resource synchronization works even for operations triggered dur ing commit (e.g. by JPA PostUpdate) * strengthened warning regarding @Transactional use on interfaces versus classes * "tx:annotation-driven" registers revised TransactionAttributeSourceAdvisor, in itializing TransactionInterceptor lazily Package org.springframework.util * publicly exposed "isVisible" method on ClassUtils * added "getField" and simple "findField" method to ReflectionUtils * NumberUtils avoids overflow when converting from BigDecimal to BigInteger * NumberUtils automatically supports JDK 1.5+ localized BigDecimal parsing * added various overloaded methods with a CharSequence argument (as alternative to a String argument) to StringUtils * removed Commons Log usage from SystemPropertyUtils, ClassUtils, FileCopyUtils (avoiding early Log4J initialization) * revised CachingMapDecorator to expose all state representations in a thread-sa fe manner, even for pure introspection * revised CachingMapDecorator to use weak references for caching only (not losin g a value from get) Package org.springframework.validation * fixed DefaultBindingErrorProcessor to register correct "missing field" errors within specified nested path Package org.springframework.web * revised RequestAttributes access from child threads in order to not touch the request object after request completion * DispatcherServlet exposes the Servlet spec's error attributes to error views ( for JSP error page compatibility) * HandlerMethodInvoker does not eagerly copy entire model Map in order to avoid lazy initialization of attribute values * Servlet AnnotationMethodHandlerAdapter throws ambiguity exception in case of e quivalent mappings with same method name * Portlet AbstractMapBasedHandlerMapping sorts predicates before checking them ( according to their natural order) * Portlet DefaultAnnotationHandlerMapping checks default mappings last, independ ent from order of controller definition * RedirectView uses request's encoding (default ISO-8859-1) if no encoding schem e specified (previous default was UTF-8) * RedirectView considers arrays and collections with eligible values, turning th em into multi-value request parameters * RedirectView accepts StringBuffers, StringBuilders, Numbers, Dates, URIs, URLs and Locales as eligible values as well * factored out common temporary byte array handling from AbstractPdfView etc int o AbstractView base class * added AbstractPdfStamperView as alternative to AbstractPdfView, operating on a n existing document with an AcroForm * fixed AbstractJasperReportsView to fully isolate a model-specified JDBC DataSo urce (not setting it as view DataSource) * AbstractJasperReportsView gives specified JDBC DataSource precedence over impl icit report data value in model * AbstractJasperReportsView proceeds without report data value in case of multip le collections or object arrays * added "autocomplete" attribute to JSP FormTag (for a form-wide setting, as alt ernative to InputTag's "autocomplete") * JSF DelegatingVariableResolver and SpringBeanFacesELResolver log resolution su ccess at trace level only
Changes in version 2.5.4 (2008-04-28)
------------------------------------- General * upgraded to AspectJ 1.6 (while retaining compatibility with AspectJ 1.5.x) * fixed spring-core.jar's manifest to contain correct OSGi Import-Package declar ation * removed superfluous DynamicImport-Package declarations from OSGi manifests * all decorator proxies are using identity hash code of the proxy instead of the InvocationHandler hash code now Package org.springframework.aop * fixed various AspectJ expression evaluation bugs through upgrading aspectjweav er.jar to AspectJ 1.6 Package org.springframework.beans * added CharsetEditor for JDK 1.4's "java.nio.charset.Charset" class to default property editors * BeanWrapper explicitly finds default PropertyEditor according to "Editor" suff ix convention * deprecated BeanWrapper's fallback to the global JavaBeans PropertyEditorManage r * DirectFieldAccessor registers Spring's common default PropertyEditors (like Be anWrapperImpl does) * fixed AbstractBeanDefinition to properly include qualifiers and primary flag i n equals comparison * AbstractAutowireCapableBeanFactory's handling of lazy-init singletons is threa d-safe again * AbstractAutowireCapableBeanFactory only invokes "predictBeanType" post-process or method for non-null bean Class Package org.springframework.core * introduced InfrastructureProxy interface for resource proxies to be implemente d if supposed to be considered as equal * DefaultResourceLoader's ClassPathContextResource also returns ClassPathContext Resource from "createRelative" * PathMatchingResourcePatternResolver resolves encoded jar URIs before creating JarFiles (for WebSphere compatibility) * PathMatchingResourcePatternResolver catches NoClassDefFoundError when looking for presence of Equinox classes * SimpleMetadataReaderFactory uses ResourceLoader's ClassLoader for loading anno tation classes (for OSGi compatibility) Package org.springframework.jdbc * JdbcTemplate explicitly detects and skips null ResultSets returned from Callab leStatement * BeanPropertySqlParameterSource avoids default use of JDBC 3.0's Types.BOOLEAN (for compatibility with MySQL) Package org.springframework.jms * fixed CachedMessageProducer to initialize its deliveryMode, priority and timeT oLive fields with the target's settings Package org.springframework.orm * fixed Hibernate 3.2 support to flush updates before queries even within purely Spring-managed JTA transactions * Hibernate3 LocalSessionFactoryBean sets new SpringTransactionFactory as defaul t in case of no JTA TransactionManager Package org.springframework.remoting * JndiRmiClientInterceptor/ProxyFactoryBean work for JNDI objects which do not i mplement the Remote interface as well Package org.springframework.test * "executeSqlScript" (as in SimpleJdbcTestUtils) allows for multi-line statement s, each separated by a semicolon Package org.springframework.transaction * TransactionSynchronizationManager automatically unwraps InfrastructureProxy ob jects for raw key comparisons * AbstractFallbackTransactionAttributeSource uses concurrent Map for attribute c ache in order to avoid lock contention Package org.springframework.validation * AbstractPropertyBindingResult's "formatFieldValue" finds PropertyEditor accord ing to "Editor" suffix convention too * DefaultBindingErrorProcessor registers "missing field" errors within specified nested path (if any) Package org.springframework.web * added "findParameterValue" convenience method to WebUtils * ContextLoader uses its own ClassLoader for loading the default strategy (XmlWe bApplicationContext) * added "contextAttribute" property (for WebApplicationContext retrieval) to Del egatingFilterProxy and FrameworkServlet * RequestContext does not fail when WebApplicationContext's ServletContext is nu ll (like in a plain Portlet environment) * HandlerMethodInvoker does not copy whole model Set for session attribute expos ure anymore (avoiding lazy value init) * fixed JSP form tags to properly return SKIP_BODY instead of the non-defined EV AL_PAGE (for WebLogic compatibility)
Changes in version 2.5.3 (2008-04-06)
------------------------------------- General * replaced junit-4.4.jar in with-dependencies distribution with official JUnit 4 .4 jar * spring.jar does not include InstrumentationSavingAgent class anymore (for pare nt-last class loaders) * spring-context.jar includes optional OSGi imports for "context:annotation-conf ig"'s autodetection purposes * Spring reference documentation covers JSF 1.2 and contains updated Struts 2.0 and Tapestry references * Spring reference documentation covers annotation-based controllers in Portlet chapter Package org.springframework.aop * deprecated ProxyFactoryBean's support for a target as last element in "interce ptorNames" in favor of "targetName" * ProxyFactoryBean assumes a target bean if type cannot be determined for last e lement in "interceptorNames" list * AbstractAutoProxyCreator predicts proxy class as bean type if known already (i nstead of predicting the target class) * AbstractAutoProxyCreator exposes early singleton proxies (for resolving circul ar reference between proxied beans) * "bean(...)" pointcut designator matches against bean name aliases as well, not just against the canonical bean name Package org.springframework.beans * CharacterEditor's "allowEmpty" only translates empty String to null, keeping a single space String as space character * CustomNumberEditor treats number with leading zeros as decimal (removed unwant ed octal support while preserving hex) * GenericTypeAwarePropertyDescriptor respects "propertyEditorClass" specified on original PropertyDescriptor * renamed ListableBeanFactory's "includePrototypes" flag to "includeNonSingleton s" (affects javadoc only) * added "getEarlyBeanReference" hook to SmartInstantiationAwareBeanPostProcessor interface * AbstractBeanFactory does not log full exception stack trace (at debug level) o n FactoryBean type check anymore * AbstractAutowireCapableBeanFactory allows for resolving circular reference bet ween beans wrapped by BeanPostProcessors * DefaultListableBeanFactory passes full inherited AccessControlContext to the A ccessController for bean creation * DefaultListableBeanFactory does not eagerly initialize target beans when autow iring a PriorityOrdered post-processor * PropertyPlaceholderConfigurer supports nested keys in placeholder keys as well (e.g. "${db.${environment}}") * PropertyPlaceholderConfigurer works properly even in case of default-autowire= "byType" with FactoryBeans involved * fixed PropertyPlaceholderConfigurer's "nullValue" handling to avoid NPE for ne sted value * added "ignoreUnresolvableEditors" property to CustomEditorConfigurer, allowing to ignore type/editor classes not found * XmlBeanDefinitionReader's "getValidationModeForResource" method is protected n ow in order to allow for overriding * AbstractSimpleBeanDefinitionParser properly ignores namespace declaration attr ibutes ("xmlns"/"xmlns:") * AutowiredAnnotationBeanPostProcessor processes @Autowired annotation on most s pecific method only (when overriding) * AutowiredAnnotationBeanPostProcessor marks @Autowired bean properties as proce ssed (for @Required to accept them) Package org.springframework.context * ReloadableResourceBundleMessageSource is able to detect updates for a properti es file stored in a jar/zip as well * AbstractApplicationContext's temporary ClassLoader explicitly excludes types t o match (for OSGi LTW compatibility) * restored support for null location array argument in ClassPathXmlApplicationCo ntext (for Apache CXF compatibility) * added "registration" attribute to mbean-export element, accepting "failOnExist ing"/"ignoreExisting"/"replaceExisting" * CommonAnnotationBeanPostProcessor processes @Resource annotation on most speci fic method only (when overriding) * revised default annotation post-processor ordering to apply most specific proc essors first Package org.springframework.core * Conventions detects special generated subclasses (e.g. by OpenJPA) and derives the variable name from the superclass * revised LocalVariableTableParameterNameDiscoverer to avoid potential NPE in ca se of no parameter names found on Java 5 * revised DefaultValueStyler (and deprecated ReflectiveVisitorHelper) for better performance and no class loader leaks * StaticLabeledEnumResolver uses weak references to LabeledEnum class in order t o avoid class loader leaks * added "lastModified()" method to Resource interface, for abstract access to th e last-modified timestamp * ClassPathResource and UrlResource use the last-modified timestamp of the archi ve file for jar/zip contents * PathMatchingResourcePatternResolver sets "useCaches=false" on any JarURLConnec tion that it opens for path matching * PathMatchingResourcePatternResolver detects WebSphere 6.1 "bundleresource:" UR Ls and resolves them for path matching Package org.springframework.ejb * added "cacheSessionBean" flag to SimpleRemoteStatelessSessionProxyFactoryBean, for caching the session bean object * added "cache-session-bean" attribute to "jee:remote-slsb" configuration elemen t * Spring 2.5 "jee:*" config elements use resource-ref="true" by default (non-res ource-ref names will still work as well) Package org.springframework.jdbc * JndiDataSourceLookup uses "resourceRef"=true by default (being able to resolve J2EE "jdbc/myDb" ENC names by default) * NativeJdbcExtractorAdapter only processes DatabaseMetaData Connection if non-n ull (for WebLogic cluster compatibility) * fixed SQLException translation for IBM DB2 and MS SQL to operate on error code s first, just falling back to SQL state * added MySQL NDB error codes and further DB2 error codes to default "sql-error- codes.xml" file * factored out common AbstractColumnMaxValueIncrementer base class from Derby/Hs ql/MySQLMaxValueIncrementer * added DB2MainframeSequenceMaxValueIncrementer for DB2/390 and DB2/400 (differi ng from DB2 UDB for Unix and Windows) * added "wrapAsLob" property to DefaultLobHandler, for passing Blob/Clob instanc es to the JDBC driver (for PostgreSQL) * DefaultLobHandler's "streamAsLob" setting (requires JDBC 4.0) applies to byte array and String arguments as well * JdbcTemplate creates LinkedHashMap (instead of plain HashMap) as default resul ts Map returned from "call" operation * JdbcDaoSupport does not override specified JdbcTemplate on subsequent "setData Source" call for same DataSource * NamedParameterJdbcTemplate ignores Postgres-style "::" casting operator (i.e. not treated as named parameter) * SimpleJdbcInsert supports "autoGeneratedKey" simulation using "insert ... retu rning" for PostgreSQL 8.2 and later * SimpleJdbcCall supports metadata lookup of procedure columns for PostgreSQL (r equires JDBC driver 8.3 or later) Package org.springframework.jms * SingleConnectionFactory accepts "Connections.setClientID" calls with the same client ID as specified on the factory * SingleConnectionFactory accepts further "Connection.setExceptionListener" call s in "reconnectOnException" mode * introduced CachingConnectionFactory (as subclass of SingleConnectionFactory) f or JMS 1.1 session and producer pooling * SimpleMessageListenerContainer registers itself as ExceptionListener for autom atic Connection recovery * added "runningAllowed()" template method to DefaultMessageListenerContainer, a llowing subclass to temporarily suspend * DefaultMessageListenerContainer scales concurrent invokers eagerly in case of a sudden burst (revised idle handling) * DefaultMessageListenerContainer uses a "maxMessagesPerTask" default of 10 when associated with a ScheduledTaskExecutor * DefaultMessageListenerContainer propagates JMSExceptions thrown from a listene r, potentially triggering recovery * MessageListenerAdapter propagates JMSExceptions thrown from listener method as -is (no wrapping in runtime exception) * MessageListenerAdapter invokes target (SessionAware)MessageListener immediatel y, not extracting the content upfront * added "cache" attribute to "jms:listener-container" configuration element, for customizing the resource cache level Package org.springframework.jmx * MBeanExporter's autodetection does not cause CannotLoadBeanClassException for lazy-init beans (Spring 2.0 compatible) Package org.springframework.jndi * JndiLocatorSupport tries fallback lookup for originally specified JNDI name if resource-ref adapted name wasn't found * JndiObjectFactoryBean exposes the bean ClassLoader as thread context ClassLoad er (if necessary) Package org.springframework.mock * MockHttpServletResponse's "encodeURL" allows for central overriding in subclas ses (affecting "encodeRedirectURL" too) * SimpleNamingContext's "createSubcontext" works correctly for given subcontext names without trailing slash as well Package org.springframework.orm * XxxDaoSupport does not override specified XxxTemplate on subsequent "setZzzFac tory" call for same factory * added "executeWithNewSession" and "executeWithNativeSession" methods to Hibern ateTemplate * revised EntityManagerFactoryInfo handling to autodetect all EntityManager inte rfaces if no JpaVendorAdapter specified * PersistenceAnnotationBeanPostProcessor processes annotations on most specific method only (when overriding) Package org.springframework.remoting * revised (Simple)Hessian/BurlapServiceExporter's handling of non-POST requests (avoiding unnecessary warnings) Package org.springframework.scheduling * added "waitForTasksToCompleteOnShutdown" property to ThreadPoolTaskExecutor * changed ThreadPoolTaskExecutor's default behavior to shutdown immediately, not waiting for scheduled tasks * ThreadPoolTaskExecutor extends CustomizableThreadFactory for common bean prope rties and uses itself as default factory * ThreadPoolTaskExecutor uses its bean name as default thread name prefix (analo gous to DefaultMessageListenerContainer) * MethodInvokingRunnable logs target exception directly at error level (instead of InvocationTargetException wrapper) * MethodInvokingJobDetailFactoryBean propagates invocation exceptions as non-Job ExecutionExceptions (for error logging) * DelegatingJob propagates exceptions as-is instead of wrapping them in JobExecu tionExceptions (for error logging) Package org.springframework.scripting * ResourceScriptSource is able to detect updates for a script file stored in a j ar/zip as well Package org.springframework.test * @IfProfileValue correctly checked against concrete test class, even in case of overridden test methods * @IfProfileValue annotation without specified value checks against presence (no n-null value) of the given profile key * "executeSqlScript" (as in SimpleJdbcTestUtils) allows for multiple statements per line, separated by semicolons * SpringJUnit4ClassRunner catches AssumptionViolatedException in @Before methods (analogous to standard JUnit 4.4) * SpringJUnit4ClassRunner executes befores/afters in same thread for test method with JUnit timeout (-> transactions) * TransactionalTestExecutionListener is able to manage concurrent transactions f or different test methods (with timeout) * TransactionalTestExecutionListener reobtains transaction manager for every tra nsaction (picking up context changes) * fixed Abstract(Transactional)JUnit(38/4)SpringContextTests classes to be actua lly marked as abstract Package org.springframework.transaction * JtaTransactionManager" checks JNDI location "java:appserver/TransactionManager " for GlassFish's primary TM handle Package org.springframework.util * "ClassUtils.resolveClassName" preserves the original root cause in the rethrow n IllegalArgumentException * NumberUtils treats number with leading zeros as decimal (removed unwanted octa l support while preserving hex) * MethodInvoker scans all declared methods (of any visibility), being able to in voke protected/private methods as well * added "getChildElementsByTagNames" method with tag names Collection argument t o DomUtils Package org.springframework.validation * factored out AbstractErrors base class from AbstractBindingResult, providing c ommon access to evaluated errors * added "getRawFieldValue" and "findEditor" methods to BindingResult interface ( for a completely decoupled BindStatus) * fixed AbstractPropertyBindingResult's "getFieldType" to correctly apply nested path to field name * added convenience constructors to ObjectError and FieldError Package org.springframework.web * ContextLoader accepts system property placeholders in "contextConfigLocation" value (again) * OncePerRequestFilter cleans up its marker attribute at the end of each outer r equest (for Portlet compatibility) * RequestContextFilter supports "threadContextInheritable" init-param (analogous to DispatcherServlet) * HttpRequestHandlerServlet translates HttpRequestMethodNotSupportedException in to HTTP status code 405 * DispatcherServlet translates HttpRequestMethodNotSupportedException into HTTP status code 405 by default * introduced WEB_APPLICATION_CONTEXT_ATTRIBUTE in RequestContext, for overriding the DispatcherServlet context * ControllerClassNameHandlerMapping detects @Controller beans by default as well * ControllerClassNameHandlerMapping registers plain path for multi-action contro llers too ("/welcome/*" + "/welcome") * added ControllerBeanNameHandlerMapping, deriving URL paths from bean names for well-known controller types * AnnotationMethodHandlerAdapter's @RequestMapping matching is deterministic ind ependent from the declared methor order * AnnotationMethodHandlerAdapter accepts @RequestParam annotations for @InitBind er methods as well * AnnotationMethodHandlerAdapter always exposes BindingResult objects for model attributes which are binding candidates * AnnotationMethodHandlerAdapter throws clear IllegalStateException in case of i nvalid BindingResult argument * Portlet AnnotationMethodHandlerAdapter supports Servlet ModelAndView and View objects as handler method return values * default attribute names for annotated handler method return values are consist ently derived from the declared type * added "exposedContextBeanNames" property to InternalResourceView(Resolver), fo r exposing specific Spring beans only * InternalResourceView does not enforce ApplicationContext to be set anymore (al lowing for "getServletContext" checking) * JstlView, Tiles(Jstl)View and AbstractJasperReportsView expose current Request Context's MessageSource for localization * JSP form tags do not autogenerate id in case of empty id specified (empty id s ignals no id to be rendered) * JSP OptionTag and OptionsTag support "id" attribute now, analogous to RadioBut ton(s)Tag and Checkbox(es)Tag * added standard HTML "target" attribute to JSP FormTag, for submitting to anoth er window/frame * fixed JSP LabelTag to render valid default "for" attribute for collection/map paths as well * fixed AbstractJasperReportsView to build exception messages for the specific s ub-report location
Changes in version 2.5.2 (2008-02-29)
------------------------------------- General * various reference documentation revisions (e.g. updated transaction management chapter) * removed outdated showcases sample applications from Spring distribution * spring-context.jar does not include InstrumentationSavingAgent class anymore ( for parent-last class loaders) Package org.springframework.aop * AbstractRegexpMethodPointcut matches against target class as well, not just ag ainst method's declaring class * ProxyFactoryBean and AbstractAutoProxyCreator check autodetected proxy interfa ces for visibility in the ClassLoader * Cglib2AopProxy properly detects overridden "finalize()" methods, never dispatc hing them to the interceptor chain * CustomizableTraceInterceptor properly escapes method names and exception messa ges for regex parsing (wrt "$" signs) * marked AbstractRefreshableTargetSource's status accessors as synchronized * AbstractBeanFactoryBasedTargetSourceCreator applies containing BeanFactory's c onfiguration to internal BeanFactory * AbstractBeanFactoryBasedTargetSourceCreator creates an independent internal Be anFactory per target bean * deprecated ClassLoaderAnalyzerInterceptor and associated ClassLoaderUtils clas s * reintroduced AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(ParserConte xt,Object) for Spring 2.0 compatibility Package org.springframework.beans * introduced PropertyAccessorFactory facade for obtaining BeanWrapper and direct field accessor instances * deprecated BeanWrapper's "setWrappedInstance" method in favor of recreating a BeanWrapper per target instance * BeanWrapperImpl trims an enum candidate value before matching it against the a vailable enum values * BeanWrapperImpl resolves the target type for a generically typed bean property , performing appropriate type conversion * StringArrayPropertyEditor (for comma-delimited splitting of array elements) re gistered for short[], int[], long[] too * CustomDateEditor and CustomNumberEditor preserve original ParseException as ro ot cause of IllegalArgumentException * MethodInvokingFactoryBean falls back to interpreting specified arguments as si ngle method argument of array type * deprecated RefreshablePagedListHolder class and associated PagedListSourceProv ider interface * added "getOriginatingBeanDefinition()" method to BeanDefinition interface, exp osing the decorated definition (if any) * PropertyOverrideConfigurer is able to properly override target bean definition s behind a scoped proxy decorator * added "nullValue" property to PropertyPlaceholderConfigurer, allowing for reso lving specific Strings into a null value * CustomEditorConfigurer and CustomScopeConfigurer accept editor/scope values as class names as well * factored out AliasRegistry/SimpleAliasRegistry from BeanDefinitionRegistry/Abs tractBeanFactory * introduced SimpleBeanDefinitionRegistry implementation for bean definition rea der testing * "registerAlias" allows for overriding as long as bean definition overriding is allowed * added convenient "autowireBean(Object existingBean)" method to AutowireCapable BeanFactory * AbstractAutowireCapableBeanFactory removes singleton if created for type check in case of circular reference issues * AbstractAutowireCapableBeanFactory applies specified TypeConverter to bean ref erences as well (not just to literals) * AbstractAutowireCapableBeanFactory resolves the target type for a generically typed dependency (method parameter) * AbstractAutowireCapableBeanFactory's "applyBeanPropertyValues" fully initializ es the BeanWrapper used for binding * AbstractAutowireCapableBeanFactory's "applyBeanPropertyValues" and "configureB ean" use a cached merged bean definition * fixed AbstractAutowireCapableBeanFactory's "configureBean" (@Configurable) to avoid bean name creation for inner beans * fixed AbstractAutowireCapableBeanFactory to skip invocation of InstantiationAw areBeanPostProcessors for null bean * fixed AbstractAutowireCapableBeanFactory to always resolve the bean class befo re a FactoryBean type check * added "freezeConfiguration()" method to Configurable/DefaultListableBeanFactor y, allowing for eager metadata caching * revised bean destruction logging to log at WARN level with exception toString only (full exception at DEBUG level) * AutowiredAnnotationBeanPostProcessor resolves the target type for a genericall y typed dependency (method parameter) * fixed AutowiredAnnotationBeanPostProcessor to correctly cache a collection wit h a single autowired bean as element * fixed AutowiredAnnotationBeanPostProcessor to not cache special dependencies s uch as request and session references * deprecated AbstractBeanDefinition's Spring 1.2 style "setSingleton" method in favor of Spring 2.0's "setScope" * deprecated BeanDefinitionBuilder's "addConstructorArg" in favor of the consist ently named "addConstructorArgValue" * deprecated various rarely used BeanDefinitionBuilder methods in favor of setti ngs on the raw BeanDefinition object * added overloaded "genericBeanDefinition(beanClass)" method and "setParentName" method to BeanDefinitionBuilder * added support for "(scope)" key to PropertiesBeanDefinitionReader: e.g. "myBea n.(scope)=prototype" * refactored AbstractBeanConfigurerAspect into Abstract(InterfaceDriven)Dependen cyInjectionAspect * nested XML decoration elements (e.g. "aop:scoped-proxy") are explicitly reject ed if no corresponding handler present * InitDestroy/Autowired/Common/PersistenceAnnotationBeanPostProcessor perform ap propriate debug logging * factored out generic SpringBeanELResolver and SimpleSpringBeanELResolver from "web.jsf.SpringBeanFacesELResolver" Package org.springframework.context * added "getId()" method to ApplicationContext interface, with corresponding "se tId" in AbstractApplicationContext class * moved CONFIG_LOCATION_DELIMITERS constant from ConfigurableWebApplicationConte xt to ConfigurableApplicationContext * fixed AbstractApplicationContext to correctly ignore FactoryBean results that implement the Lifecycle interface * AbstractApplicationContext processes Lifecycle callbacks in the order of bean creation by default * AbstractApplicationContext explicitly freezes its bean factory configuration a t the end of the "refresh()" phase * exposed "allowBeanDefinitionOverriding"/"allowCircularReferences" properties i n AbstractRefreshableApplicationContext * factored out AbstractRefreshableConfigApplicationContext base class for common handling of specified config locations * ClassPathXmlApplicationContext and FileSystemXmlApplicationContext allow for b ean-style configuration * StaticApplicationContext builds GenericBeanDefinitions by default (instead of RootBeanDefinitions) * added "initApplicationContext(ApplicationContext)" template method to Applicat ionObjectSupport * ClassPathBeanDefinitionScanner detects scoped-proxy bean definitions as compat ible (in case of duplicate scanning) * refactored ClassPathBeanDefinitionScanner into various template methods (for e asier overriding) * refactored ComponentScanBeanDefinitionParser into various template methods (fo r easier overriding) * ComponentScanBeanDefinitionParser includes annotation config processors in nes ted composite component * "context:component-scan" resolves "${...}" placeholders in package paths again st system properties * "context:component-scan" explictly ignores directories that accidentally match a specified custom resource pattern * fixed "context:load-time-weaver" to not break post-processor detection in case of Spring jars deployed as shared libs * added "context:property-override" configuration element, as a sibling to "cont ext:property-placeholder" Package org.springframework.core * introduced Named(Inheritable)ThreadLocal, used throughout the framework for se lf-descriptive thread-bound context * added "getParameterName()" method to MethodParameter, activated through a Para meterNameDiscoverer * factored out GenericTypeResolver from BridgeMethodResolver and GenericCollecti onTypeResolver * factored out DecoratingClassLoader base class from OverridingClassLoader and S hadowingClassLoader * added "isReadable()" method to Resource interface, giving a readability hint u pfront (supported by FileSystemResource) * fixed ClassMetadataReadingVisitor (as used by "context:component-scan") to cor rectly ignore *usage* of inner classes Package org.springframework.dao * PersistenceExceptionTranslationPostProcessor extends ProxyConfig and applies i ts settings to newly created proxies Package org.springframework.ejb * Local/SimpleRemoteSlsbInvokerInterceptor use EJB(Local)Home for EJB 2.x detect ion, for WebSphere compatibility * SimpleRemoteSlsbInvokerInterceptor properly detects CORBA connect failures on the IBM JVM (for WebSphere EJB access) Package org.springframework.instrument * added public "isInstrumentationAvailable()" method to InstrumentationLoadTimeW eaver, avoiding direct access to agent * fixed ShadowingClassLoader to not attempt defining a package in case of a clas s in the default package Package org.springframework.jca * ResourceAdapterApplicationContext registers BootstrapContext as resolvable dep endency type (for @Autowired) * ResourceAdapterApplicationContext registers WorkManager as lazily resolvable d ependency type (for @Autowired) * added "workManagerName" property to WorkManagerTaskExecutor, for J2EE env look ups in JNDI (e.g. a Geronimo gbean-ref) * introduced JBossWorkManagerTaskExecutor as adapter for the JBoss JCA WorkManag er (analogous to CommonJ) * introduced GlassFishWorkManagerTaskExecutor as adapter for the GlassFish JCA W orkManager (analogous to CommonJ) Package org.springframework.jdbc * DriverManagerDataSource's "driverClassName" throws IllegalStateException inste ad of CannotGetJdbcConnectionException * added "defaultTransactionIsolationName" property to LazyConnectionDataSourcePr oxy * SQLStateSQLExceptionTranslator translates "01*" data truncation codes into Dat aIntegrityViolationException * SQLStateSQLExceptionTranslator translates "61*" deadlock codes into Concurrenc yFailureException * SQLErrorCodesSQLExceptionTranslator falls back to SQL state translation for IB M DB2 and MS SQL by default * added further default "sql-error-codes.xml" mappings for MS SQL, MySQL, Postgr eSQL and Oracle * DatabaseStartupValidator lets startup continue instead of 'busy' waiting in ca se of thread interruption * JdbcTemplate falls back to type VARCHAR for a null value in case of an unknown SQL type specified against IBM DB2 * JdbcTemplate uses "PreparedStatement.setString" in case of LONGVARCHAR and CLO B (if given a String value) * fixed CallMetaDataContext to skip SqlParameter objects without name (avoiding NPE) * merged AbstractBeanPropertyRowMapper into concrete BeanPropertyRowMapper class * removed BeanPropertyRowMapper's "newInstance" method to avoid confusion with P arameterizedBeanPropertyRowMapper * revised BeanPropertyRowMapper to use JavaBean property introspection instead o f expecting field/setter name matches * factored out "initBeanWrapper"/"getColumnValue" template methods in BeanProper tyRowMapper, allowing for customization * BeanPropertyRowMapper shares ResultSet value access logic with SingleColumnRow Mapper * BeanPropertyRowMapper and SingleColumnRowMapper perform Oracle-specific "getOb ject" checks for unknown specified types * added ParameterizedSingleColumnRowMapper with a convenient "newInstance" metho d to specify the required type only once * BeanPropertySqlParameterSource derives a default SQL type from the correspondi ng property type (for typed null values) Package org.springframework.jms * improved SimpleMessageConverter's exception message for an unsupported message payload * DefaultMessageListenerContainer logs listener setup failures at INFO instead o f ERROR level * DefaultMessageListenerContainer allows for specifying a callback on "stop", fo r a notification after actual stopping * DefaultMessageListenerContainer lets shutdown continue instead of 'busy' waiti ng in case of thread interruption * fixed DefaultMessageListenerContainer to correctly process "sessionTransacted= true" in case of locally exposed Session * SimpleMessageListenerContainer exposes listener Session as thread-bound resour ce for JmsTemplate calls (like DMLC) * deprecated ServerSessionMessageListenerContainer in favor of DefaultMessageLis tenerContainer/JmsMessageEndpointManager * DefaultJmsActivationSpecFactory is compatible with WebSphere MQ 6.0.2.1 as wel l now Package org.springframework.jmx * factored out "doUnregister(objectName)" and "onRegister(objectName,mbean)" met hods in MBeanRegistrationSupport * MBeanExporter actually sets "exposeManagedResourceClassLoader" to "true" by de fault (matching the 2.5 javadoc now) * MBeanExporter explicitly removes all of its registered NotificationListeners f rom the target MBeanServer on shutdown * introduced NotificationListenerRegistrar for registering a listener with any M Bean on any MBeanServer(Connection) Package org.springframework.mail * added "text/csv" to ConfigurableMimeFileTypeMap's and thus MimeMessageHelper's default MIME mappings Package org.springframework.mock * added "getServletContext()" method to MockHttpServletRequest (not available in the HttpServletRequest interface) Package org.springframework.orm * introduced "postProcessMappings" template method in Hibernate LocalSessionFact oryBean * fixed Hibernate AnnotationSessionFactoryBean to allow for mixed mapping source s (despite 2.5.1's "buildMappings" call) * HibernateTemplate exposes the "org.hibernate.event.EventSource" and "org.hiber nate.classic.Session" interfaces as well * introduced "EntityManagerFactoryUtils.closeEntityManager" method that protects against exceptions thrown from close * Hibernate/Jpa/JdoTransactionManager explicitly rollback an active transaction before closing when begin failed * fixed TopLinkTransactionManager to correctly expose the underlying JDBC Connec tion in read-write transaction scenarios * JDO/JPA factories check autodetected proxy interfaces for visibility in the Cl assLoader (for WebSphere compatibility) * added "entityManagerFactoryInterface" property to AbstractEntityManagerFactory Bean, as alternative to autodetection * added "getEntityManagerFactoryInterface()" to JpaVendorAdapter (for WebSphere compatibility of OpenJpaVendorAdapter) * added "getPersistenceProviderRootPackage()" to JpaVendorAdapter, for excluding provider classes from class overriding * introduced EclipseLinkJpaVendorAdapter and EclipseLinkJpaDialect, supporting E clipseLink 1.0 M4 or higher Package org.springframework.remoting * factored out RemotingSupport base class from RemoteAccessor and RemoteExporter * (Jndi)RmiClientInterceptor properly detects CORBA connect failures on the IBM JVM * HessianClientInterceptor and BurlapClientInterceptor expose the bean ClassLoad er as thread context CL (if necessary) * added overloaded "executeRequest" method with original MethodInvocation argume nt to HttpInvokerClientInterceptor * added "hostname" bean property to SimpleHttpServerFactoryBean, for a specific network address to bind to Package org.springframework.scripting * introduced "ScriptFactory.requiresScriptedObjectRefresh(ScriptSource)" for obj ect refresh even after a type check call * GroovyScriptFactory and JRubyScriptFactory refresh scripted object instances e ven after an intermediate type check * introduced "ScriptSource.suggestedClassName()" for dynamic Groovy scripts that do not define a class themselves * GroovyScriptFactory uses resource filename (for files) or bean name (for inlin e scripts) as suggested class name * added "depends-on" attribute to "lang:bsh/groovy/jruby" configuration element Package org.springframework.test * TestContextManager ignores default TestExecutionListeners that cannot be insta ntiated (e.g. due to spring-tx missing) * AbstractJUnit38SpringContextTests runs "afterTestMethod" callbacks even when " beforeTestMethod" or "setUp" failed * AbstractTestNGSpringContextTests executes Spring default callbacks in any case (marked with "alwaysRun = true") * added configurable "sqlScriptEncoding" property to AbstractTransactionalXxxSpr ingContextTests (for reading scripts) Package org.springframework.util * revised ConcurrencyThrottleSupport's interruption handling to throw an Illegal StateException instead of 'busy' waiting * deprecated ResponseTimeMonitor and PerformanceMonitorListener classes in favor of custom classes for specific needs Package org.springframework.validation * DataBinder's "initDirectFieldAccess()" sets the "extractOldValueForEditor" fla g by default, analogous to bean access Package org.springframework.web * ServletRequestAttributes keeps hold onto the original session if a "request.ge tSession" call suddenly returns null * added "setConfigLocation" method to ConfigurableWeb/PortletApplicationContext, accepting an init-param style value * added "initServletContext(ServletContext)" template method to WebApplicationOb jectSupport * optimized ServletContextResource's and PortletContextResource's "exists()" che ck to avoid unnecessary stream opening * Commons(Portlet)MultipartResolver catches and logs any exception thrown from f ile item cleanup (not propagating it) * introduced NativeWebRequest and MultipartRequest interfaces for even finer-gra ined generic request access options * introduced FacesRequestAttributes adapter, with attributes access falling back to current JSF FacesContext by default * added "dispatchOptionsRequest/TraceRequest" properties to FrameworkServlet, fo r dispatching all HTTP request methods * deprecated PathMap attribute and CommonsPathMapHandlerMapping class in favor a nnotation-based request mapping * deprecated ThrowawayController and ThrowawayControllerHandlerAdapter in favor annotation-based controllers * @RequestMapping's "method" attribute supported at type level as well, expressi ng restriction for entire handler * @RequestMapping's "params" attribute supported at type level for Servlets, exp ressing precondition for entire handler * @RequestMapping's "params" attribute supported at type level for Portlets, map ping mode+params onto specific handler * @RequestMapping annotation supports "!myParam" expressions for non-presence of a specific parameter as well * introduced WebArgumentResolver interface and "customArgumentResolver(s)" prope rty on AnnotationMethodHandlerAdapter * factored out common HandlerMethodResolver/Invoker classes from Servlet/Portlet AnnotationMethodHandlerAdapter * AnnotationMethodHandlerAdapter does not restrict supported HTTP methods by def ault (allowing for PUT, DELETE as well) * AnnotationMethodHandlerAdapter narrows through method name resolution even for a set of equal non-empty mappings * AnnotationMethodHandlerAdapter resolves the target type for a generically type d @RequestParam/@ModelAttribute argument * AnnotationMethodHandlerAdapter properly allows for resolving a Principal argum ent to null (in case of none defined) * AnnotationMethodHandlerAdapter resolves InputStream/OutputStream and Reader/Wr iter subclasses as well * added "synchronizeOnSession" property to AnnotationMethodHandlerAdapter, analo gous to AbstractController * fixed AnnotationMethodHandlerAdapter to avoid NPE in case of plain model attri bute returned from handler method * Servlet AnnotationMethodHandlerAdapter sends HTTP 404 instead of throwing Ille galState if no handler method found * Portlet AnnotationMethodHandlerAdapter throws UnavailableException instead of IllegalState if no handler method found * added "prepareResponse"/"generatesDownloadContent" methods to AbstractView, fo r HTTPS cache header workaround for IE * AbstractPdfView and Abstract(J)ExcelView participate in AbstractView's HTTPS c ache header workaround for IE * AbstractJasperReportsView does not perform a hard response reset, in favor of AbstractView's HTTPS cache workaround * AbstractTemplateView catches "HttpServletResponse.getContentType()" exceptions (for JBoss Portal compatibility) * InternalResourceView only exposes forward attributes when running on Servlet < 2.5 (for GlassFish compatibility) * InternalResourceView detects circular dispatching to the same view even in cas e of pattern matches for same handler * InternalResourceView prevents dispatch to same handler path only if the "preve ntDispatchLoop" flag is set to "true" * InternalResourceViewResolver sets "preventDispatchLoop" to "true" for conventi onal name-based View instances only * JstlView exposes a JSTL-aware MessageSource even for a custom MessageSource pa ssed in through the constructor * re-added AbstractDataBoundFormElementTag's COMMAND_NAME_VARIABLE_NAME in depre cated form (Spring 2.0.x compatibility) * made FormTag's MODEL_ATTRIBUTE_VARIABLE_NAME public (as replacement of COMMAND _NAME_VARIABLE_NAME) * JSP Checkbox(es)Tag and RadioButton(s)Tag render label as HTML label element a fter input element (for HTML compliance) * JSP CheckboxesTag and RadioButtonsTag compare raw item / raw Map key for selec tion check as well * JSP SelectTag and OptionsTag compare raw Map key for selection check as well
Changes in version 2.5.1 (2008-01-09)
------------------------------------- General * refined PDF formatting settings for the reference documentation * added coverage of JAX-WS support to the reference documentation * added section on J2EE RAR deployment to the reference documentation * moved "org.springframework.web.bind/multipart" packages from spring-web.jar to spring-webmvc.jar * updated AspectJ jar in "-with-dependencies" distribution to AspectJ 1.5.4 * updated Groovy jar in "-with-dependencies" distribution to Groovy 1.5.1 * updated Hessian jar in "-with-dependencies" distribution to Hessian 3.1.3 * updated iText jar in "-with-dependencies" distribution to iText 2.0.7 * updated POI jar in "-with-dependencies" distribution to POI 3.0.1 Package org.springframework.aop * ProxyFactory caches CGLIB proxies only when underlying (Smart)ClassLoader does not indicate a reloadable Class * added "logTargetClassInvocation" property to AbstractMonitoringInterceptor, fo r logging the target invocation trace Package org.springframework.beans * ConfigurablePropertyAccessor extends the TypeConverter interface (moved up fro m BeanWrapper interface) * BeanWrapper supports well-known collection implementation types for generic el ement conversion again (like Spring 2.0) * TypeConverterDelegate protects its text conversion step against PropertyEditor s which don't support "setValue" calls * factored out FactoryBeanRegistrySupport base class from AbstractBeanFactory an d AbstractAutowireCapableBeanFactory * optimized AbstractBeanFactory's access to cached FactoryBean-exposed objects, avoiding unnecessary locks * ConstructorResolver prefers concrete class matches over interface matches at t he same level when checking arguments * revised accidental public exposure of "isPrimary" method in ConfigurableListab leBeanFactory/DefaultListableBeanFactory * moved "resolveDependency" implementation from AbstractAutowireCapableBeanFacto ry down to DefaultListableBeanFactory * revised DefaultListableBeanFactory's "resolveDependency" exceptions with respe ct to clarity and context inclusion * DefaultListableBeanFactory does not eagerly initialize FactoryBeans for type c hecks even with factory-bean reference * DefaultListableBeanFactory throws descriptive exception in case of factory-bea n circular reference * DefaultListableBeanFactory supports ObjectFactory indirection for resolvable d ependencies * DefaultListableBeanFactory always resolves bean class before checking a bean d efinition as autowire candidate * AbstractBeanDefinition stores and exposes the originating Resource (rather tha n just the resource description) * XmlBeanDefinitionReader detects recursive loading of the same resource (e.g. t hrough import cycles) * DefaultBeanDefinitionDocumentReader sends ImportDefinition events containing t he actually resolved Resource objects * DefaultDocumentLoader includes the JAXP IllegalArgumentException in the rethro wn ParserConfigurationException * ClassPathBeanDefinitionScanner marks default init/destroy methods as not enfor ced (accepting beans without those) * SingletonBeanFactoryLocator falls back to a single bean of type BeanFactory (i f any) when given a null locator key * SingletonBeanFactoryLocator removes bean factory group definition if its initi alization fails * factored out protected "getTargetBean" method in ObjectFactoryCreatingFactoryB ean (for easier overriding) * revised BeanConfigurerSupport to allow for usage as a delegate as well, not ju st as a base class * revised BeanConfigurerSupport to re-initialize its default BeanWiringInfoResol ver for each context refresh * fixed AutowiredAnnotationBeanPostProcessor to properly cache dependencies that do not correspond to a registered bean * annotation processors detect already managed methods/fields, avoiding double i nvocation in case of multiple processors * explicit annotation processors override implicit default processors (as built by annotation-config / component-scan) Package org.springframework.cache * added "cacheManagerName" property to EhCacheManagerFactoryBean Package org.springframework.context * fixed AbstractApplicationContext to only send ContextStoppedEvent in case of " stop()" (i.e. not for "close()") * fixed AbstractApplicationContext to always detect LoadTimeWeaverAwareProcessor in the local ClassLoader (for OSGi) * ClassPath/FileSystemXmlApplicationContext perform early check for null element s in config location array * added "addMessages(Map, Locale)" method to StaticMessageSource, for bulk addin g messages * ContextTypeMatchClassLoader does not generally exclude classes in the "org.spr ingframework" package anymore * DefaultContextLoadTimeWeaver only chooses GlassFishLoadTimeWeaver when running in the EAR ClassLoader * DefaultContextLoadTimeWeaver removes all registered transformers from the VM I nstrumentation object (if applicable) * CommonAnnotationBeanPostProcessor properly ignores @Resource-annotated JAX-WS WebServiceContext references * AnnotationBeanNameGenerator (used by "context:component-scan") detects default name values in custom annotation types * ClassPathScanningCandidateComponentProvider ("context:component-scan") ignores non-static inner and local classes * "context:property-placeholder" configuration element does not require a "locat ion" attribute (for system properties) Package org.springframework.core * introduced SmartClassLoader marker interface, declaring a "boolean isClassRelo adable(Class clazz)" operation * OverridingClassLoader excludes the "oracle." package by default as well (e.g. for TopLink's custom annotations) * MethodParameter uses reflection to obtain parameter annotations (for compatibi lity with the IBM 1.4.2 VM's debug mode) * LocalVariableTableParameterNameDiscoverer caches parameter names per method an d obtained ASM ClassReaders per class * added "getEnclosingClassName()", "hasEnclosingClass()" and "isIndependent()" m ethods to ClassMetadata interface Package org.springframework.ejb * "jee:local-slsb" and "jee:remote-slsb" work for EJB3 Session Beans as well (as alternative to "jee:jndi-lookup") * introduced EJB3-compliant SpringBeanAutowiringInterceptor for processing Sprin g's @Autowired in EJB3 SBs/MDBs Package org.springframework.instrument * InstrumentationLoadTimeWeaver allows for operating on a pre-defined ClassLoade r and for removing transformers again * TomcatInstrumentableClassLoader always passes local ClassLoader into ClassFile Transformers (makes AspectJ LTW work) * ShadowingClassLoader excludes the "com.ibm." package by default as well (for I BM JDK classes, DB2 JDBC driver, etc) Package org.springframework.jdbc * fixed JdbcUtils to not access the DatabaseMetaData implementation class for "e xtractDatabaseMetaData" calls * TransactionAwareDataSourceProxy obtains target Connections lazily when the fir st call comes in on the Connection proxy * added "reobtainTransactionalConnections" flag to TransactionAwareDataSourcePro xy (for Connection handles on JBoss) * WebSphereDataSourceAdapter, JBossNativeJdbcExtractor and CommonsDbcpNativeJdbc Extractor propagate SQLExceptions as-is Package org.springframework.jms * JmsUtils protects against misbehaving JMS providers (such as ActiveMQ) when cl osing an interrupted MessageConsumer * JmsTemplate's standard "execute(ProducerCallback)" pre-initializes producer wi th default destination (if available) * added overloaded execute methods with Destination/destination name and Produce rCallback to JmsOperations/JmsTemplate * added various "browse"/"browseSelected" methods JmsOperations/JmsTemplate, for browsing a queue with a BrowserCallback * DelegatingConnectionFactory adapts specific create(Queue/Topic)Connection call s to a generic JMS 1.1 ConnectionFactory * JmsInvokerClientInterceptor accepts any JMS 1.1 ConnectionFactory, not insisti ng on a QueueConnectionFactory anymore * MethodListenerAdapter uses type difference weight algorithm to choose between ambiguous listener methods * DefaultMessageListenerContainer catches TaskRejectedException and pauses affec ted tasks for subsequent resuming * DefaultMessageListenerContainer exposes listener Session as thread-bound resou rce for JmsTemplate calls * ServerSessionMessageListenerContainer always establishes a shared Connection ( even if autoStart="false") * CommonsPoolServerSessionFactory removes specific ServerSessionPool on close (f or proper reuse on stop and restart) * "jms:listener-container" tag supports a concurrency range (e.g. "3-5"), for sp ecifying a minimum number of consumers Package org.springframework.jmx * added "getServer()" method to MBeanRegistrationSupport (MBeanExporter), exposi ng the underlying JMX MBeanServer Package org.springframework.jndi * JndiTemplate prepares a specific Hashtable for the InitialContext, exposing de fault environment properties as well Package org.springframework.mail * fixed potential NPE in MailSendException Package org.springframework.mock * MockRequestDispatcher stores forwarded/included URL in MockHttpServletResponse even in case of wrapped response Package org.springframework.orm * LocalSessionFactoryBean uses LocalJtaDataSourceConnectionProvider (supporting aggressive release) in case of JTA TM * LocalSessionFactoryBean supports Connection release mode "after_statement" wit hout "useTransactionAwareDataSource" too * LocalSessionFactoryBean eagerly compiles registered mappings, for availability in the post-processing phase * added "cacheProvider" property to LocalSessionFactoryBean, allowing for a Spri ng-managed CacheProvider instance * added overloaded "delete" methods with "entityName" argument to HibernateOpera tions and HibernateTemplate * added "earlyFlushBeforeCommit" flag to HibernateTransactionManager, allowing t o enforce a flush before synchronization * fixed Jpa/JdoTransactionManager to correctly nest a REQUIRES_NEW transaction w ithin a SUPPORTS scope with early access * JPA PersistenceUnitReader supports location patterns for the "jar-file" attrib ute in "persistence.xml" files * PersistenceAnnotationBeanPostProcessor accepts vendor-specific EntityManager i nterfaces for @PersistenceContext again Package org.springframework.remoting * HessianClientInterceptor/ProxyFactoryBean supports "debug", "chunkedPost", "re adTimeout" and "hessian2" properties * HessianServiceExporter supports "debug" property analogous to Hessian 3.1.3's HessianServlet * HessianServiceExporter and BurlapServiceExporter expose the bean ClassLoader a s thread context CL (if necessary) * factored out stream-based HessianExporter and BurlapExporter classes * factored out abstract RemoteInvocationSerializingExporter base class from Http InvokerServiceExporter * introduced SimpleHttpInvokerServiceExporter and SimpleHessian/BurlapServiceExp orter as HttpHandlers for Sun JRE 1.6 * introduced SimpleHttpServerFactoryBean for Spring-style set-up of a Sun JRE 1. 6 HttpServer Package org.springframework.samples * PetClinic's JPA version showcases AspectJ load-time weaving, including @Transa ctional handling in AspectJ mode * PetClinic's JPA EntityManagerClinic uses explicit flushing and id assigning to make sure that the id is available Package org.springframework.scheduling * ThreadPoolTaskExecutor supports Java 6's "allowCoreThreadTimeOut" feature (for both native and backport-concurrent) Package org.springframework.scripting * fixed ScriptFactoryPostProcessor to avoid NPE in case of script that produces null value and no interfaces specified * StaticScriptSource exposes "StaticScript" as toString result, in order for Gro ovy to derive a valid class name from it * GroovyScriptFactory caches a temporarily created result object from "getScript edObjectType" until "getScriptedObject" * GroovyScriptFactory exposes "getGroovyClassLoader()" method and lazily initial izes the GroovyClassLoader * "lang:groovy/jruby/bsh" does not insist on an id for a scripted bean anymore ( i.e. allows for anonymous scripts) Package org.springframework.test * fixed AbstractContextLoader to detect and accept "classpath*:" URLs as well * AbstractTestNGSpringContextTests does not define a "SpringTestContext" group a nymore (for ease of using custom groups) Package org.springframework.transaction * added "validateExistingTransaction" property to AbstractPlatformTransactionMan ager, for isolation level checks * added "prepareForCommit" template method to AbstractPlatformTransactionManager , called before commit synchronization * JtaTransactionManager consistently throws TransactionSystemException in case o f unexpected internal transaction state * JtaTransactionManager detects JBoss 4.2 transaction rollbacks caused by a time out, throwing a meaningful exception * fixed WebSphereUowTransactionManager to correctly detect an existing global tr ansaction (ignoring local tx contexts) Package org.springframework.ui * fixed ModelMap's "mergeAttributes" to correctly copy new attributes into the m odel * added "containsAttribute" method to ModelMap, as a more specific alternative t o a general "containsKey" call * introduced Java-5-specific Model interface (for use with MVC handler methods) and corresponding ExtendedModelMap impl Package org.springframework.util * AutoPopulatingList is serializable now * MethodInvoker (and subclasses) use type difference weight algorithm to choose between multiple matching methods * FreeMarker "formSingleSelect" macro also accepts options from a sequence (list ) as both labels and values Package org.springframework.validation * clarified that BindingResult's "getPropertyEditorRegistry()" method may return null to indicate no support for editors * DataBinder implements the TypeConverter interface, delegating to the underlyin g PropertyAccessor Package org.springframework.web * ContextLoader(Listener/Servlet) explicitly removes the context attribute from the ServletContext (for WLS hot deploy) * introduced static "getCurrentWebApplicationContext()" accessor on ContextLoade r, for context lookup by thread * introduced SpringBeanAutowiringSupport class for self-autowiring classes withi n a web app (e.g. JAX-WS endpoints) * WebApplicationContext impls register request/session/ServletContext as resolva ble dependencies (e.g. for @Autowired) * PortletApplicationContext impls register request/session/PortletContext as res olvable dependencies (for @Autowired) * CommonsMultipartResolver uses FileUpload 1.2's "isMultipartContent" variant wh en available (for stricter checks) * added "useCacheControlNoStore" property to WebContentGenerator, allowing to su ppress the "no-store" header value * SimpleUrlHandlerMapping explicitly trims specified handler bean names (in orde r to ignore unintended whitespace) * UrlPathHelper detects a context path of "/" (as exposed by Jetty for includes) and processes it as root context ("") * improved NoSuchRequestHandlingMethodException's error message to include reque st URL and query string explicitly * DispatcherServlet consistently logs correct request URI for include requests ( even in debug log messages) * MultiActionController properly supports String return types for handler method s (for consistency with @RequestMapping) * MultiActionController detects and rejects invalid last-modified method return types * WebRequest interface (as supported for @RequestMapping) supports "checkNotModi fied" method for last-modified handling * @RequestMapping paths are considered a match even without suffix (e.g. "/users " matches a request for "/users.do") * @InitBinder methods apply to @RequestParam parameters as well, with the @InitB inder value matched against param names * @ModelAttribute's default attribute names are consistently derived from the *d eclared* parameter/return type * AnnotationMethodHandlerAdapter properly handles overridden handler methods wit h overridden @RequestMapping annotation * AnnotationMethodHandlerAdapter maps relative paths specified at method level a nalogous to default method name mappings * AnnotationMethodHandlerAdapter throws an exception if it cannot find a clear b est path match for a specific request * AnnotationMethodHandlerAdapter throws descriptive exception in case of optiona l parameter being declared as primitive * AnnotationMethodHandlerAdapter automatically resolves arguments of type Princi pal as the request's user principal * AnnotationMethodHandlerAdapter propagates checked exceptions as-is for handler /attribute/init-binder methods * AnnotationMethodHandlerAdapter applies @InitBinder methods for view preparatio n as well (like WebBindingInitializers) * AnnotationMethodHandlerAdapter applies binder initialization for 'end' views ( with processing being complete) as well * factored out "createBinder" template method within AnnotationMethodHandlerAdap ter, called for each binding attempt * Servlet AnnotationMethodHandlerAdapter supports View return value for handler methods (as alternative to view name) * fixed Portlet AnnotationMethodHandlerAdapter to explicitly check for Action/Re nder*Response* (to work on Liferay) * InternalResourceView prevents dispatching to same path as handler (e.g. with d efault view name and default resolver) * JstlView detects session-scoped JSTL LocalizationContext/Locale attributes and merges them with its own context * JstlView and (JspAware)RequestContext consistently use JSTL Config class for s coped attribute access * reworked Spring's Tiles2 support such that it can operate against the Tiles2 ( 2.0.5+) JDK 1.4 version as well * Tiles2 TilesView explicitly checks whether the Tiles container has been initia lized (throwing a descriptive exception) * Tiles2 TilesView exposes Servlet 2.4 forward request attributes (for non-2.4-c ompliant web containers like OC4J) * fixed JSP BindTag to correctly detect and ignore a repeated nested path for th e global errors case * JSP CheckboxTag/CheckboxesTag and RadioButtonTag/RadioButtonsTag use registere d property editor for value rendering
Changes in version 2.5 final (2007-11-19)
----------------------------------------- General * updated javadoc and reference documentation * revised PetPortal sample application into a full-fledged Java 5 showcase (anno tation-based configuration etc) Package org.springframework.aop * fixed garbage collection problem with CGLIB proxies, using a strong reference map for the fixed interceptors Package org.springframework.context * "context:load-time-weaver" autodetects the GlassFish ClassLoader even within a GlassFish web app now * "context:load-time-weaver" correctly detects the use of the Spring VM agent on WebLogic 9 Package org.springframework.core * URL-to-File conversion for ClassPathResource/UrlResource performs URI-based de coding rather than using URLDecoder * optimized UrlResource's handling of URI access and File access if constructed with a URI directly * fixed AbstractLabeledEnum to correctly determine the default enum type for a t op-level enum class (again) Package org.springframework.jdbc * added "registerDatabase" method to SQLErrorCodesFactory, for eager association of database names with DataSources Package org.springframework.jms * DefaultMessageListenerContainer avoids deadlock between Connection and Session through the use of a shared monitor Package org.springframework.jndi * fixed "jee:jndi-lookup" tag to correctly handle "default-value" and "default-r ef" attributes Package org.springframework.orm * Hibernate SpringSessionSynchronization explicitly disconnects on suspend/compl etion (to make "on_close" work on JBoss) Package org.springframework.scheduling * fixed CommonJ TimerManagerFactoryBean to not require the "scheduledTimerListen ers" property Package org.springframework.test * TestContextManager logs TestExecutionListener exceptions at error/warn level i nstead of info/debug Package org.springframework.transaction * JtaTransactionManager swallows IllegalStateException when synchronizing with e xisting transaction (for JBoss 4.2) Package org.springframework.web * CommonsMultipartResolver detects multiple files for the same field name and th rows a corresponding exception * RequestToViewNameTranslator kicks in before the "HandlerInterceptor.postHandle " phase * RequestToViewNameTranslator's "getViewName" is allowed to return null if no de fault found * fixed AnnotationMethodHandlerAdapter to expose the implicit model even when us ing request-to-view-name translation * fixed AnnotationMethodHandlerAdapter to correctly match parameters even in cas e of request method specified as well * DispatcherPortlet/AnnotationMethodHandlerAdapter swallows IllegalStateExceptio n when setting implicit render parameter * Portlet AnnotationMethodHandlerAdapter preserves implicit model from action ph ase to render phase * Portlet AnnotationMethodHandlerAdapter applies cache settings (prevents cachin g when session attributes are involved) * Portlet AnnotationMethodHandlerAdapter allows default @RequestMapping annotati ons for action as well as render methods * Portlet AnnotationMethodHandlerAdapter resolves PortletPreferences, PortletMod e, WindowState, PortalContext arguments * factored out AbstractWizardFormController's "getTargetPage" logic into WebUtil s/PortletUtils, for reuse in custom code * InternalResourceView explicitly sets content type on response in include case (for correct charset handling on Tomcat) * exposed applicable standard HTML attributes on JSP "form:option" and "form:opt ions" tags * JSP form tags always autogenerate valid HTML ids (not including "[" or "]" cha racters from array element properties)
Changes in version 2.5 RC2 (2007-11-12)
--------------------------------------- General * introduced complete rewrite of the Spring MVC step-by-step guide for version 2 .5 Package org.springframework.aop * fixed garbage collection problem with CGLIB proxies, now holding onto the Advi sed configuration independent of factory Package org.springframework.beans * DefaultListableBeanFactory now supports autowiring of FactoryBean instances 'b y type' * revised DefaultListableBeanFactory's exception handling for clearer wrapping o f nested exceptions * DefaultListableBeanFactory performs bean creation within a PrivilegedAction (f or SecurityManager compatibility) * optimized DefaultListableBeanFactory's invocation of setter methods for re-cre ated bean instances * optimized DefaultListableBeanFactory's invocation of post-processor methods * changed XmlReaderContext's "getReader()" to expose the XmlBeanDefinitionReader again (for backwards compatibility) * AutowiredAnnotationBeanPostProcessor caches determined candidate constructors per bean class * RequiredAnnotationBeanPostProcessor caches validated bean names, skipping re-v alidation for the same bean * added bean type argument to MergedBeanDefinitionPostProcessor (for InitDestroy AnnotationBeanPostProcessor) Package org.springframework.context * "context:mbean-export" autodetects WebLogic and WebSphere, performing an appro priate MBeanServer lookup * "context:mbean-export" falls back to a simple MBeanExporter on JDK 1.4, detect ing standard MBeans * introduced "context:mbean-server" configuration element, for setting up a stan dalone MBeanServer reference * "context:load-time-weaver" automatically activates "spring-configured" if Aspe ctJ weaving is enabled * "context:load-time-weaver"'s temporary ClassLoader for type matching uses a fu lly isolated loader for each match Package org.springframework.dao * PersistenceExceptionTranslationAdvisor detects @Repository on interfaces as we ll Package org.springframework.jca * added missing "refresh()" call to SpringContextResourceAdapter's ApplicationCo ntext Package org.springframework.jdbc * TransactionAwareDataSourceProxy exposes a special "toString()" result for its Connection proxies * fixed SingleColumnRowMapper to use passed-in required type in the default "con vertValueToRequiredType" implementation * SimpleJdbcCallOperations and SimpleJdbcInsertOperations return the interface t ype (not the impl) for method chaining Package org.springframework.jndi * "jee:jndi-lookup" supports "default-value" and "default-ref" attributes, trans lated to a default object Package org.springframework.mail * MailSendExceptions keeps failed messages in a LinkedHashMap, allowing for acce ss in the order of sending * added "getMessageExceptions()" accessor to MailSendException, with "getFailedM essages()" being transient now Package org.springframework.orm * fixed Jpa/JdoTransactionManager to correctly suspend and resume even for diale cts without JDBC Connection retrieval * SqlMapClientTemplate explicitly checks for TransactionAwareDataSourceProxy, av oiding double synchronization Package org.springframework.remoting * RmiClientInterceptor and AbstractSlsbInvokerInterceptor do not consider Marsha lException as connect failure anymore Package org.springframework.stereotype * @Component, @Repository, etc are not marked as inherited anymore (i.e. inherit ance checks to be performed explicitly) Package org.springframework.test * AbstractGenericContextLoader provides an opportunity for subclasses to customi ze the context before calling refresh * revised TestExecutionListener method signatures to declare Exception instead o f Throwable Package org.springframework.transaction * "tx:jta-transaction-manager" autodetects Oracle OC4J as well, in addition to W ebLogic and WebSphere Package org.springframework.web * ContextLoader provides an opportunity for subclasses to customize the context before calling refresh * made AbstractController's handleRequest entry point method non-final (allowing for overriding and CGLIB proxying) * AbstractUrlHandlerMapping always takes the first matching path (in case of mul tiple path patterns of equal length) * AnnotationMethodHandlerAdapter for Servlet MVC exposes UrlPathHelper and PathM atcher configuration properties * AnnotationMethodHandlerAdapter for Servlet MVC supports MethodNameResolver for resolving default handler methods * AnnotationMethodHandlerAdapter for Servlet MVC supports path patterns for @Req uestMapping at the method level as well * AnnotationMethodHandlerAdapter for Servlet MVC always prevents HTTP caching in case of @SessionAttributes specified * reworked @RequestMapping's "type" attribute into "method", accepting strongly typed @RequestMethod enum values * revised AnnotationMethodHandlerAdapter's resolution of multiple matching handl er methods to take params into account * @RequestParam's "value" attribute is not required anymore, defaulting to the m ethod parameter name (if available) * added "types" attribute to @SessionAttributes, allowing to enumerate model att ributes types instead of names * AbstractJasperReportsSingleFormatView converts exporter parameter values in th e model (if appropriate) * InternalResourceView lets explicit model attributes override Spring beans in c ase of "exposeContextBeansAsAttributes" * JstlView does not set "exposeContextBeansAsAttributes" flag to "true" by defau lt (analogous to InternalResourceView) * JSF 1.1 DelegatingVariableResolver checks original VariableResolver first agai n (for strict backwards compatibility) * introduced JSF 1.1 SpringBeanVariableResolver, letting Spring bean definitions override other attributes of same name * renamed JSF 1.2 DelegatingFacesELResolver to SpringBeanFacesELResolver, indica ting its concrete lookup strategy * fixed Tiles 1.x TilesConfigurer to explicitly set the factory name to empty St ring by default
Changes in version 2.5 RC1 (2007-10-22)
--------------------------------------- General * introduced spring-framework-with-docs.zip distribution; reduced spring-framewo rk.zip to the minimal binaries * spring.jar does not include Servlet Web MVC support anymore; add spring-webmvc .jar separately * spring.jar and spring-core.jar include repackaged version of ASM 2.2.3 (avoidi ng side effects with other ASM versions) * spring-orm.jar contains the web ORM support (again), in order to avoid split p ackages across bundles * spring-web.jar includes the entire Hessian, Burlap, HTTP invoker, JAX-RPC and JAX-WS support (avoiding split packages) * removed outdated Countries sample application * revised PetClinic sample application into a full-fledged Java 5 showcase (anno tation-based configuration etc) * revised default handling in BeanDefinitionParsers for XML config namespaces to work without XSD validation as well * updated Spring's JDO support to require JDO 2.0 or higher, with early support for JDO 2.1 features Package org.springframework.aop * revised AdvisedSupport to avoid lock contention for method cache lookups (usin g a concurrent map with special keys) * fixed AspectJ pointcut handling to strictly match generic return types accordi ng to Java language rules * AspectJ pointcut matching only registers LocalVariableTableParameterNameDiscov erer if ASM is present on the classpath * removed unused pointcut type attribute from "spring-aop-2.5.xsd" Package org.springframework.beans * BeanWrapperImpl obtains old value with converted key in case of a Map with non -String keys * TypeMismatchException and MethodInvocationException are serializable even in c ase of non-serializable property values * URIEditor only tries to resolve "classpath:" locations if explicitly construct ed with a ClassLoader * URIEditor converts spaces in location values into "%20" quotes (as required by the URI format) * exposed "autowireCandidate" property in BeanDefinition interface (avoiding cas ts to AbstractBeanDefinition) * deprecated ConfigurableBeanFactory's "registerCustomEditor" in favor of "addPr opertyEditorRegistrar" * AbstractBeanFactory ignores PropertyEditorRegistrars which tried to obtain a c urrently created bean * revised AbstractBeanFactory to detect FactoryBeans which are in turn created t hrough factory methods * DefaultListableBeanFactory freshly resolves autowired arguments even for cache d constructors (re-resolving prototypes) * DefaultListableBeanFactory removes a singleton bean instance if a new bean def inition gets registered * DefaultListableBeanFactory fully destroys singleton bean instance when the cor responding bean definition gets replaced * DefaultListableBeanFactory resets the caches for all derived beans as well if a bean definition gets replaced * fixed CglibSubclassingInstantiationStrategy to avoid CGLIB class leak for inne r prototypes with MethodReplacer usage * XmlBeanDefinitionReader initializes default EntityResolver lazily, avoiding cl asspath scan in case of custom resolver * DefaultNamespaceHandlerResolver exposes public DEFAULT_HANDLER_MAPPINGS_LOCATI ON constant * DefaultNamespaceHandlerResolver loads NamespaceHandler mappings and classes la zily (only when namespace actually used) * fixed BeanDefinitionParserDelegate to correctly parse property sub-elements ev en with custom name for beans namespace * BeanDefinitionParserDelegate stores definition source for metadata attributes and qualifier attributes * qualifier attributes consist of "key" and "value" in spring-beans-2.5.xsd (for merly "name" and "value") * AbstractBeanDefinition's qualifier handling provides a unified "addQualifier(A utowireCandidateQualifier)" method * AbstractSingleBeanDefinitionParser applies full scope to inner beans, making t hem eligible for destruction callbacks * added "getParentName" template method to AbstractSingleBeanDefinitionParser, a llowing for child bean definitions * @Autowired qualifier annotations may be defined with target 'type' as well, ma rking the target bean class * Autowired/Common/PersistenceAnnotationBeanPostProcessor implement PriorityOrde red and expose an "order" bean property * "depends-on" kicks in before the affected bean is entering its creation phase; can be used to resolve circular refs * added "registers-scope" annotation to spring-tool.xsd, allowing a tool to dete rmine valid scope names Package org.springframework.context * AbstractApplicationContext calls "cancelRefresh" method in case of refresh fai lure now, resetting the 'active' flag * AbstractRefreshableApplicationContext calls the full "destroyBeans()" method w hen refreshing the bean factory * ClassPathXmlApplicationContext and FileSystemXmlApplicationContext trim passed -in config location Strings * added "concurrentUpdates" flag to AbstractApplicationEventMulticaster, enablin g copy-on-write for the listener set * AnnotationConfigUtils checks for EntityManagerFactory class instead of Persist enceContext (for Tomcat 6 compatibility) * moved CommonAnnotationBeanPostProcessor class from package "beans.factory.anno tation" to "context.annotation" * CommonAnnotationBeanPostProcessor supports @Resource's "mappedName" attribute as (potentially global) JNDI location * added "alwaysUseJndiLookup" flag to CommonAnnotationBeanPostProcessor, enforci ng Java EE 5 JNDI lookups * CommonAnnotationBeanPostProcessor detects and processes the JAX-WS @WebService Ref annotation as well * CommonAnnotationBeanPostProcessor detects and processes the EJB 3 @EJB referen ce annotation (if present) as well * @PostConstruct/@PreDestroy methods are only called once even if they are speci fied as standard init/destroy methods * added "context:mbean-export" configuration element to "spring-context-2.5" sch ema, for annotation-driven JMX export Package org.springframework.core * NestedRuntimeException/NestedCheckedException's "contains" checks the nested c auses of any kind of wrapped exception * added "ConcurrentMap createConcurrentMap" method to CollectionFactory, exposin g a common ConcurrentMap interface * deprecated CollectionFactory's "createLinkedSet/LinkedMap/IdentityMapIfPossibl e" (for usage on JDK 1.4 or higher) * AttributeAccessorSupport uses a LinkedHashMap, keeping the attributes in the o rder of registration * "Conventions.getVariableName" follows JavaBeans property naming rules in case of multiple upper case letters * added "getURI()" method to Resource interface * added constructor with URI argument to UrlResource class * FileSystemResource's "getURL()" builds URLs that can be converted to an URI * introduced ContextResource interface with "getPathWithinContext()" method (exp osed for context-relative lookups) * reworked "core.asm.ClassReaderFactory" into "core.classreading.MetadataReaderF actory" (with internal ASM usage only) * AspectJTypeFilter uses a given ClassLoader instead of the default ClassLoader Package org.springframework.ejb * spring-jee.xsd explicitly declares defaults for its boolean flags Package org.springframework.instrument * added WebLogicLoadTimeWeaver for BEA WebLogic version 10 or higher Package org.springframework.jdbc * SimpleJdbcTemplate's varargs handling always considers a single array argument as collection of arguments Package org.springframework.jms * JmsTemplate only starts lazily created transactional Connections if actually n ecessary (-> "startConnection" flag) * JmsTransactionManager does not start transactional Connections until a transac tional Session actually requires it * added DestinationResolver support to StandardJmsActivationSpecFactory, for Des tination objects on JCA ActivationSpecs * DefaultJmsActivationSpecFactory autodetects WebSphere's JMS ResourceAdapter an d extended ActivationSpec properties * "spring-jms.xsd" supports "destination-resolver" attribute for "jca-listener-c ontainer" element as well * JmsNamespaceHandler registers class names only, allowing tools to run without the JMS API on the classpath Package org.springframework.jmx * MBeanExporter applies NotificationPublisherAware callbacks to objects register ed via "registerManagedResource" as well * MBeanExporter's "exposeManagedResourceClassLoader" defaults to "true" now, for interaction with third-party MBeans * MBeanExporter uses AUTODETECT_ALL as default if no beans have been specified e xplicitly * MBeanExporter supports dynamic AOP proxies with the target class being a stand ard MBean/MXBean * introduced AnnotationMBeanExporter with conveniently pre-configured Annotation JmxAttributeSource * ManagedResource annotation allows for specifying the "objectName" as annotatio n value as well * MetadataNamingStrategy falls back to bean key (bean name) if no "objectName" s pecified in source-level metadata * fixed IdentityNamingStrategy to obtain the package name through class name ins pection rather than "Class.getPackage()" * MBeanClientInterceptor automatically converts MXBean CompositeData/TabularData structures according to Java 5/6 rules * MBeanClientInterceptor uses the standard JDK MBeanServerInvocationHandler if p ossible (for full MXBean support) * MBeanClientInterceptor propagates exceptions thrown by the target MBean direct ly (i.e. not wrapped in a JmxException) Package org.springframework.mail * added "getJavaMailProperties()" method to JavaMailSenderImpl, allowing for con venient configuration of specific keys Package org.springframework.mock * MockServletContext supports "getContext" (allowing to register contexts throug h the new "registerContext" method) * MockServletContext supports "getMimeType" if the Java Activation Framework is present on the classpath * added convenience constructors to MockPortletConfig, MockActionRequest and Moc kRenderRequest Package org.springframework.orm * LocalSessionFactoryBean always uses the bean ClassLoader for "mappingResources " as well as for SessionFactory building * HibernateInterceptor can be interleaved with JTA transactions and non-transact ional access even with async tx timeouts * removed custom detach/attach/newNamedQuery hooks from JdoDialect, expecting pr oviders to follow the final JDO 2.0 API * deprecated JdoTemplate's "attachCopy" methods in favor of revised "makePersist ent" with a JDO2-style return value * LocalPersistenceManagerFactoryBean passes the application ClassLoader into "JD OHelper.getPersistenceManagerFactory" * added "persistenceManagerFactoryName" property to LocalPersistenceManagerFacto ryBean, supporting JDO 2.1 PMF lookup * added "jdoPropertyMap" property to LocalPersistenceManagerFactoryBean, allowin g for non-String JDO property values * JdoTransactionManager and JpaTransactionManager support REQUIRES_NEW transacti ons in afterCompletion callbacks * JPA support exposes the application ClassLoader as PersistenceUnitInfo ClassLo ader even without a LoadTimeWeaver * JPA support uses InstrumentationLoadTimeWeaver as default weaver if Instrument ationSavingAgent is active * revised CommonsLoggingSessionLog to work with TopLink 11 as well (remaining co mpatible with TopLink 10.1.3) Package org.springframework.remoting * fixed Hessian/BurlapClientInterceptor's "convertHessian/BurlapAccessException" method to return the exception properly * JndiRmiClientInterceptor's "prepare()" doesn't declare NamingException anymore (just RemoteLookupFailureException) * JaxRpcPortClientInterceptor's "prepare()" doesn't declare ServiceException any more (just RemoteLookupFailureException) * JaxRpcPortClientInterceptor extracts the original exception as far as provided by JAX-RPC in case of a SOAP fault * introduced JAX-WS 2.0/2.1 support in package "org.springframework.remoting.jax ws" * introduced RemoteInvocationFailureException, thrown by RMI/HTTP/JMS invoker pr oxies in case of server-side failure * introduced SoapFaultException, thrown by JAX-RPC/JAX-WS proxies in case of a S OAP fault being reported Package org.springframework.stereotype * added @Service and @Controller stereotypes to the existing Component and Repos itory annotations Package org.springframework.test * introduced TestNG support based on the new test context framework Package org.springframework.transaction * TransactionSystemException preserves the original application exception, if an y, in case of commit/rollback failure * revised AbstractFallbackTransactionAttributeSource's template methods for spec ific attribute/annotation retrieval * AnnotationTransactionAttributeSource supports a customizable TransactionAnnota tionParser strategy * AnnotationTransactionAttributeSource supports EJB3's TransactionAttribute anno tation (if present) as well * TransactionAspectSupport ignores transaction attributes when not configured wi th a transaction manager * added "tx:jta-transaction-manager" configuration element to "spring-tx-2.5" sc hema Package org.springframework.ui * "ModelMap.addObject(Object)" follows JavaBeans property naming rules in case o f multiple upper case letters Package org.springframework.util * "ClassUtils.getShortNameAsProperty" strips the outer class name in case of an inner class Package org.springframework.web * added "resolveLazily" flag to Commons(Portlet)MultipartResolver, allowing to s witch to lazy multipart resolution * reworked MultipartException into a RuntimeException (it may be thrown from fil e/parameter access methods as well now) * changed UrlPathHelper's and AbstractUrlHandlerMapping's/AbstractUrlMethodNameR esolver's "urlDecode" default to "true" * added "getAttributeNames" method to RequestAttributes interface * introduced WebBindingInitializer interface, supported by BaseCommandController and MultiActionController * introduced annotation-based controller approach using @Controller, @RequestMap ping, @RequestParam and @ModelAttribute * introduced annotation-based command/form controller facilities using @InitBind er, @FormAttributes and FormStatus * introduced DefaultAnnotationHandlerMapping and AnnotationMethodHandlerAdapter for Servlet MVC and Portlet MVC * added "caseSensitive", "pathPrefix" and "basePackage" properties to Controller ClassNameHandlerMapping * added "getActualValue()" method to BindStatus, exposing the raw property value for comparison purposes * added "exposeModelAttributes" property to RedirectView, allowing to suppress m odel exposure completely * added "exposeContextBeansAsAttributes" property to InternalResourceView and In ternalResourceViewResolver * JstlView sets "exposeContextBeansAsAttributes" to "true" by default, allowing JSTL expressions to access Spring beans * factored out a "loadReport()" method in AbstractJasperReportsView (called by " initApplicationContext()") * revised AbstractJasperReportsView to allow for obtaining a report dynamically (through overriding "getReport()") * TagWriter in JSP AbstractFormTag reobtains the Writer from the PageContext all the time (for FreeMarker compatibility) * introduced "modelAttribute" property for JSP FormTag, superseding the "command Name" property for general purposes * JSP SelectTag, OptionTag and OptionsTag properly detect a selected value even for Maps with converted keys * JSP CheckboxTag caches converted candidate value when comparing it with collec tion elements * introduced JSP CheckboxesTag (form:checkboxes) and RadioButtonsTag (form:radio buttons) * JSF 1.1 DelegatingVariableResolver checks Spring bean match first (analogous t o JSF 1.2 DelegatingFacesELResolver)
Changes in version 2.1 M4 (2007-09-09)
-------------------------------------- General * updated build to use JUnit 4.4 for the tiger test suite while sticking with JU nit 3.8 for the main test suite * moved GlassFish and OC4J instrumentation support from spring-context-support.j ar to spring-context.jar * renamed spring-mock.jar to spring-test.jar, reflecting the focus on the test c ontext framework * factored out Struts 1.x support (including Tiles 1.x support) into spring-webm vc-struts.jar * Spring-style pattern matching ("*xxx", "xxx*", "*xxx*") supports multi-part pa tterns as well now ("xxx*yyy") Package org.springframework.aop * ProxyFactoryBean and AbstractSingletonProxyFactoryBean are serializable if the ir target and interceptors are * made parts of ReflectiveMethodInvocation and other internal impl classes publi c again (for framework integration) * "AopNamespaceUtils.registerAutoProxyCreatorIfNecessary" registers a plain Infr astructureAdvisorAutoProxyCreator now * "target()" pointcut handles types implemented in superclasses correctly * "aop:scoped-proxy" applies a specified "autowire-candidate" flag to the proxy Package org.springframework.beans * TypeConverterDelegate protects its value conversion step against PropertyEdito rs which don't support "setValue" calls * TypeConverterDelegate falls back to "toString()" conversion for a primitive va lue type if the required type is String * changed visibility of PropertyEditorRegistrySupport's "getDefaultEditor(requir edType)" method to public * PropertyEditorRegistrySupport's "copyCustomEditorsTo" copies all editors if 'n estedProperty' argument is null * exposed "String[] getDependentBeans(beanName)" method on ConfigurableBeanFacto ry interface * introduced "String[] getDependenciesForBean(beanName)" method on ConfigurableB eanFactory interface * DefaultSingletonBeanRegistry uses a concurrent Map for managing dependent bean s, avoiding unnecessary synchronization * removed superseded ResourceFactoryBean (String-to-Resource conversion has been implicitly available for years) * added overloaded "createBean(beanClass)" method to AutowireCapableBeanFactory interface * introduced "registerResolvableDependency" method on ConfigurableListableBeanFa ctory interface * introduced qualifier support, allowing to use custom parameter annotations for identifying specific target beans * introduced AutowireCandidateResolver mechanism and QualifierAnnotationAutowire CandidateResolver implementation * reworked Annotated/ScannedRootBeanDefinition into Annotated/ScannedGenericBean Definition * fixed AbstractBeanFactory's type check to ignore a null value (as potentially exposed by a FactoryBean) * fixed AbstractBeanFactory to never cache FactoryBean-exposed objects for inner beans (avoiding name conflicts) * optimized DefaultListableBeanFactory's shortcut access to cached merged bean d efinitions * optimized DefaultListableBeanFactory's resolution of bean references during pr ototype creation * DefaultListableBeanFactory performs SmartFactoryBean eager-init check even if the FactoryBean singleton already exists * CommonAnnotationBeanPostProcessor falls back to default type match if no bean found for @Resource field/property name * Common/Autowired/PersistenceAnnotationBeanPostProcessor reject injection annot ations on static fields/methods * factored out "isCandidateComponent(beanDefinition)" template method in ClassPa thScanningCandidateComponentProvider * ClassPathBeanDefinitionScanner does not apply scoped-proxy setting to prototyp es (only to extended scopes) * scoped inner beans are now eligible for scoped destruction callbacks, despite not living as scoped attributes * "spring-beans-2.1.xsd" supports "default-autowire-candidates" attribute, accep ting Spring-style bean name patterns Package org.springframework.context * AbstractApplicationContext registers BeanFactory, ApplicationContext etc as re solvable dependency types for @Autowired * fixed AbstractApplicationContext's temporary ClassLoader to work for by-type a utowiring in ApplicationListeners etc * AbstractApplicationContext propagates "start()"/"stop()" call to LifecycleBean s according to inter-bean dependencies * AbstractApplicationContext sends ContextStartedEvent/ContextStoppedEvent when propagating "start()"/"stop()" call Package org.springframework.core * factored out protected "openStreamForClass" template method in OverridingClass Loader * PathMatchingResourcePatternResolver's static "logger" variable is private now * PathMatchingResourcePatternResolver detects Oracle OC4J's "code-source" URLs a s jar files now Package org.springframework.jdbc * strengthened SQLExceptionTranslator's contract to define root cause handling f or returned DataAccessExceptions * added batch update support to SimpleJdbcTemplate * added new SimpleJdbcInsert and SimpleJdbcCall classes to provide ease-of-use f or inserts and stored procedure calls Package org.springframework.jms * MessageListenerAdapter logs at warn level if a listener method returned a resu lt but no response message can be sent * added BeanFactoryDestinationResolver, for use with "jms:listener-container"'s "destination-resolver" attribute * added "message-converter" attribute to "jms:listener-container/jca-listener-co ntainer" XML configuration element * added "response-destination" attribute to "jms:listener" element, defining a d efault in case of no JMSReplyTo header Package org.springframework.orm * HibernateJdbcException extracts the SQL statement and explicitly builds it int o the exception message * introduced EntityManagerProxy interface, allowing access to underlying EntityM anager for shared/extended EM proxies * container-managed extended EntityManager gets explicitly closed on destruction of the containing bean * PersistenceUnitReader checks for well-known explicit schema resource locations instead of searching the classpath * revised JpaTransactionManager to convert JPA RollbackExceptions into Spring Tr ansactionSystemExceptions * JpaTransactionManager provides fine-grained commit exceptions through translat ing JPA RollbackException root causes * HibernateJpaDialect translates native HibernateExceptions (introspecting them as root causes of PersistenceExceptions) * added savepoint support to JpaDialect, implemented by OpenJpaDialect, supporte d by JpaTransactionManager * OpenJpaDialect exposes a special JDBC ConnectionHandle that immediately return s the Connection to the EntityManager * OpenJpaVendorAdapter supports OpenJPA 1.0.0 (exposing the full OpenJPAEntityMa nagerSPI interface) Package org.springframework.remoting * LocalJaxRpcServiceFactory trims whitespace from "namespaceUri" values Package org.springframework.scripting * ScriptCompilationException carries the ScriptSource of the offending script * GroovyScriptFactory passes script source description to GroovyClassLoader.pars eClass (for descriptive error messages) * added "autowire" and "dependency-check" attributes to "lang:bsh/jruby/groovy" XML configuration elements Package org.springframework.test * fixed AbstractSpringContextTests's "hasCachedContext" implementation to use th e context key String translation * reduced AbstractTransactionalSpringContextTests's log level for transaction ma nagement from INFO to DEBUG * introduced annotation-oriented test context framework based on test execution listeners * introduced JUnit4 support (SpringJUnit4ClassRunner) based on the new test cont ext framework Package org.springframework.transaction * fixed "tx:annotation-driven" to not activate "aop:config"-style autodetection of application-defined Advisor beans Package org.springframework.ui * ModelMap extends LinkedHashMap, exposing model elements in registration order Package org.springframework.util * "ClassUtils.forName" supports the JDK's internal names for primitive array cla sses as well (for JMX compatibility) * ReflectionUtils provides a "findMethod" variant without parameter types argume nt Package org.springframework.web * RequestContext uses a full ResourceBundleThemeSource as default again (for bac kwards compatibility) * RequestContext lazily obtains the Theme instance (for more efficiency when the me support is not used) * AbstractView does not log static attributes anymore, in order to allow for sco ped proxies to be used as attributes * factored out protected "isEligibleProperty(key, value)" template method in Red irectView * RedirectView only exposes Strings, primitives and primitive wrappers as query properties by default * JstlView properly allows for programmatic usage (added overloaded constructors ; exposing a MessageSource is optional) * InternalResourceViewResolver uses JstlView as default (instead of InternalReso urceView) if the JSTL API is present * JSP MessageTag resolves arguments in default text even if no message code was specified * JSP tags in the form tag library default to htmlEscape=true in case of no defa ultHtmlEscape setting given * added support for Tiles2 in the "org.springframework.web.servlet.view.tiles2" package (requiring Tiles 2.0.4+) * JasperReports View classes support JasperReports 2.0 while remaining compatibl e with JasperReports 1.3
Changes in version 2.1 M3 (2007-07-31)
-------------------------------------- General * fixed and updated reference documentation on JMS listener container configurat ion and transaction participation Package org.springframework.aop * Cglib2AopProxy uses weak references for advised object, interceptors and valid ated classes (avoiding a memory leak) * ProxyFactoryBean avoids NPE in case of target class being null (due to misconf iguration) * fixed AspectJ pointcut handling to resolve bridge methods before matching * fixed AspectJ pointcut handling to correctly match generic return types * added support for "bean(name)" element in AspectJ pointcut expressions * ReflectiveMethodInvocation, BeanFactoryAdvisorRetrieval and other internal imp l classes are just package-visible now * the pointcut element's "id" attribute is required as of the 2.1 version of the AOP namespace (spring-aop-2.1.xsd) * aop:aspectj-autoproxy's "proxy-target-class" attribute properly escalates clas s proxying (not overriding the setting) * ConfigBeanDefinitionParser turns "pointcut" attribute into inner bean definiti on (instead of ref to an anonymous bean) * fixed ConfigBeanDefinitionParser to properly handle empty pointcut/advice bean names in a tooling environment * added "getAspectClassLoader()" method to AspectInstanceFactory interface * revised reflective class loading to use the correct ClassLoader according to t he OSGi bundle structure (if any) * declare-parents allows specifying "delegate-ref" to delegate introductions to a bean as alternative to "default-impl" Package org.springframework.beans * added "charsToDelete" and "emptyArrayAsNull" options to StringArrayPropertyEdi tor * URIEditor trims whitespace before parsing the URI (allowing for XML formatting with whitespace) * BeanWrapperImpl lazily performs JavaBeans introspection (avoiding introspectio n failure for non-visible target class) * TypeConverterDelegate protects its collection conversion process against misbe having Collections with a null Iterator * TypeConverterDelegate only attempts to convert well-known collection types (sk ips custom types in the first place) * PropertyBatchUpdateException synchronizes on PrintStream/PrintWriter (like the JDK 1.6 Throwable class does) * BeanFactoryUtils uses linked HashMaps for "beansOfTypeIncludingAncestors", pre serving "getBeansOfType" order * added "isEagerInit()" method to SmartFactoryBean interface, making post-proces sors apply to an exposed object eagerly * exposed "getBean(name, args)" method on BeanFactory interface * exposed "BeanDefinition getMergedBeanDefinition(beanName)" method on Configura bleBeanFactory interface * exposed "isFactoryBean" and "registerDependentBean" methods on ConfigurableBea nFactory interface * introduced "isAutowireCandidate" method on ConfigurableListableBeanFactory int erface * passing in explicit arguments for bean creation is supported for constructors as well (not just for factory methods) * passing in different combinations of explicit arguments is supported for overl oaded factory methods and constructors * PropertyPathFactoryBean supports a null property value (removed historic restr iction there) * exposed "parentName", "factoryBeanName" and "factoryMethodName" properties in BeanDefinition interface * added "visitParentName", "visitFactoryBeanName" and "visitFactoryMethodName" c allbacks to BeanDefinitionVisitor * PropertyPlaceholderConfigurer resolves placeholders in parent, factory-bean an d factory-method values as well * fixed AbstractBeanFactory to correctly handle factory-bean references in case of a temporary ClassLoader being used * DefaultListableBeanFactory ignores invalid parent bean names when matching bea ns by type with allowEagerInit=false * DefaultListableBeanFactory only ignores invalid bean class names when matching beans by type with allowEagerInit=false * DefaultListableBeanFactory does not invoke custom init/destroy method twice if pointing to Initializing/DisposableBean * DefaultListableBeanFactory allows for concurrent "registerBeanDefinition" call s after the configuration phase * bean creation records suppressed exceptions, exposing them as related causes i n a subsequent BeanCreationException * added "setTypeConverter" method to ConfigurableBeanFactory, allowing to overri de the default PropertyEditor mechanism * introduced "removeBeanDefinition" method in BeanDefinitionRegistry interface a nd DefaultListableBeanFactory class * exposed "isBeanNameInUse" method on BeanDefinitionRegistry interface * AbstractBeanFactory supports any BeanDefinition implementation (does not requi re AbstractBeanDefinition anymore) * reworked AbstractBeanFactory's bean definition merging for less coupling to Ro otBeanDefinition as merge result * introduced GenericBeanDefinition as one-stop shop for standard bean definition purposes (with configurable parent) * DefaultBeanNameGenerator does not require an AbstractBeanDefinition implementa tion for bean name generation anymore * DefaultBeanNameGenerator generates a "#0" suffix in the canonical name even fo r the first occurence of an unnamed bean * added "resolveDependency" methods to AutowireCapableBeanFactory interface * @Autowired annotation ignores target beans marked as autowire-candidate="false " (analogous to standard autowiring) * added autowiring by type for arrays, collections, maps (available for @Autowir ed, 'constructor', 'byType' autowiring) * Autowired/CommonAnnotationBeanPostProcessor registers autowired beans as depen dent on their injected target bean * AnnotationBeanConfigurerAspect proceeds without injection in case of a circula r reference problem, logging a warning * added "registerBeanComponent" convenience method to ParserContext * changed visibility of BeanDefinitionParserDelegate's "buildTypedStringValue(Fo rMap)" methods to protected Package org.springframework.context * AspectJWeavingEnabler implements Ordered, exposing HIGHEST_PRECEDENCE (executi ng before other factory post-processors) * moved AnnotationConfigUtils to "context.annotation" package (post-processor be ans are a context-specific feature) * "context:annotation-config" XML tag activates JPA's @PersistenceContext and @P ersistenceUnit as well (if available) * AnnotationConfig/ComponentScanBeanDefinitionParser sends component registratio n for each registered BeanPostProcessor * AnnotationBeanNameGenerator does not silently adapt the default bean name in c ase of overlap anymore * "context:spring-configured" registers its bean configurer aspect with a fixed internal bean name * revised reflective class loading to use the correct ClassLoader according to t he OSGi bundle structure (if any) Package org.springframework.cache * added "maxElementsOnDisk" bean property to EhCacheFactoryBean, supporting EHCa che 1.2.4's extended Cache constructor Package org.springframework.core * added "isAtLeastJava16()" convenience method to JdkVersion class * OverridingClassLoader (and hence SimpleThrowawayClassLoader) exclude classes f rom the "sun." package * fixed PathMatchingResourcePatternResolver to build correct JarFile URLs on Web Logic and WebSphere * PathMatchingResourcePatternResolver uses a static Log instance in order to avo id repeated synchronization overhead Package org.springframework.ejb * turned visibility of AbstractEnterpriseBean and AbstractSessionBean to public (showing up in the javadoc now) Package org.springframework.instrument * added "excludePackage" and "excludeClass" methods to ShadowingClassLoader, ana logous to OverridingClassLoader Package org.springframework.jdbc * added exception translation based on SQLException subclasses introduced in Jav a 6 * added additional exceptions to divide hierarchy into Recoverable, Transient an d NonTransient exceptions * added support for arrays of values in parameter value lists: "select * from t where (a, b) in ((1,'x'), (3,'y'))" * added DerbyMaxValueIncrementer to provide an alternative for autoGeneratedKeys used with IDENTITY columns * added HsqlSequenceMaxValueIncrementer to support sequences now added to HSQL * added H2SequenceMaxValueIncrementer to support sequences in H2 Database Package org.springframework.jms * SingleConnectionFactory sets client ID before ExceptionListener (for providers with strict Connection state handling) * added "receiveTimeout" property to JmsInvokerClientInterceptor/ProxyFactoryBea n (with reimplemented request execution) * listener-container type "default102"/"simple102" leads to the implicit choice of MessageListenerAdapter102 Package org.springframework.jmx * MBeanExporter unregisters its MBeans in case of any kind of registration failu re * MBeanExporter accepts bean name keys in NotificationListener mappings (in addi tion to ObjectName Strings) * revised reflective class loading to use the correct ClassLoader according to t he OSGi bundle structure (if any) Package org.springframework.orm * HibernateTemplate delegates to "SessionFactory.getCurrentSession()" when "allo wCreate" has been set to "false" * added overloaded "findByExample" methods with entityName argument to Hibernate Operations/HibernateTemplate * deprecated HibernateTemplate's "saveOrUpdateAll" method in favor of individual "saveOrUpdate"/"merge" usage * fixed Hibernate/JpaTransactionManager to clean up properly in case of transact ion begin failure on pre-bound resource * added "prepareTransaction" method to JpaDialect interface, for preparing a JTA -joining EntityManager * HibernateJpaDialect switches FlushMode to MANUAL in case of a read-only transa ction even for JTA * PersistenceAnnotationBeanPostProcessor registers autowired beans as dependent on their EntityManagerFactory * ExtendedEntityManagerCreator's "joinTransaction()" checks whether there is an externally managed local transaction * ExtendedEntityManagerCreator's EntityManager proxies are serializable now Package org.springframework.mock * MockHttpServletResponse automatically flushes the Writer in case of a "write(i nt)" call too Package org.springframework.remoting * RmiClientInterceptor and JaxRpcClientInterceptor propagate any kind of declare d RemoteException as-is * (Jndi)RmiClientInterceptor resets stub before a refresh attempt, avoiding race condition in case of registry restart * JndiRmiClientInterceptor wraps CORBA SystemExceptions in RemoteExceptions (if declared) Package org.springframework.scheduling * added "waitForTasksToCompleteOnShutdown" property to ScheduledExecutorFactoryB ean * changed ScheduledExecutorFactoryBean's default behavior to shutdown immediatel y, not waiting for scheduled tasks Package org.springframework.scripting * updated JRuby support for JRuby 1.0 compatibility (still compatible with JRuby 0.9.8 / 0.9.9 as well) Package org.springframework.test * AbstractDependencyInjectionSpringContextTests allows for annotation-driven aut owiring (even in case of AUTOWIRE_NO) Package org.springframework.scheduling * Quartz SchedulerFactoryBean does not set default AdaptableJobFactory in case o f RemoteScheduler (not supported there) Package org.springframework.scripting * "lang:*" configuration elements create their implicit ScriptFactoryPostProcess or under a fully qualified bean name Package org.springframework.transaction * refined TransactionAspectSupport to allow for overriding the "getTransactionMa nager()" method in subclasses * TransactionInterceptor only uses ThrowableHolderException if necessary and mak es sure to expose the cause in any case * "tx:annotation-driven" registers its transaction aspect with a fixed internal bean name Package org.springframework.util * fixed "StringUtils.parseLocaleString" to parse multiple variants correctly * DefaultPropertiesPersister detects and uses JDK 1.6's "Properties.load/store" variants with Reader/Writer argument Package org.springframework.validation * added overloaded "rejectIfEmpty(OrWhitespace)" methods with args but without d efault message to ValidationUtils Package org.springframework.web * factored out "invokeDelegate" template method in DelegatingFilterProxy * fixed Servlet/PortletContextResourcePatternResolver to correctly match bounded patterns * fixed FrameworkServlet to always refresh its BeanNameUrlHandlerMapping with th e correct context * added "postProcessWeb/PortletApplicationContext" method to FrameworkServlet/Po rtlet * DispatcherServlet/Portlet's "noHandlerFound" declares Exception instead of jus t IOException/PortletException * added "addInterceptor" and "addInterceptors" methods to Servlet/Portlet Handle rExecutionChain * AbstractUrlHandlerMapping exposes "path within mapping" attribute through an i nterceptor (for proper include cleanup) * AbstractWizardFormController's "showForm" method is not final anymore (can be overridden e.g. for exception handling) * added "transformerFactoryClass" property and "newTransformerFactory()" templat e method to (Abstract)XsltView * added "accept-charset" support to JSP FormTag * fixed JSP CheckboxTag to apply the custom PropertyEditor (if any) to rendered values
Changes in version 2.1 M2 (2007-05-31)
-------------------------------------- General * removed support for Hibernate 2.1; Spring's Hibernate support generally requir es Hibernate 3.1 or higher now * spring-context.jar includes JMX support and core remoting support (no spring-j mx and spring-remoting jars anymore) * spring-orm.jar combines all ORM support packages (replaces spring-jdo, spring- jpa, spring-hibernate etc jars) * spring-web.jar contains web-related remoting and ORM classes (for proper use i n J2EE EAR deployment structures) * renamed spring-dao.jar to spring-tx.jar, also containing the JCA support now * renamed spring-support.jar to spring-context-support.jar * renamed spring-portlet.jar to spring-webmvc-portlet.jar * module jar files contain module-specific "spring.handlers" and "spring.schemas " files now * added missing websphere_uow_api.jar to -with-dependencies distribution Package org.springframework.aop * ReflectiveMethodInvocation always uses a shared user attribute Map in clones ( for proper binding of multiple advices) * fixed MethodInvocationProceedingJoinPoint to properly pass modified arguments (via proceed) to subsequent aspects * fixed AbstractAspectJAdvisorFactory to ignore 'code-style' aspect classes that have been compiled by ajc * "aop:aspectj-autoproxy" XML configuration tag detects all aspect beans in case of empty XML body content as well * moved "aop:spring-configured" to context namespace ("context:spring-configured ") in the 2.1 versions of the XSDs Package org.springframework.beans * CustomBooleanEditor trims text before comparing against true/false Strings * added temporary ClassLoader support to ConfigurableBeanFactory / AbstractBeanF actory * mirrored FactoryBean's "getObjectType()" as abstract method in AbstractFactory Bean again, for @Override compatibility * reworked SmartInstantiationAwareBeanPostProcessor's "determineConstructor" hoo k into "determineCandidateConstructors" * added "resolveAliases" method to ConfigurableBeanFactory, applying a given Str ingValueResolver * PropertyPlaceholderConfigurer applies its placeholder parsing to alias target names and aliases as well * PropertyResourceConfigurer (and in particular PropertyPlaceholderConfigurer) i s marked as PriorityOrdered * BeanWiringInfo and ClassName/AnnotationBeanWiringInfoResolver support the noti on of a 'default' bean name * @Configurable applies factory callbacks (BeanFactoryAware, InitializingBean et c) and post-processors as well * @Configurable applies factory callbacks and post-processors if no bean definit ion found for default bean name * DefaultListableBeanFactory clears a cached merged bean definition in case of r e-registering a bean definition * AbstractBeanDefinition declares a public "clone()" method as well as "Abstract BeanDefinition cloneBeanDefinition()" * AbstractBeanDefinition excludes purely descriptive metadata from its equals ch eck (for more lenient equality) * fixed BeanDefinitionParserDelegate to avoid NPE in case of a custom namespace without a NamespaceHandler registered * fixed BeanDefinitionParserDelegate to extract correct source element for "key- ref"/"value-ref" attributes * added 'required' attribute to @Autowired annotation (configurable for a custom autowire annotation as well) * avoid double invocation of @Autowired/@Resource setter method in case of expli citly specified property value * InitDestroy/Common/AutowiredAnnotationBeanPostProcessor use ConcurrentHashMaps for minimal locking * introduced AnnotatedBeanDefinition interface and AnnotatedRootBeanDefinition i mplementation class * added support for the JDK 1.6 ServiceLoader facility (package "beans.factory.s erviceloader") Package org.springframework.cache * EhCacheFactoryBean applies a specified CacheEntryFactory to an existing cache region as well Package org.springframework.context * AbstractApplicationContext instantiates and applies priority-ordered Bean(Fact ory)PostProcessors first * AbstractApplicationContext creates all non-ordered BeanPostProcessors first be fore registering them with the factory * AbstractApplicationContext sets a temporary ClassLoader for type matching if a bean named "loadTimeWeaver" is defined * added LoadTimeWeaverFactoryBean, building a default LoadTimeWeaver (autodetect ing the runtime environment) * added LoadTimeWeaverAware interface, automatically supported if a default Load TimeWeaver is available * added AspectJWeavingEnabler, registering AspectJ's class transformer for stand ard AspectJ load-time weaving * added "context:load-time-weaver" XML tag, building a default LoadTimeWeaver an d enabling AspectJ load-time weaving * introduced ScannedRootBeanDefinition class for autodetected components * added @Scope annotation for autodetected components, indicating the target bea n scope in the Spring context * reworked ClassPathBeanDefinitionScanner into subclass of ClasspathScanningCand idateComponentProvider * ClassPathBeanDefinitionScanner provides "addIncludeFilter" etc config methods instead of overloaded "scan" methods * reworked ComponentBeanNameGenerator into AnnotationBeanNameGenerator, handling @Repository name values as well * explicit bean names indicated by autodetected components are enforced, only to be overridden by explicit definitions Package org.springframework.core * updated NestedXxxException to build on JDK 1.4 exception chaining, adding exte nded messages and convenience accessors * introduced PriorityOrdered marker interface, with order values automatically a pplied before any plain Ordered values * fixed BridgeMethodResolver to properly detect a method that substitutes a type parameter with an array type * fixed BridgeMethodResolver to detect type variables in interface hierarchies w ith different type variable names * added "getClassLoader()" method to ClassPathResource, exposing the ClassLoader used for resource loading * PathMatchingResourcePatternResolver avoids full subtree scan through skipping non-matching directory paths early * PathMatchingResourcePatternResolver explicitly closes freshly created JarFile handles, to allow for hot redeployment * introduced ClassMetadata/AnnotationMetadata abstraction in "core.type" package * refactored "core.typefilter" package into "core.type.asm" and "core.type.filte r" * introduced ClassReaderFactory abstraction, with SimpleClassReaderFactory and C achingClassReaderFactory implementations * introduced ClassReaderFactory as TypeFilter match argument, for resolving cach ed ClassReaders for the type hierarchy * moved FilterType enum to "context.annotation" package, since it is closely rel ated to component scanning * introduced AnnotatedBeanDefinition interface and AnnotatedRootBeanDefinition i mplementation class * introduced ScannedRootBeanDefinition class for autodetected components * StringCodedLabeledEnum accepts empty codes (that purely consist of whitespace) as well Package org.springframework.jdbc * added named parameter support to SimpleJdbcTemplate * added ParameterizedBeanPropertyRowMapper, providing automatic mapping between columns and bean properties * added new SqlReturnUpdateCount parameter to provide name for update counts fro m stored procedures * added stored procedure support for retrieving update counts and storing the re trieved int in the output map * added automatic processing of stored proc returned resultsets (will create def ault one if declared parameter missing) * added automatic processing of stored proc update counts (will create default o ne if declared parameter missing) Package org.springframework.jmx * MBeanExporter does not insist of a minimum of 1 bean exposed anymore, also acc epting no beans to export in the context Package org.springframework.mail * JavaMailSenderImpl sets the original message id (if specified in the given Mim eMessage) after "message.saveChanges()" Package org.springframework.mock * added MockJspWriter and MockBodyContent classes for testing content-emitting J SP tags * MockPageContext supports the "getOut()" method, exposing a MockJspWriter Package org.springframework.orm * LocalContainerEntityManagerFactoryBean and DefaultPersistenceUnitManager autod etect a context's default LoadTimeWeaver * avoid double invocation of @PersistenceContext/Unit setter method in case of e xplicitly specified property value Package org.springframework.transaction * marked DelegatingTransactionAttribute as Serializable * added mode="proxy"/"aspectj" flag to "tx:annotation-driven" config tag, for ch oosing the AspectJ transaction aspect * WebSphereUowTransactionManager does not enforce the presence of a JTA UserTran saction anymore * WebSphereTransactionManagerFactoryBean uses the context class loader for compa tibility with the WSAD 5.1 test server Package org.springframework.util * added "makeAccessible(Method)" and "makeAccessible(Constructor)" convenience m ethods to ReflectionUtils * added "matchStart" method to PathMatcher interface and AntPathMatch implementa tion, for checking the start of a match Package org.springframework.web * added "getDescription" method to WebRequest interface * ServletWebRequest and PortletWebRequest expose a descriptive "toString()" resu lt (including URI, session id, user id) * added "includeClientInfo" flag to AbstractRequestLoggingFilter, for including client address and session id in the log * added Log4jNestedDiagnosticContextInterceptor for use with Servlet and Portlet MVC * CookieLocaleResolver checks specified "defaultLocale" in case of a setLocale c all with null argument * RequestContext uses a shared default Theme instance as fallback, avoiding the recreating of empty Theme instances * MultiActionController explicitly disallows direct invocation of exception hand ler methods (as handler methods) * CancellableFormController suppresses validation for a cancel request * AbstractView and AbstractTemplateView pass an explicit ServletContext referenc e to a created RequestContext instance * changed AbstractTemplateView(Resolver)'s "exposeSpringMacroHelpers" default to "true" * JSP FormTag exposes full nested path for compatibility with Spring's standard BindTag * JSP TransformTag is able to work within JSP SelectTag etc as well, not just wi thin BindTag
Changes in version 2.1 M1 (2007-05-13)
-------------------------------------- General * Spring is built on JDK 1.6 now, with support for common Java 6 APIs / Java EE 5 APIs * Spring requires JDK 1.4 or higher now, not supporting JDK 1.3 anymore (JDK 1.3 has reached its official end-of-life) * Spring's Hibernate3 support generally requires Hibernate 3.1 or higher (note: there's separate Hibernate 2.1 support) * fixed contents of spring-remoting.jar: does not include RemoteInvocationUtilsT ests anymore Package org.springframework.aop * removed Perl5RegexpMethodPoint and RegexpMethodPointcutAdvisor's "perl5" flag (always using java.util.regex now) Package org.springframework.beans * introduced InitDestroyAnnotationBeanPostProcessor, processing configurable ini t and destroy annotations * introduced CommonAnnotationBeanPostProcessor, processing JSR-250's @PostConstr uct, @PreDestroy and @Resource * introduced @Autowired annotation, indicating that a field, config method or co nstructor is supposed to be autowired * introduced AutowiredAnnotationBeanPostProcessor, processing the new @Autowired annotation * fixed AbstractAutowireCapableBeanFactory to allow for changing the Instantiant ionStrategy (again) * deprecated BeanDefinitionReader's "BeanDefinitionRegistry getBeanFactory()" me thod in favor of "getRegistry()" * exposed "getBeanNameGenerator()" method in BeanDefinitionReader interface * changed XmlReaderContext's "getReader()" method to expose the plain BeanDefini tionReader interface * added "getResourceLoader()" convenience method to XmlReaderContext, exposing t he context's ResourceLoader (if any) * added "getBeanClassLoader()" convenience method to XmlReaderContext Package org.springframework.context * introduced CandidateComponentProvider mechnism, for finding annotated componen t classes through scanning the classpath * introduced "context" XML schema namespace, providing a "property-placeholder" convenience tag * introduced convenient tags for annotation-based configuration as part of the " context" namespace * removed deprecated ConsoleListener class Package org.springframework.core * introduced the "core.typefilter" package, for ASM-based scanning of class file s Package org.springframework.jca * introduced GenericMessageEndpointManager for JCA 1.5 message endpoint manageme nt, plus supporting infrastructure * introduced SpringContextResourceAdapter, for deploying a Spring application co ntext as JCA 1.5 RAR file * added BootstrapContextAware interface, as a callback in a JCA 1.5 resource ada pter environment Package org.springframework.jdbc * AbstractDataSource and DelegatingDataSource support the JDBC 4.0 Wrapper inter face * added Jdbc4NativeJdbcExtractor, delegating to JDBC 4.0's "unwrap" method (defi ned by java.sql.Wrapper) * added "streamAsLob" flag to DefaultLobHandler, allowing for explicit usage of the JDBC 4.0 setBlob/setClob variants * fixed SQLErrorCodeSQLExceptionTranslator to avoid potential NPE in debug log m essage * added BeanPropertyRowMapper, providing automatic mapping between columns and b ean properties * moved "isInputValueProvided" method from SqlOutParameter up to the SqlParamete r root class * fixed RdbmsOperation's "validateParameters" to properly detect and count input -providing SqlOutParameters Package org.springframework.jms * added JmsMessageEndpointManager, extending GenericMessageEndpointManager with the JmsActivationSpecFactory mechanism * added StandardJmsActivationSpecFactory, supporting all standard JMS propertied as defined by the JCA 1.5 specification * added DefaultJmsActivationSpecFactory, autodetecting ActiveMQ and JORAM's Acti vationSpecs and extended properties * introduced "jms" XML schema namespace, providing convenient tags for listener container configuration Package org.springframework.jmx * default MBean checks in JmxUtils and MBeanExporter automatically detect a Java 6 MXBean as well Package org.springframework.jndi * added SimpleJndiBeanFactory to "jndi.support" package, providing a JNDI-based BeanFactory implementation Package org.springframework.mail * removed CosMailSenderImpl (as part of generally removing COS support from the Spring codebase) Package org.springframework.mock * added support for Servlet 2.5's "getContextPath()" method to MockServletContex t Package org.springframework.orm * Hibernate LocalSessionFactoryBean prefers a Hibernate 3.1 CurrentSessionContex t now, instead of a SessionFactory proxy * Hibernate3 AbstractSessionFactoryBean's "exposeTransactionAwareSessionFactory" to refer to a SpringSessionContext now Package org.springframework.transaction * added TransactionFactory interface to "jta" subpackage, abstracting the creati on of specific JTA Transaction objects * JtaTransactionManager and WebLogic/OC4JJtaTransactionManager implement the Tra nsactionFactory interface accordingly * JtaTransactionManager autodetects and uses JTA 1.1's TransactionSynchronizatio nRegistry (e.g. on Java EE 5) * added WebSphereUowTransactionManager, supporting full transaction management v ia IBM's UOWManager API on WAS 6.0/6.1 * removed WAS 4.0/5.0 support from WebSphereTransactionManagerFactoryBean, keepi ng it for WAS 5.1 support only * removed outdated WebLogicServerTransactionManagerFactoryBean (for WebLogic 7.0 ) Package org.springframework.web * removed deprecated BindInitializer and BindUtils from the "bind" package * removed deprecated "setFilterConfig" method from GenericFilterBean (no WebLogi c 6.1 compatibility necessary anymore) * removed CosMultipartResolver (as part of generally removing COS support from t he Spring codebase) * introduced explicit JSF 1.2 support (web.jsf.el): DelegatingFacesELResolver an d WebApplicationContextFacesELResolver * JSP InputTag, SelectTag etc support expressions as "disabled" and "readonly" a ttribute values
Changes in version 2.0.5 (2007-05-07)
------------------------------------- Package org.springframework.aop * DelegatingIntroductionInterceptor only replaces a return value with the proxy if the proxy is actually assignable * JdkDynamic/Cglib2AopProxy only replaces return value with proxy if declaring c lass is not marked for raw target access * AbstractRefreshableTargetSource's "getTargetClass()" method is properly synchr onized * ScopedObject's "getTargetObject()" method returns the actual target object now (instead of the proxy object) * fixed "aop:scoped-proxy" tag to properly apply to defined alias names as well Package org.springframework.beans * BeanWrapper doesn't iterate over Collection/Map if no generic type declared an d no property-specific editor registered * BeanWrapper converts an empty String to null in case of a Java 5 enum as targe t type * default editor settings get copied to nested beans even if no default editors have been used yet * revised MethodInvokingFactoryBean's "getObjectType()" implementation to gracef ully return null if not prepared already * added "determineConstructor(beanClass, beanName)" method to SmartInstantiation AwareBeanPostProcessor * AbstractBeanFactory's "containsBean"/"isSingleton"/"isTypeMatch"/etc behave co rrectly for "&" FactoryBean dereferences * AbstractBeanFactory uses concurrent Maps for singletons, aliases and bean defi nitions (for better concurrency) * DefaultListableBeanFactory finds initialized FactoryBeans / factory-bean refer ences in case of allowEagerInit=false * fixed ConstructorResolver to correctly convert prepared collection arguments t o arrays if necessary (for prototypes) * added overloaded "rootBeanDefinition" factory methods with bean class name (in stead of Class) to BeanDefinitionBuilder * an (undefined) null value returned from a NamespaceHandler's "decorate" method is treated as 'no decoration required' * XmlBeanDefinitionReader caches the DefaultNamespaceHandlerResolver instance, s haring it across multiple files * added "getBeanClassName" template method to AbstractSingleBeanDefinitionParser , as alternative to "getBeanClass" * added "scope" attribute to "util:list", "util:set", "util:map" and "util:prope rties", allowing for scoped collections Package org.springframework.context * factored out fine-grained protected template methods from AbstractApplicationC ontext's "refresh()" implementation * AbstractRefreshableApplicationContext actually calls the 2.0.3-introduced "cus tomizeBeanFactory" template method Package org.springframework.core * BridgeMethodResolver is able to match open type variables in complex overloadi ng scenarios as well * BridgeMethodResolver caches based on TypeVariable references, handling overlap ping type variable names appropriately * added "createConcurrentMap" method to CollectionFactory, creating a JDK 1.5+ o r backport-concurrent ConcurrentHashMap * Constants class always uses upper-case transformation according to English not ation * added "toCodeForSuffix" operation to Constants class Package org.springframework.instrument * ShadowingClassLoader explicitly defines a package for all classes that it load s, for "Class.getPackage()" to work Package org.springframework.jdbc * fixed GeneratedKeyHolder to avoid NPE in exception message in case of a null k ey returned by the JDBC driver * fixed JdbcTemplate's fallback support for batch updates to properly handle Int erruptibleBatchPreparedStatementSetters * added scale support to SqlParameter, for declaring numeric RdbmsOperation para meters with a specific scale * added SqlParameterValue class, holding a value including SQL type and scale, a ccepted by JdbcTemplate argument arrays * optimized SQL parsing in NamedParameterUtils, NamedParameterJdbcTemplate and S qlOperation through the use of caching * added "execute" operation with PreparedStatementCallback argument to NamedPara meterJdbcOperations/Template * added overloaded "query" operations with ResultSetExtractor argument to NamedP arameterJdbcOperations/Template * SqlQuery and SqlUpdate accept named parameter declarations in arbitrary order (not requiring positional declaration) * SqlQuery and SqlUpdate accept unparameter declarations for named parameter usa ge (assuming positional declaration) Package org.springframework.jms * JndiDestinationResolver prefers a concurrent Map for caching purposes (for bet ter concurrency) * changed visibility of various AbstractMessageListenerContainer property access ors from protected to public * JmsInvokerClientInterceptor/ProxyFactoryBean and JmsInvokerServiceExporter sup port a configurable MessageConverter Package org.springframework.jndi * TypeMismatchNamingException carries required type and actual type as explicit attributes Package org.springframework.orm * ExtendedEntityManagerCreator efficiently detects JTA through PersistenceUnitIn fo's "transactionType" (if possible) * PersistenceAnnotationBeanPostProcessor is able to resolve a lazy EntityManager Factory via its unit name as well * factored out "findEntityManagerFactory(ListableBeanFactory, unitName)" method into EntityManagerFactoryUtils Package org.springframework.remoting * RemoteExporter shows "use reference, not value" error message in case of the s pecified service object being a String * added "replaceExistingBinding" property to RmiServiceExporter, allowing to tur n off the automatic replacement strategy * JndiRmiClientInterceptor/ProxyFactoryBean detects CORBA SystemExceptions and c onverts them to RemoteAccessExceptions * JndiRmiClientInterceptor/ProxyFactoryBean detects CORBA OBJECT_NOT_FOUND conne ct failures and recovers accordingly Package org.springframework.scheduling * MethodInvokingJobDetailFactoryBean avoids obtaining the target bean twice in c ase of "targetBeanName" specified * revised MethodInvokingJobDetailFactoryBean's error message to include the targ et class instead of the target object * DelegatingTimerTask catches any exception or error thrown from its delegate Ru nnable, to make the Timer proceed * added "continueScheduledExecutionAfterException" flag to ScheduledExecutorFact oryBean, overriding the default behavior Package org.springframework.scripting * added "init-method" and "destroy-method" attributes on "lang:groovy/bsh/jruby" , for init/destroy methods in scripts * ScriptFactoryPostProcessor generates config interface methods for init/destroy methods as well, if demanded Package org.springframework.test * AbstractTransactionalSpringContextTests' "onSetUp()"/"onTearDown()" are non-fi nal, allowing for flexible overriding Package org.springframework.transaction * AbstractPlatformTransactionManager properly resumes 'foreign' existing synchro nization even in case of begin failure * revised OC4JJtaTransactionManager to support the "oracle.j2ee.transaction" pac kage on OC4J later than 10.1.3.2 Package org.springframework.ui * ResourceBundleThemeSource will always return the same Theme instance for a giv en theme name Package org.springframework.util * PathMatcher's javadoc defines the semantics of the "extractPathWithinPattern" method in more detail * AntPathMatcher's "extractPathWithinPattern" preserved a path's leading separat or in case of a "*.html" pattern match Package org.springframework.web * ContextLoader loads parent context based on "parentContextKey" parameter, not requiring "locatorFactorySelector" param * DispatcherServlet/Portlet only refresh their strategies if their own Applicati onContext refreshes * made AbstractHandlerMapping's "setInterceptors" method non-final * added "extendInterceptors" template method to AbstractHandlerMapping, for regi stering additional interceptors * UrlFilenameViewController and InternalPathMethodNameResolver prefer a concurre nt Map for caching purposes * added "mappedHandlerClasses" property to Servlet/Portlet SimpleMappingExceptio nResolver, for mapping specific types * factored out protected "shouldApplyTo" and "doResolveException" template metho ds in SimpleMappingExceptionResolver * added "localesToInitialize" property to ResourceBundleViewResolver, for initia lizing common locales eagerly * XmlViewResolver (and similar strategies) work again in combination with the im plicit default BeanNameUrlHandlerMapping * JSP FormTag escapes the entire query string, including the parameter separator s * JSP SelectTag always renders a full closing tag (i.e. never renders a short-ci rcuited opening tag with "/>" ending) * JSP SelectTag accepts null values for its attributes (doesn't strictly enforce non-null values anymore) * JSP OptionTag properly detects a Java 5 Enum as selected even in case of an ov erridden "toString()" implementation * FreeMarkerView exposes a ServletConfig object to FreeMarker, for use with Serv letConfig-accessing JSP tags * fixed AbstractXsltView to correctly apply a specified custom "contentType", ev en in case of a stylesheet specified * revised XsltView for Servlet 2.3 compatibility, avoiding the "HttpServletRespo nse.setCharacterEncoding" method * revised XsltView to respect a specified "contentType" property, using it if no XSLT media type has been specified * fixed XsltViewResolver to properly apply the "cacheTemplates" flag to created XsltView instances * revised AbstractJasperReportsView to accept a model without explicit data sour ce as well (for Hibernate/JPA queries) * PortletUtils' "getParametersStartingWith" method checks for an empty value arr ay (WebSphere Portal 6.0 peculiarity)
Changes in version 2.0.4 (2007-04-10)
------------------------------------- Package org.springframework.aop * AbstractAutoProxyCreator caches advice information per bean, for efficient pro totype creation with auto-proxying * fixed AspectJAfterReturningAdvice to avoid NPE within returning type check in case of the return value being null * fixed AspectJAwareAdvisorAutoProxyCreator's "toString()" implementation to be compatible with JDK 1.3/1.4 * AnnotationAwareAspectJAutoProxyCreator caches Advisors for singleton @Aspect a spects, increasing performance * introduced Simple(MetadataAware)AspectInstanceFactory, creating an independent aspect instance on every invocation * revised AspectJProxyFactory to avoid "spring-beans" dependencies, using Simple MetadataAwareAspectInstanceFactory now * AbstractAspectJAdvice lazily calculates argument bindings, avoiding a "spring- beans" dependency (InitializingBean) * "this" pointcut in AspectJ pointcut expressions is matched against the proxy o bject rather than the target object Package org.springframework.beans * PropertyEditorRegistrySupport/BeanWrapperImpl lazily registers default editors when needed (to avoid init overhead) * PropertyEditorRegistrySupport supports registration of shared editors, to allo w for specific synchronization * BeanWrapperImpl mimimizes bean name parsing overhead and caches parsed propert y path tokens * PatternEditor allows for customization through specifying "java.util.regex.Pat tern" flags * fixed PropertyPlaceholderConfigurer/BeanDefinitionVisitor to correctly handle TypedStringValue objects with null value * AbstractFactoryBean offers a protected "getBeanFactory()" method for accessing its BeanFactory reference * BeanReferenceFactoryBean returns null from "getObjectType()" if the BeanFactor y has not been injected yet * AbstractAutowireCapableBeanFactory uses "filteredPropertyDescriptorsCache" for the PropertyDescriptor array per class * DefaultListableBeanFactory is able to invoke public init and destroy methods o n package-protected classes * DefaultListableBeanFactory caches pre-converted property values as far as poss ible * DefaultListableBeanFactory allows placeholders in class names even for non-laz y-init beans * ConstructorResolver caches the resolved constructor or factory method, for fas ter re-creation of prototype instances * ConstructorResolver caches converted argument values, to avoid conversion over head for re-created prototype instances * DefaultNamespaceHandlerResolver logs linkage error at warn level, in case of a handler class found but not loadable Package org.springframework.context * added "addApplicationListener" method to ConfigurableApplicationContext interf ace, for statically registered listeners Package org.springframework.core * added "getNames", "getNamesForProperty", "getNamesForSuffix" and "getValuesFor Suffix" methods to Constants * fixed GenericCollectionTypeResolver to correctly navigate Map-List-List struct ures with a nesting level of 3 or more * BridgeMethodResolver performs multi-step resolution of type variables, for com plex multi-type inheritance scenarios Package org.springframework.dao * PersistenceExceptionTranslationInterceptor supports PersistenceExceptionTransl ator autodetection in standalone mode Package org.springframework.jca * added "setConnectionSpec" method and corresponding constructor to CciTemplate, for specifying a spec at template level * added "getDerivedTemplate(ConnectionSpec) method to CciTemplate, for obtaining a template with just different con spec * added "getCciTemplate(ConnectionSpec) method to CciDaoSupport, for obtaining a template with just different con spec Package org.springframework.jdbc * SqlOperation and its subclasses do not pre-parse for named parameters anymore, accepting ":" in plain SQL strings Package org.springframework.jms * added "isSessionTransactional" method to ConnectionFactoryUtils * introduced SessionProxy interface for target Session access, exposed by Transa ctionAwareConnectionFactoryProxy * DefaultMessageListenerContainer switches "sessionTransacted" to "true" in case of a non-JTA ResourceTransactionManager * DefaultMessageListenerContainer rolls back an external transaction in case of a message rejected while stopping * DefaultMessageListenerContainer does not eagerly commit/rollback a in case of a synchronized transacted Session * DefaultMessageListenerContainer obtains a shared Connection lazily in case of autoStartup="true" * DefaultMessageListenerContainer recovers a shared Connection lazily if it is n ot currently running (has been stopped) * DefaultMessageListenerContainer allows for specifying the listener object lazi ly, and for replacing it at runtime * fixed JmsInvokerClientInterceptor/ProxyFactoryBean's "queue" property to decla re type Queue now Package org.springframework.jndi * added "proxyInterfaces" property to JndiObjectFactoryBean, for specifying mult iple interfaces * JndiObjectFactoryBean autodetects proxy interfaces from a specified "expectedT ype", if necessary * JndiObjectTargetSource returns the specified "expectedType" as target class if no JNDI object has been obtained yet Package org.springframework.mail * added "setPriority" method to MimeMessageHelper, for populating the "X-Priorit y" mail header Package org.springframework.mock * MockHttpServletResponse automatically marks the response as committed once the buffer size has been exceeded * MockHttpServletResponse marks the response as committed in case of a "OutputSt ream.flush()" / "Writer.flush()" call Package org.springframework.orm * SharedEntityManagerCreator's proxies deliver a "toString()" result without tou ching a target EntityManager * added protected "getPersistenceUnitInfo" method to DefaultPersistenceUnitManag er, to allow for better subclassing * DefaultPersistenceUnitManager clears the default PersistenceUnitInfo once it h as been obtained * added "defaultPersistenceUnitName" property to PersistenceAnnotationBeanPostPr ocessor * PersistenceAnnotationBeanPostProcessor only sets fields/methods accessible whe n actually necessary Package org.springframework.remoting * RemoteInvocationUtils detects cycles in exception causes when updating the sta ck trace (avoiding an infinite loop) Package org.springframework.samples * added default Hibernate EntityManager and Apache OpenJPA configurations to Pet Clinic's WAR file and integration tests * PetClinic's JPA variant explicitly specifies "META-INF/orm.xml" as mapping fil e (for Hibernate EntityManager 3.3.0) * PetPortal's build script properly includes the Log4J jar in the WAR file Package org.springframework.scheduling * added "targetBeanName" property to MethodInvokingJobDetailFactoryBean for Quar tz, allowing for non-singleton targets * ThreadPoolTaskExecutor/ScheduledExecutorFactoryBean includes the corresponding bean name in startup/shutdown logging Package org.springframework.scripting * LangNamespaceHandler references ScriptFactory classes by name, to avoid NoClas sDefFoundErrors in all scenarios * added "scope" attribute to all script tags in the "lang" namespace, allowing f or non-singleton script objects * updated JRuby support for JRuby 0.9.8 (requiring this version now due to incom patible JRuby API changes) Package org.springframework.test * added "getActualException()" method to AssertThrows, for introspecting the act ual exception instance after throwing Package org.springframework.transaction * factored out TransactionOperations interface from TransactionTemplate, definin g the central "execute" operation * introduced ResourceTransactionManager (i.e. non-JTA) interface, indicating the resource factory that it operates on * "tx:advice" expects that the XML parser might not expose the defaults defined in "spring-tx-2.0.xsd" (e.g. on Resin) Package org.springframework.util * ObjectUtils's "nullSafeToString"/"getDisplayValue" returns an empty String if "Object.toString()" returned null * ClassUtils's "classPackageAsResourcePath" parses the class name in order to de tect the package name in all cases * fixed CustomizableThreadCreator to properly apply its "daemon" flag (inherited by SimpleAsyncTaskExecutor) Package org.springframework.web * added "getContextPath", "getRemoteUser", "getUserPrincipal", "isUserInRole", " isSecure" to WebRequest abstraction * changed visibility of "getRequest" accessor on ServletWebRequest and PortletWe bRequest to public * CharacterEncodingFilter sets the encoding as default response encoding on Serv let 2.4+ (if "forceEncoding"="true") * Servlet/PortletContextAware and Servlet/PortletConfigAware are simply skipped if they cannot be satisfied * added public "refresh()" operation with protected "onRefresh()" template metho d to DispatcherServlet/Portlet * reworked DispatcherServlet/Portlet to automatically refresh internal state if its ApplicationContext refreshes * DispatcherPortlet logs startup logging at debug level instead of info level, a nalogous to DispatcherServlet * factored out protected "getHandlerExecutionChain" template method in Servlet/P ortlet AbstractHandlerMapping * added "getRootHandler()" method to AbstractUrlHandlerMapping, called on each a ccess to the root handler * added overloaded "suppressValidation(request, command, errors)" variant to Bas eCommandController * deprecated "suppressValidation(request)" in BaseCommandController, in favor of the "(request, command)" variant * revised AbstractXsltView for transformer customization options ("buildTransfor mer" and "getTemplates" methods) * added "getParameters(model, request") variant to AbstractXsltView, deprecating the old "getParameters()" variant * "spring.tld" and "spring-form.tld" declare the Spring major version number (2. 0) as taglib version number * fixed JSP BindTag to correctly save and re-expose a page-scoped "status" attri bute (not just a request-scoped one) * JSP FormTag escapes the "action" attribute as well if HTML escaping has been r equested * JSP InputTag supports the common "autocomplete" HTML extension attribute (as s upported by IE and Firefox) * JSP InputTag and TextareaTag support the HTML "readonly" element correctly now , only rendering it if specified * JSP CheckboxTag applies custom editors for the element type when comparing col lection elements * added missing "readonly" attribute to JSP TextareaTag * checkbox and radiobutton macros in "spring.vm" for Velocity do not render an i d anymore (because it isn't unique) * checkbox macro in "spring.vm" for Velocity and "spring.ftl" for FreeMarker ren ders the default field marker * added theme macros to "spring.vm" for Velocity and "spring.ftl" for FreeMarker , providing access to theme messages
Changes in version 2.0.3 (2007-03-09)
------------------------------------- General * basic scheduling support is included in "spring-context.jar", with only Quartz support added in "spring-support.jar" * all checks for library presence are explicitly performed with Spring's own Cla ssLoader (not the application's) * overall startup/shutdown logging at info level is less verbose (activate debug log level for more config details) * included the "petportal" sample application in the "-with-dependencies" distri bution Package org.springframework.aop * introduced AfterAdvice marker, as super-interface of AfterReturningAdvice and ThrowsAdvice, for reduced coupling * exposed "invocableClone()" and "setUserAttribute"/"getUserAttribute" on ProxyM ethodInvocation, for reduced coupling * introduced TargetClassAware interface, extended by Advised, and framework-deco upled "AopUtils.getTargetClass" method * fixed ClassFilters to provide JDK-1.3/1.4-compatible "hashCode()" implementati ons for unions and intersections * MethodMatchers and Pointcuts support IntroductionAwareMethodMatcher for unions and intersections * added pointcut union operation to ComposablePointcut, reused by the "Pointcuts .union" convenience operation * RegexpMethodPointcutAdvisor references ORO classes indirectly, to avoid eager loading of ORO on Solaris JDK 1.6 * AnnotationMethodMatcher and AnnotationMatchingPointcut check for an annotation on the target method as well * added "forClassAnnotation" and "forMethodAnnotation" factory methods to Annota tionMatchingPointcut * redefined target-class proxying to create a JDK proxy in case of the target cl ass being an interface * CGLIB proxies handle "hashCode" calls according to their "equals" behavior, an alogous to JDK dynamic proxies * introduced stricter null checks for Advised/AdvisedSupport * exposed "indexOf(Advice)" method on Advised interface * revised ProxyConfig/AdvisedSupport's "toString()" output * added "setTargetClass" method to AdvisedSupport, building an EmptyTargetSource for the specified class * moved "aopProxyFactory" bean property and AdvisedSupportListener management do wn to new ProxyCreatorSupport base class * AdvisorChainFactory is not forced to implement the AdvisedSupportListener inte rface anymore * deprecated AdvisorChainFactoryUtils and HashMapCachingAdvisorChainFactory in f avor of SimpleAdvisorChainFactory * added overloaded ProxyFactory constructors for single-interceptor and TargetSo urce-only proxies * ProxyFactoryBean exposes a composite interface as object type in case of multi ple proxy interfaces specified * AbstractSingletonProxyFactoryBean and AbstractAutoProxyCreator use the bean Cl assLoader for generating proxies * reworked AdvisorAdapter and AdvisorAdapterRegistry to expose a MethodIntercept or right away * AspectJExpressionPointcut ignores target classes not accepted by PointcutExpre ssion matching (such as arrays) * AspectJExpressionPointcut falls back to the proxy method if the ShadowMatch fa iled for the target method * revised AspectJPointcutAdvisor to never apply AspectJ advice methods to themse lves (avoiding a stack overflow) * AbstractAspectJAdvice calls "setAccessible" on an advice method right before i nvocation and only if actually necessary * AspectJAdviceParameterNameDiscoverer properly considers reference pointcuts as potential source of parameter binding * AbstractAspectJAdvisorFactory detects @AspectJ aspects through the presence of the @Aspect annotation * MethodInvocationProceedingJoinPoint allows for multiple "proceed(arguments)" c alls, cloning the underlying invocation * PrototypeAspectInstanceFactory enforces that the target bean is a prototype; i t does not accept scoped objects * PrototypeTargetSource enforces that the target bean is a prototype; it does no t accept scoped objects * PrototypeTargetSource destroys bean instances on release (honors DisposableBea n and/or destroy-method) * ThreadLocalTargetSource destroys bean instances via ConfigurableBeanFactory's "destroyBean" (if possible) * added "forClass" factory method to EmptyTargetSource, allowing to indicate a s pecific target class * added "equals"/"hashCode" implementation to AbstractBeanFactoryBasedTargetSour ce * HotSwappableTargetSource's "hashCode" implementation returns a constant value even if the target object changes * added SimpleBeanTargetSource, performing a fresh getBean lookup on every reque st, for any kind of bean * ScopedProxyFactoryBean uses the BeanFactory's bean ClassLoader for generating scoped proxies * auto-proxying ignores objects exposed by ScopedProxyFactoryBeans; only their t arget beans are eligible * fixed "scoped-proxy" bean definition decorator to properly parse an inner bean with scoped-proxy marker * added "proxy-target-class" attribute to "scoped-proxy" XML tag, allowing to tu rn target class proxying off * reworked "scoped-proxy" XML tag to enforce a target class proxy selectively, f or its specific target bean * "scoped-proxy" marks its targets as autowireCandidate=false, to make autowirin g by type only hit the scoped proxy * @Configurable works for deserialized objects as well Package org.springframework.beans * CachedIntrospectionResults's "acceptedClassLoaders" facility uses thread-safe iteration * fixed BeanWrapperImpl's "toString()" output in case of no wrapped object set * BeanWrapperImpl supports nested generic collections as map keys and as indexed map values * added "getTypeConverter()" method to ConfigurableBeanFactory interface * MethodInvokingFactoryBean obtains the TypeConverter from the BeanFactory that it runs in * List/Set/MapFactoryBean convert elements to the generic type expressed in a su perclass/interface of the target class * added SmartInstantiationAwareBeanPostProcessor interface, supporting type pred iction (for scripted object types) * PropertyPlaceholderConfigurer detects and processes placeholders in scope name s as well * PropertyPlaceholderConfigurer does not log resolved (potentially decrypted) pl aceholder values at debug level anymore * PreferencesPlaceholderConfigurer resolves paths in placeholders ("myPath/myPla ceholderKey") as preference nodes * added "isPrototype(beanName)" method to BeanFactory interface, explicitly chec king for an independent instance * added extended SmartFactoryBean interface, including an "isPrototype()" method that checks for an independent instance * AbstractBeanFactory throws BeanCreationException will full context info if "po stProcessObjectFromFactoryBean" fails * DisposableBeanAdapter (as passed into "Scope.registerDestructionCallback") is serializable, even for post-processors * AbstractAutowireCapableBeanFactory does not trigger "toString()" call on argum ent for UnsatisfiedDependencyException * turned visibility of AbstractAutowireCapableBeanFactory's "applyPropertyValues " method from private to protected * DefaultListableBeanFactory's "getBeansOfType" only ignores currently-in-creati on for beans which are still in creation * added copy constructor to ChildBeanDefinition, for custom use in programmatic bean registration code * TypedStringValue overrides "equals", "hashCode" and "toString" * TypedStringValue implements the BeanMetadataElement interface and provides a " setSource" method * introduced BeanNameGenerator strategy interface, to be configured on an Abstra ctBeanDefinitionReader * added "generateBeanName/registerWithGeneratedName(BeanDefinition)" methods to XmlReaderContext * BeanDefinitionParseDelegate always builds TypedStringValue for "value" and "nu ll" XML elements, preserving the source * BeanDefinitionParseDelegate builds TypedStringValue for "entry" and "prop" key s and values, preserving the source * BeanDefinitionParseDelegate trims whitespace from "class" attributes in XML be an definitions * collection merging accepts a null parent value as well, simply using the child collection as-is in this case * indexed constructor arguments support collection merging (driven by merge="tru e", analogous to property values) * BeanDefinitions returned by nested custom XML elements receive a generated id, to avoid FactoryBean cache conflicts * added deprecated "findXxx" signatures back to NamespaceHandlerSupport, for ful l compatibility with Spring 2.0 final * added protected "shouldGenerateIdAsFallback()" template method to AbstractBean DefinitionParser * AbstractSingleBeanDefinitionParser applies a document's default-lazy-init="tru e" to its generated bean definitions * added "isEligibleAttribute" template method to AbstractSimpleBeanDefinitionPar ser, for excluding specific attributes * "util:properties" tag supports nested "prop" elements for local entries, analo gous to the standard "props" tag Package org.springframework.context * AbstractApplicationContext instantiates BeanPostProcessors which implemented O rdered before non-Ordered ones * AbstractApplicationContext applies start/stop callbacks to existing Lifecycle instances only, particularly on shutdown * AbstractApplicationContext correctly detects listener creation failure (in cas e of currently-in-creation exception) * factored out protected "destroyBeans()" template method in AbstractApplication Context, for custom bean destruction * AbstractRefreshableApplicationContext allows BeanFactory access during the des truction phase of a "refresh()" call * added "customizeBeanFactory(DefaultListableBeanFactory)" template method to Ab stractRefreshableApplicationContext * (Reloadable)ResourceBundleMessageSource trims whitespace from specified bundle basenames * ResourceBundleMessageSource by default uses the bean ClassLoader for loading b undles Package org.springframework.core * added "getMostSpecificCause()" method to NestedRuntime/CheckedException, retri eving the root cause or this exception * fixed BridgeMethodResolver's "populateTypeMapFromParameterizedType" to properl y handle nested generics * fixed BridgeMethodResolver to properly detect a generic interface even in a cl ass hierarchy * fixed BridgeMethodResolver to properly detect a generic array type as exposed by a vararg signature * introduced AsyncTaskExecutor extension interface, defining an "execute" varian t with start timeout * refactored SimpleAsyncTaskExecutor to allow for reuse of the CustomizableThrea dCreator class * SimpleAsyncTaskExecutor executes tasks with timeout='immediate' directly, bypa ssing the concurrency throttle * introduced TaskTimeoutException, thrown by an AsyncTaskExecutor in case of a t ask rejected because of a timeout Package org.springframework.dao * PersistenceExceptionTranslationPostProcessor uses the bean ClassLoader for gen erating translation proxies Package org.springframework.ejb * AbstractEnterpriseBean uses the EJB instance as WeakReferenceMonitor handle, i nstead of a BeanFactoryReference proxy * all "jee:*" tags support an "environment-ref" attribute, pointing to a shared bean of type "java.util.Properties" * OC4J's "com.evermind.server.rmi.RMIConnectionException" gets detected as Remot e EJB (RMI) connect failure as well Package org.springframework.instrument * ShadowingClassLoader excludes "com.sun." package by default (for using Sun's X erces version through JAXP) Package org.springframework.jca * TransactionAwareConnectionFactoryProxy throws JCA IllegalStateException in cas e of "getLocalTransaction()" access * CciLocalTransactionManager unwraps given TransactionAwareConnectionFactoryProx y to obtain its target ConnectionFactory * added ResourceAdapterFactoryBean to "jca.support" package, for bootstrapping a JCA 1.5 ResourceAdapter locally * introduced "jca.work" package, containing a JCA 1.5 WorkManagerTaskExecutor an d a SimpleTaskWorkManager implementation Package org.springframework.jdbc * added overloaded ConnectionHolder constructor with a given Connection plus "tr ansactionActive" flag as arguments * UserCredentialDataSourceAdapter delegates "getConnection(String, String)" to " doGetConnection", for unified handling * introduced IsolationLevelDataSourceAdapter, preparing Connections with isolati on level (transaction's or fixed) * introduced WebSphereDataSourceAdapter, obtaining Connections through WebSphere 's JDBCConnectionSpec facility * re-added Spring 1.2's "JdbcUtils.isNumeric" convenience method, for use by app lications (upgrading from Spring 1.2) * revised JdbcTemplate's prepared statement logging Package org.springframework.jms * marked JmsDestinationAccessor as abstract * moved protected "createConnection" and "createSession" methods from JmsTemplat e up to JmsAccessor * TransactionAwareConnectionFactoryProxy throws TransactionInProgressException i n case of manual commit/rollback calls * JmsTransactionManager unwraps given TransactionAwareConnectionFactoryProxy to obtain its target ConnectionFactory * ConnectionFactoryUtils's JmsResourceHolder only stops Connections if a SmartCo nnectionFactory explicitly asks for it * factored out AbstractJmsListeningContainer base class from AbstractMessageList enerContainer * AbstractMessageListenerContainer's "refreshSharedConnection" properly resets s hared Connection in refresh failure case * AbstractMessageListenerContainer explicitly aborts messages which have been de livered after initiated shutdown * added "acceptMessagesWhileStopping" flag to AbstractMessageListenerContainer, for processing all delivered messages * factored out AbstractPollingMessageListenerContainer base class from DefaultMe ssageListenerContainer * added dynamic scaling up/down to DefaultMessageListenerContainer, configured t hrough "maxConcurrentConsumers" property * DefaultMessageListenerContainer's Connection recovery loop catches any Excepti on thrown from "createConnection" * MessageListenerAdapter can delegate to native target (SessionAware)MessageList ener if no listener method specified Package org.springframework.jmx * MBeanExporter and MBeanServerConnectionFactoryBean use the bean ClassLoader fo r generating lazy-init proxies * MBeanExporter supports lazy-init standard MBeans analogously to lazy-init Spri ng beans with ModelMBean wrapping * factored out protected "isMBean(Class") method in MBeanExporter, to allow for extending the default MBean check * MBeanServerFactoryBean only tries to obtain the JDK 1.5 platform MBeanServer i n case of no agent id specified * MBeanServerFactoryBean tries to create a new MBeanServer if not allowed to acc ess the JDK 1.5 platform MBeanServer * added WebSphereMBeanServerFactoryBean, using WebSphere's proprietary AdminServ iceFactory API for MBeanServer access * added "agentId" property to MBeanClientInterceptor/MBeanProxyFactoryBean, for locating a specific MBeanServer Package org.springframework.jndi * JndiObjectFactoryBean uses the bean ClassLoader for generating lazy-init proxi es * JndiObjectTargetSource (as used by JndiObjectFactoryBean's "proxyInterface" su pport) throws JndiLookupException Package org.springframework.mock * added "clearAttributes()" method to MockHttpServletRequest and MockHttpSession * added "serializeState" and "deserializeState" methods to MockHttpSession, for testing attribute serialization * introduced MockFilterChain (recording the call) and PassThroughFilterChain (pa ssing the call on to a Filter/Servlet) Package org.springframework.orm * added "flushMode" init parameter to Hibernate3 OpenSessionInViewFilter (suppor ting "AUTO" etc as value) * Hibernate3 SessionFactoryUtils translates SQLGrammar/DataException into Invali dDataAccessResourceUsageException * Hibernate3 HibernateAccessor/TransactionManager translates GenericJDBCExceptio n using a default SQLExceptionTranslator * TopLink LocalSessionFactory provides "loginProperties"/"loginPropertyMap" bean properties, for applying login settings * TopLink LocalSessionFactoryBean uses the bean ClassLoader as TopLink Session C lassLoader Package org.springframework.remoting * all remoting ProxyFactoryBeans use the bean ClassLoader for generating service proxies * RemoteExporter uses the bean ClassLoader for generating service proxies * added public "getHost()" and "getPort()" accessors to RmiRegistryFactoryBean * added "alwaysCreate" flag to RmiRegistryFactoryBean, for avoiding the overhead of locating an existing registry * added "alwaysCreateRegistry" flag to RmiServiceExporter, for avoiding the over head of locating an existing registry * added "rebind()" method to JndiRmiServiceExporter, for recovering in case of t he target registry having been restarted * CodebaseAwareObjectInputStream uses "Class.forName", to be able to resolve arr ay classes with any ClassLoader * added "getTargetInterfaceName()" method to RmiInvocationHandler, for client-si de introspection * HttpInvokerClientInterceptor does not require an "afterPropertiesSet()" call f or initializing the request executor * added "serviceFactory" property to LocalJaxRpcServiceFactory, for passing in a pre-initialized ServiceFactory instance * fixed JaxRpcPortClientInterceptor to properly recover in case of a failed lazy "prepare()" attempt * JaxRpcPortClientInterceptor consistently throws RemoteLookupFailureException i f a lazy "prepare()" attempt failed * added "refreshServiceAfterConnectFailure" bean property to JaxRpcPortClientInt erceptor, allowing for service recovery Package org.springframework.scheduling * added "workListener" bean property to the CommonJ WorkManagerTaskExecutor * introduced the CustomizableThreadFactory class, implementing JDK 1.5's ThreadF actory SPI with bean-style configuration * ThreadPoolTaskExecutor's "corePoolSize" and "maxPoolSize" properties allow for runtime changes (e.g. through JMX) * added "getPoolSize()" and "getActiveCount()" methods to ThreadPoolTaskExecutor (intended for JMX exposure) * added "getThreadPoolExecutor()" accessor to ThreadPoolTaskExecutor, for native access to the underlying executor * added "exposeUnconfigurableExecutor" bean property to ScheduledExecutorFactory Bean * added support for the JSR-166 (java.util.concurrent) backport project, in the "scheduling.backportconcurrent" package Package org.springframework.scripting * added "getScriptedObjectType" method to ScriptFactory interface * Bsh/Groovy/JRubyScriptFactory uses the bean ClassLoader for generating script objects * BshObjectInvocationHandler/JRubyObjectInvocationHandler implement "equals"/"ha shCode/"toString" based on script object * BshScriptUtils and BshScriptFactory support BeanShell scripts that declare an actual class or instance * GroovyScriptFactory supports Groovy scripts that create an actual instance or explicitly return an object * Bsh/GroovyScriptFactory caches the script class as far as possible, building p rototypes from the same class * JRubyScriptUtils passes the declared return type to JRuby, for proper conversi on of number types * JRubyScriptUtils converts Ruby arrays back to declared Java arrays * ScriptFactoryPostProcessor uses the bean ClassLoader for generating refreshabl e script proxies * ScriptFactoryPostProcessor applies a config interface to the scripted target o bject only, not to a refreshable proxy * revised ScriptFactoryPostProcessor to support AOP auto-proxying for scripted o bjects * revised ScriptFactoryPostProcessor to support type determination for scripted objects * LangNamespaceHandler always registers all BeanDefinitionParsers, failing with NoClassDefFoundError for actual script Package org.springframework.test * AbstractSingleSpringContextTests uses GenericApplicationContext by default, cr eated through "createApplicationContext" * added "customizeBeanFactory(DefaultListableBeanFactory)" template method to Ab stractSingleSpringContextTests * AbstractSingleSpringContextTests supports "getConfigPaths()" method, specifyin g config files relative to test class * AbstractSingleSpringContextTests supports "getConfigPath()" method, specifying a single file relative to test class * changed the visibility of AbstractDependencyInjectionSpringContextTests's "inj ectDependencies" method to protected * changed the visibility of AbstractTransactionalSpringContextTests's "transacti onDefinition" field to protected * AssertThrows preserves an unexpected exception as root cause in the "wrong exc eption thrown" AssertionFailedError Package org.springframework.transaction * AbstractPlatformTransactionManager exposes "actualTransactionActive" flag for a newly synchronized existing tx as well * AbstractPlatformTransactionManager marks an existing transaction as rollback-o nly even in case of a commit exception * turned various AbstractPlatformTransactionManager methods from private to prot ected, for reuse in specific subclasses * JtaTransactionManager does not fail if default UserTransaction lookup fails: f alls back on TransactionManager instead * SpringJtaSynchronizationAdapter does not explicitly call "setRollbackOnly" on WebLogic, to preserve the root cause * added OC4JJtaTransactionManager for Oracle OC4J 10.1.3(.2), with support for t ransaction names and isolation levels * fixed AbstractFallbackTransactionAttributeSource to synchronize access to its attribute cache * added "order" attribute to "tx:annotation-driven" tag, determining the order o f the tx advisor in the advice chain Package org.springframework.util * ResourceUtils's "extractJarFileURL" only prepends a slash in front of a file p ath if it doesn't already have a slash * added CustomizableThreadCreator class, serving as base class for ThreadFactory adapters Package org.springframework.web * CharacterEncodingFilter only applies its encoding if actually specified (non-n ull) * ConfigurableWebApplicationContext and ConfigurablePortletApplicationContext ex pose config state through getters * RequestContextListener works correctly even in case of the "requestDestroyed" callback coming from a different thread * ServletRequestAttributes's DestructionCallbackBindingListener is serializable, surviving web app restarts * added "warnLogCategory" property to SimpleMappingExceptionResolver, allowing t o log the exception to warn level * added protected "determineStatusCode" method to Servlet SimpleMappingException Resolver, for custom status codes * added "rootHandler" bean property to AbstractUrlHandlerMapping, kicking in for the "/" path * added "detectHandlersInAncestorContexts" to BeanNameUrlHandlerMapping, for det ecting handler beans in the root context * added "excludedPackages" and "excludedClasses" bean properties to ControllerCl assNameHandlerMapping * ControllerClassNameHandlerMapping excludes all classes in the "org.springframe work.web.servlet.mvc" package by default * revised FormTag to be more extensible (through less assertions and consistent use of protected template methods) * OptionsTag accepts no or empty items specified, simply not rendering any optio n tags in such a case * ErrorsTag properly supports HTML escaping (participates in default HTML escapi ng and respects the "htmlEscape" flag) * ErrorsTag simply renders empty if neither a BindingResult nor a target object for its bind path is present * revised VelocityToolboxView to support Velocity Tools 1.3's init methods (View Tool callbacks are now deprecated) * FreeMarker "formTextarea" macro does not re-escape its value (escaping is up t o "htmlEscape"/"defaultHtmlEscape") * added "messageArgs" and "messageArgsText" macros to the "spring.ftl" FreeMarke r macro template library
Changes in version 2.0.2 (2007-01-08)
------------------------------------- General * fixed spring-beans.jar to not include "META-INF/aop.xml", "META-INF/spring.tld " and "META-INF/spring-form.tld" anymore * leverage the "trace" log level in the Spring core, to make activating the "deb ug" log level more bearable Package org.springframework.aop * AbstractRegexpMethodPointcut trims whitespace from passed-in "patterns" and "e xcludedPatterns" * fixed AbstractAutoProxyCreator to allow for proxying the same bean with multip le auto proxy creators (again) * BeanNameAutoProxyCreator trims whitespace from passed-in "beanNames" * ScopedProxyFactoryBean throws IllegalStateException if it couldn't determine t he type of the target bean (avoid NPE) * "scoped-proxy" tag works for non-singleton FactoryBeans as well, leveraging th e BeanFactory's improved type check * factored out BeanFactoryAdvisorRetrievalHelper from AbstractAdvisorAutoProxyCr eator * factored out BeanFactoryAspectJAdvisorsBuilder from AnnotationAwareAspectJAuto ProxyCreator * added AbstractBeanFactoryPointcutAdvisor and DefaultBeanFactoryPointcutAdvisor * each "aop:advisor" entry lazily initializes its Advice bean, to let all target beans be exposed to all Advisors Package org.springframework.beans * CachedIntrospectionResults allows for caching for specific ClassLoaders even i f their classes are not cache-safe * BeanWrapper interface extends TypeConverter interface, instead of just BeanWra pperImpl implementing TypeConverter * BeanWrapperImpl converts nested collection value (e.g. List within Map) to dec lared generic type, if applicable * BeanWrapperImpl's TypeMismatchException mentions the specific element that fai led in case of a (generic) collection * BeanWrapperImpl assigns a given array directly if component type matches and n o matching custom editors registered * added default editor for JDK 1.4's "java.net.URI" class, supporting "classpath :" pseudo URLs as well as general URIs * ResourceEditorRegistrar always registers ClassEditor for given ResourceLoader' s ClassLoader * added "originalBeanName(String)" method to BeanFactoryUtils, allowing to cut o ff a generated "#..." suffix * FieldRetrievingFactoryBean and PropertyPathFactoryBean extract the original be an name for their beanName-based syntax * added support for 'early access singletons' to AbstractFactoryBean, exposing a proxy in case of a circular reference * ListFactoryBean, SetFactoryBean and MapFactoryBean support exposure of a proxy in case of a circular reference * refined currently-in-creation check for lazy-init singletons, to avoid uninten ded BeanCurrentlyInCreationException * DefaultSingletonBeanRegistry and subclasses use unified mutex for singleton ac cess, to avoid potential for deadlocks * AbstractBeanFactory caches merged bean definitions with bean definition identi ty as key (to avoid bean name conflicts) * AbstractAutowireCapableBeanFactory caches "isExcludedFromDependencyCheck" resu lts for affected PropertyDescriptors * AbstractAutowireCapableBeanFactory provides two-step FactoryBean type check fo r non-singleton FactoryBeans as well * fixed AbstractAutowireCapableBeanFactory to only apply injection-before-wrappi ng check for singletons * DefaultListableBeanFactory avoids expensive dependency check preparations unle ss an actual dependency check is needed * ResourceEntityResolver catches any kind of Exception in system root URL check (in particular AccessControlException) * introduced XmlBeanDefinitionStoreException, with special support for SAXParseE xception and its location information * XmlBeanDefinitionReader chooses XSD validation if XmlValidationModeDetector in dicates AUTO (= no clear indication) * XML bean "id" and "name" (aliases) are allowed to define the same name (for ba ckwards compatibility with Spring 1.2.8) * BeanDefinitionDecorators are applied to inner beans as well (in particular: "p :" namespace works for inner beans now) * fixed AbstractBeanDefinitionParser and UtilNamespaceHandler to consistently us e ProblemReporter instead of exceptions * added "fatal" method to ProblemReporter, used by NamespaceHandlerSupport to re port a missing parser or decorator * added "defaultsRegistered" notification to ReaderEventListener, with DefaultsD efinition marker interface as argument * reworked BeanDefinitionParserDelegate to build and hold a DocumentDefaultsDefi nition instance, also firing an event * BeanDefinitionParserDelegate/AbstractBeanDefinitionParser report bean name gen eration failure through ProblemReporter * DefaultBeanDefinitioDocumentReader reports alias registration failure through ProblemReporter Package org.springframework.context * AbstractApplicationContext explicitly stops all Lifecycle Beans before destroy ing them one-by-one (to avoid delays) Package org.springframework.core * Conventions (as used by ModelMap) extracts inner class name for inner classes * Conventions (as used by ModelMap) extracts primary interface name for JDK prox ies * reworked CollectionFactory's "createApproximateCollection/Map" to preserve ori ginal Comparator for TreeSet/TreeMap * LocalVariableTableParameterNameDiscoverer uses current ClassLoader for ASM ana lysis (not the system ClassLoader) * PathMatchingResourcePatternResolver properly handles jar file roots returned b y the ClassLoader (e.g. on Resin) Package org.springframework.dao * added "singleResult" and "requiredSingleResult" methods to DataAccessUtils, di stinct from "uniqueResult"'s contract Package org.springframework.jdbc * RowMapperResultSetExtractor always uses ArrayList, even in case of unknown num ber of rows expected * JdbcTemplate by default uses "PreparedStatement.setString" for any CharSequenc e (including String and StringBuilder) * JdbcTemplate logs SQLWarnings at debug instead of warn level, to avoid repeate d warn logs for acceptable conditions * JdbcTemplate's "queryForObject" uses "requiredSingleResult" to never accept mo re than 1 row in result (as per its c.) * SqlQuery's "findObject" explicitly uses "singleResult" to never accept more th an 1 row in result (as per its contract) Package org.springframework.jms * introduced SmartConnectionFactory interface and "ConnectionFactoryUtils.releas eConnection" method * introduced DelegatingConnectionFactory, configuring whether a Connection shoul d be stopped before closing it * JmsTemplate/DefaultMessageListenerContainer do *not* explicitly stop their Con nections by default anymore (see above) * added "transactionName" property to DefaultMessageListenerContainer (in partic ular for WebLogic's tx monitoring) * fixed JmsInvokerClientInterceptor to always explicitly start its Connection (n ot rely on pre-started Connections) Package org.springframework.jmx * reworked MBeanProxyFactoryBean's and ConnectorServerFactoryBean's "setObjectNa me" to also accept ObjectName reference Package org.springframework.orm * SqlMapClientFactoryBean uses SqlMapClientBuilder with InputStream if possible (on iBATIS 2.3, to avoid encoding issue) * Hibernate3 LocalSessionFactoryBean automatically sets JTATransactionFactory if given a "jtaTransactionManager" * Hibernate3 LocalSessionFactoryBean only sets connection release mode "on_close " if not given a "jtaTransactionManager" * Hibernate3 LocalSessionFactoryBean exposes configured DataSource for schema up date (required on Hibernate 3.2.1+) * fixed Hibernate JTA transaction synchronization to properly mark a rollback on WebSphereExtendedJTATransactionLookup * HibernateJpaDialect switches FlushMode to MANUAL in case of read-only, and enf orces COMMIT or AUTO for read-write tx * fixed "hashCode()" handling in extended JPA EntityManager proxy, avoiding an e ternal recursion * extended JPA EntityManagers that join a synchronized transaction propagate a c ommit exception to the (commit) caller * PersistenceUnitReader determines URI-conforming persistence unit root (for Hib ernate EntityManager's archive browsing) * JpaTransactionManager and EntityManagerFactoryUtils's JTA synchronization clea r a pre-bound EntityManager on rollback * PersistenceAnnotationBeanPostProcessor allows for specifying JNDI names for pe rsistence units and persistence contexts * OpenXxxInViewFilters reobtain thread-bound holder for closing it, to allow for replacing the holder during a request Package org.springframework.remoting * RmiServiceExporter logs description of actual registry instead of port (to pro perly handle passed-in "registry") * HttpInvokerClientInterceptor/ProxyFactoryBean uses the ClassLoader of the cont aining BeanFactory for deserialization Package org.springframework.samples * cleaned up platform/login configuration in PetClinic's TopLink variant Package org.springframework.scheduling * fixed MethodInvokingJobDetailFactoryBean to be compatible with Quartz 1.6 as w ell as Quartz 1.5.2 (again) * reworked Quartz SpringBeanJobFactory's "ignoredUnknownProperties" into a Strin g array of unknown properties to ignore * CommonJ TimerManagerFactoryBean supports Lifecycle interface, suspending/resum ing its TimerManager accordingly * CommonJ TimerManagerFactoryBean explicitly stops its TimerManager on destroy, not relying on J2EE application shutdown * added "shared" flag to CommonJ TimerManagerFactoryBean, to suppress suspend/re sume/stop calls in case of a shared TM Package org.springframework.scripting * updated Groovy support to Groovy 1.0 final * added optional GroovyObjectCustomizer constructor arg to GroovyScriptFactory, to allow for setting a custom MetaClass * updated JRuby support to JRuby 0.9.2 (not compatible with previous JRuby versi ons anymore!) * fixed JRubyScriptFactory to correctly wrap Java objects that get passed into a JRuby script proxy * fixed JRubyScriptFactory's "findClassNode" to always cast the correct object Package org.springframework.test * added public "getApplicationContext()" method to AbstractSingleSpringContextTe sts * added public "getJdbcTemplate()" method to AbstractTransactionalDataSourceSpri ngContextTests Package org.springframework.transaction * AbstractPlatformTransactionManager logs full transaction definition when creat ing a new transaction * added "defaultTimeout" property to AbstractPlatformTransactionManager Package org.springframework.ui * VelocityEngineFactory/SpringResourceLoader supports Velocity-style comma-separ ated paths as "resourceLoaderPath" value Package org.springframework.util * added overloaded no-arg "start()" method to StopWatch * added "hasConstructor" and "getConstructorIfAvailable" methods to ClassUtils * ClassUtils's "getAllInterfaces"/"getAllInterfacesForClass" preserves interface definition order in the result array * fixed AntPathMatcher's "extractPathWithinPattern" to correctly extract paths t hat have fewer parts than the pattern * XmlValidationModeDetector returns VALIDATION_AUTO if it encounters a CharConve rsionException Package org.springframework.validation * added "prefix" property and "postProcessMessageCode" template method to Defaul tMessageCodesResolver Package org.springframework.web * IntrospectorCleanupListener explicitly exposes the web app ClassLoader as cach eable for CachedIntrospectionResults * introduced MissingServlet/PortletRequestParameterException subclasses of Servl et/PortletRequestBindingException * reworked the 'default value for missing parameter' check in Servlet/PortletReq uestUtils to be as efficient as possible * AbstractUrlHandlerMapping exposes PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE for de fault handler as well * extracted "getViewNameForUrlPath(String)" in UrlFilenameViewController, for fu ll compatibility with Spring 1.2.8 * added "alwaysInclude" bean property to InternalResourceView, for enforcing the use of an include (never a forward) * AbstractJasperReportsView automatically converts exporter parameter Strings th at start with a digit into Integers * added "getCompletePath()" method to AbstractDataBoundFormElementTag, esposing nested path concatenated with path * fixed ErrorsTag to use complete path as id, including the nested path * removed unnecessary setter assertions for optional properties in FormTag and I nputTag
Changes in version 2.0.1 (23.11.2006)
------------------------------------- General * included classes in the "test.annotation" and "test.jpa" packages (tiger mock directory) in the Spring API javadoc Package org.springframework.aop * HashMapCachingAdvisorChainFactory uses synchronized access to its method cache Map * AbstractAutoProxyCreator considers all Advices (not just MethodInterceptors) a s infrastructure classes to ignore * fixed AbstractAutoProxyCreator to only obtain beans for "interceptorNames" tha t have been fully initialized already * reworked AbstractAdvisorAutoProxyCreator's "extendCandidateAdvisors" into "ext endAdvisors", operating on sorted list * renamed AspectJInvocationContextExposingAdvisorAutoProxyCreator to AspectJAwar eAdvisorAutoProxyCreator * removed unintended JDK 1.5 dependency in AspectJExpressionPointcut ("equals"/" hashCode" implementation) * added "order" attribute to "aspect" tag in AOP schema, allowing to declarative ly specify ordering for aspect instances * reworked aspect ordering to allow aspect instances to depend on beans that in turn get advised by the same aspect * added @Order annotation support for @AspectJ style aspects, as alternative to implementing the Ordered interface * redesigned AspectJ support SPI: AspectInstanceFactory, AspectJPointcutAdvisor, AspectJAwareAdvisorAutoProxyCreator * renamed DelegatePerTargetObjectDelegatingIntroductionInterceptor to DelegatePe rTargetObjectIntroductionInterceptor Package org.springframework.beans * fixed BeanWrapperImpl to correctly determine generic type for each key in a ch ain (e.g. "myMap[myKey][myInnerKey]") * introduced PatternEditor for "java.util.regex.Pattern", automatically register ed when running on JDK 1.4 or higher * Number objects (as property or argument values) are automatically coerced into the target Number type (if necessary) * added CustomMapEditor for Map-to-Map conversion, with a default instance regis tered for SortedMap * added "equals" and "hashCode" implementations to BeanDefinitionHolder * PropertyValue's copy constructor copies source object as well * ConstructorArgumentValues copies ValueHolder content when merging, and enforce s uniqueness of merged ValueHolders * reworked BeanComponentDefinition into subclass of BeanDefinitionHolder, exposi ng aliases on the bean definition * re-added BeanReferenceFactoryBean, to allow for substituting the target bean n ame with a placeholder * UnsatisfiedDependencyException message for multiple matches mentions the names of all matching beans * improved "scope is not active" error message to explicitly hint at the singlet on-refers-to-scoped-bean problem * factory methods are allowed to return null, with the null value exposed as bea n reference * introduced "isTypeMatch" method on BeanFactory interface, allowing for type ch ecks without actually loading the Class * AbstractBeanFactory supports alias chaining, with an alias registered for a be an name that is itself an alias * AbstractBeanFactory uses bean name as cache key for merged bean definitions, t o avoid equality matching overhead * AbstractBeanFactory detects circular references between non-singletons and thr ows a corresponding exception * AbstractBeanFactory overrides an inner bean's singleton status from the merged outer bean (potentially a child def) * removed default for "abstract"/"singleton" attributes in "spring-beans.dtd", f or 2.0-style inheritance for inner beans * added "findAutowireCandidates" template method to AbstractAutowireCapableBeanF actory, superseding "findMatchingBeans" * DefaultListableBeanFactory excludes beans which are not autowire candidates ev en before it obtains the instances * fixed PropertyPlaceholderConfigurer to throw a BeanDefinitionStoreException in case of any circular reference * fixed PluggableSchemaResolver to accept a null ClassLoader argument (falling b ack to the default ClassLoader) * introduced CompositeComponentDefinition for holding nested components (applied e.g. for "aop:config" element) * introduced "registerComponent" method on ParserContext, for transparent regist ration of top-level or nested components * reworked AbstractBeanDefinitionParser to only determine id and build holder fo r top-level bean definition * "util:list/set/map" are now allowed as nested elements as well and do not requ ire an id anymore Package org.springframework.cache * reworked EhCacheFactoryBean to be based on EHCache 1.2's Ehcache interface rat her than the concrete Cache class * added "blocking" flag to EhCacheFactoryBean, for decorating the cache with EHC ache 1.2's BlockingCache * added "cacheEntryFactory" flag to EhCacheFactoryBean, for decorating with EHCa che 1.2's (Updating)SelfPopulatingCache Package org.springframework.context * added serialVersionUID to ApplicationEvent, for serialization compatibility wi th Spring 1.2 * LocaleContextHolder supports standard ThreadLocal as well as InheritableThread Local * EventPublicationInterceptor caches the application event constructor Package org.springframework.core * GenericCollectionTypeResolver correctly detects an array type as element type of a generic collection type * fixed BridgeMethodResolver to always identify an appropriate bridge method (av oid IllegalStateException) * introduced TaskRejectedException, thrown from a TaskExecutor if it does not ac cept a given task Package org.springframework.instrument * added GlassFishLoadTimeWeaver for GlassFish / Sun Application Server * refactored Java-5-only AbstractOverridingClassLoader into JDK-1.3-compatible O verridingClassLoader in "core" package Package org.springframework.jdbc * introduced AbstractRoutingDataSource and IsolationLevelDataSourceRouter * JdbcTemplate logs all warnings in case of "ignoreWarnings"=true, not just the first warning in the chain * added "setQueryTimeout" method to JdbcTemplate and RdbmsOperation, for specify ing a timeout outside of a transaction * removed bind parameter check from SqlOperation, not parsing the SQL anymore at all (relying on JDBC driver instead) Package org.springframework.jms * reimplemented JMSException translation to handle subclasses of standard JMSExc eptions in a specific fashion as well * refined AbstractMessageListenerContainer's autodetection of "pubSubDomain" fla g to handle WebLogic Topic correctly * DefaultMessageListenerContainer uses its bean name (if specified) as thread na me prefix for its default TaskExecutor Package org.springframework.jmx * MBeanExporter uses ObjectName as exposed by returned ObjectInstance after regi stration (which differs on WebSphere) * MethodExclusionMBeanInfoAssembler operates correctly in case of no "ignoredMet hods" specified Package org.springframework.mock * added "isActive()" and "close()" methods to MockHttpServletRequest and MockPor tletRequest * MockHttpServletResponse handles HTTP header names as case-insensitive (analogo us to MockHttpServletRequest) * added "setOutputStreamAccessAllowed" and "setWriterAccessAllowed" methods to M ockHttpServletResponse * unified mock object constructors that take ServletContext/PortletContext/Porta lContext arguments * added all of MockPortletRequest's overloaded constructors to MockActionRequest and MockRenderRequest * turned AbstractSingleSpringContextTests's "contextKey" and "loadContext" metho ds non-final again * AbstractSingleSpringContextTests provides empty default implementation of "get ConfigLocations" (not abstract anymore) Package org.springframework.orm * reworked Hibernate session synchronization to properly work with WebSphereExte ndedJTATransactionLookup on WAS 6.0/6.1 * fixed Hibernate3 LocalSessionFactoryBean's "schemaUpdate" behavior to not run into an IllegalStateException * LocalContainerEntityManagerFactoryBean detects jar file URL in WebLogic jar en try URLs correctly * PersistenceAnnotationBeanPostProcessor always injects transactional EntityMana ger with extended interfaces (if any) * included OpenJPA support classes (OpenJpaDialect, OpenJpaVendorAdapter), teste d against OpenJPA 0.9.6 Package org.springframework.scheduling * TimerFactoryBean uses its bean name as Timer thread name (on JDK 1.5, falling back to a default Timer on JDK 1.3/1.4) * deprecated TimerFactoryBean's "createTimer(daemon)" method in favor of "create Timer(name, daemon)" * ScheduledExecutorFactoryBean does not insist on statically specified Scheduled ExecutorTasks anymore * DelegatingWork/Job/TimerTask exposes the wrapped Runnable implementation throu gh a "getDelegate()" method * Concurrent/ThreadPoolTaskExecutor and WorkManagerTaskExecutor throw Spring's T askRejectedException (when appropriate) * CommonJ TimerManagerFactoryBean cancels all statically registered Timers on sh utdown * updated LocalTaskExecutorThreadPool to be compatible with Quartz 1.6 Package org.springframework.test * AbstractTransactionalSpringContextTests invokes "onTearDownAfterTransaction" e ven for a manually completed transaction * fixed AbstractJpaTests to not keep context reference in cache if context refre sh failed Package org.springframework.transaction * AbstractPlatformTransactionManager exposes current transaction isolation level via TransactionSynchronizationManager * AbstractPlatformTransactionManager properly resumes all synchronizations even after suspend or inner begin failure * active transaction synchronization gets suspended when going from SUPPORTS/NOT _SUPPORTED into REQUIRED/REQUIRES_NEW * JtaTransactionManager's "doRegisterAfterCompletionWithJtaTransaction" avoids N PE if no current JTA transaction active * TransactionAttributeEditor does not accept transaction attributes with invalid whitespace anymore * fixed AnnotationTransactionAspect to not throw a NoTransactionException in cas e of transaction begin failure * AnnotationTransactionAspect supports protected and private methods that carry Spring's @Transactional annotation Package org.springframework.ui * deprecated FreeMarkerConfigurationFactory's "templateLoaders" property in favo r of "pre/postTemplateLoaders" Package org.springframework.util * "ObjectUtils.toObjectArray(Object)" returns a given Object[] as-is instead of throwing an IllegalArgumentException * added "containsWhitespace" method to StringUtils Package org.springframework.web * ExpressionEvaluationUtils catches any linkage error for the JSP 2.0 API, alway s falling back to the Jakarta JSTL * WebDataBinder explicitly suppresses field marker prefix values in case of "ign oreUnknownFields" switched off * Servlet/PortletRequestAttributes allow for accessing the session even after th e request has been completed * RequestContextHolder supports standard ThreadLocal as well as InheritableThrea dLocal * DispatcherServlet/Portlet do not expose LocaleContext/RequestAttributes as inh eritable for child threads anymore * added "threadContextInheritable" property to DispatcherServlet and DispatcherP ortlet, for explicit choice * factored out protected "buildLocaleContext" and "cleanupMultipart" methods in DispatcherServlet * made AbstractHandlerMapping's "getDefaultHandler()" method public * added public "getHandlerMap()" method to AbstractUrlHandlerMapping, exposing a read-only map of registered handlers * added public "getUrlMap()" method to SimpleUrlHandlerMapping, to allow for add ing or overriding individual entries * added overloaded "suppressValidation" version with command object argument to BaseCommandController * added overloaded "isFormChangeRequest" version with command object argument to SimpleFormController * "spring:message" tag detects single expression argument that resolves to an ar ray and processes it as arguments array * "form:errors" tag can now be used in a nested JSP outside the scope of a "form :form" tag * FreeMarkerView exposes all standard FreeMarker hash models now (including sess ion and request parameters) * FreeMarkerView uses the ObjectWrapper as specified in the FreeMarker configura tion, rather than always the default * FreeMarkerConfigurer always registers ClassTemplateLoader for its own package (rather than the package of a subclass) * AbstractJasperReportsSingleFormatView only sets parameter Map on JRExporter in stance in case of actual parameters * added "boolean useWriter()" method to AbstractXsltView, allowing to prefer Wri ter access over OutputStream access * DispatcherPortlet exposes thread-bound request attributes for render requests as well (not just action requests) * DispatcherPortlet restores LocaleContextHolder/RequestContextHolder state (e.g . from surrounding DispatcherServlet)
Changes in version 2.0 final (3.10.2006)
---------------------------------------- Package org.springframework.aop * dropped InvocationContextExposingAdvisorAutoProxyCreator base class Package org.springframework.beans * default property editors for primitive wrapper types (Boolean, Integer, etc) t urn empty Strings into null values now * ConstructorArgumentValues supports configuration source objects per argument ( e.g. keep track of original XML element) * ConfigurableBeanFactory's "setParentBeanFactory" throws IllegalStateException if already associated with a parent * added "getRegisteredScopeNames" and "getRegisteredScope" accessors to Configur ableBeanFactory interface * added "getConversationId" method to Scope interface (exposing session id for s ession scope, null for request scope) * introduced BeanMetadataElement interface, giving access to config source objec t (implemented by BeanDefinition etc) * introduced BeanReference interface, implemented by RuntimeBeanReference as wel l as RuntimeBeanNameReference * dropped BeanReferenceFactoryBean; use the available alias mechanisms instead * reworked CustomScopeConfigurer to only support Scope instances as values for t he "scopes" map * DefaultSingletonBeanRegistry keeps singleton beans in registration order (requ ires JDK 1.4 or Commons Collections) * AbstractBeanFactory does not explicitly register a given alias that is equal t o the canonical bean name * dropped BeanDefinitionRegistryBuilder in favor of refined BeanDefinitionReader Utils convenience methods * added "getInnerBeanDefinitions()" accessor to ComponentDefinition interface, e xposing all relevant inner beans * added Resource argument to SourceExtractor interface, exposing the defining re source for the given source candidate * reworked type matching for FactoryBeans, avoiding repeated recreation/destruct ion through early "getObjectType" checks * "lookup-method" overrides no-arg method only, to let overloaded variants be im plemented in a traditional fashion * added "setAllowRawInjectionDespiteWrapping" config method to DefaultListableBe anFactory, to enable Spring 1.2 behavior * added overloaded AbstractSingleBeanDefinitionParser's "doParse" template metho d with a ParserContext argument * moved ComponentDefinition, ReaderContext and support classes from "beans.facto ry.support" to "beans.factory.parsing" * reworked ReaderEventListener to take AliasDefinition/ImportDefinition argument for alias/import callback, respectively * revised BeanDefinitionParsingException to take a single Problem argument Package org.springframework.cache * EhCacheFactoryBean uses EHCache 1.2's extended Cache constructor to avoid EHCa che warning (requires EHCache 1.2 now) Package org.springframework.core * AbstractLabeledEnum uses label as "toString()" representation, analogous to JD K 1.5 enums * StaticLabeledEnum and AbstractGenericLabeledEnum use the code as default label Package org.springframework.jdbc * JdbcTemplate uses "PreparedStatement.setObject(index, null)" for null values w ith unknown SQL type on Informix * turned visibility of "org.springframework.jdbc.core.StatementCreatorUtils" to public (again) Package org.springframework.jms * factored out protected "prepareSharedConnection" template method in AbstractMe ssageListenerContainer * AbstractMessageListenerContainer's "durableSubscriptionName" property defaults to the message listener class name * added "subscriptionDurable" flag to AbstractMessageListenerContainer (set this to "true" to for actual durability!) * added "defaultResponseQueueName" and "defaultResponseTopicName" properties to MessageListenerAdapter * added JMS invoker strategy for service-based remoting via JMS: JmsInvokerServi ceExporter, JmsInvokerProxyFactoryBean Package org.springframework.jmx * MBeanExporter's MBean autodetection properly registers multiple beans even if their instances as equal * MBeanExporter's "registerManagedResource" registers a given MBean as-is (only wrapping a plain object as ModelMBean) Package org.springframework.mock * AbstractSingleSpringContextTest's "loadContextLocations()" declares Exception, to allow subclasses to throw exceptions * added MockMultipartFile, MockMultipartHttpServletRequest and MockMultipartActi onRequest for testing multipart access Package org.springframework.orm * added overloaded query/insert/update/delete operations without parameter objec t to SqlMapClientOperations/Template * refined Hibernate3 support to detect Hibernate 3.2's FlushMode.MANUAL as well, while remaining compatible with 3.0/3.1 * factored out AbstractSessionFactoryBean base class from Hibernate3 LocalSessio nFactoryBean * Hibernate3 LocalSessionFactoryBean registers filter definitions before loading any mapping files * ScopedBeanInterceptor for Hibernate3 exposes target class name as Hibernate en tity name in case of a CGLIB proxy * changed the semantics of AbstractJpaVendorAdapter's "generateDdl" flag to crea te/update (instead of drop-and-recreate) Package org.springframework.transaction * clarified @Transactional semantics for JDK/CGLIB proxies as well as for Aspect J * AbstractPlatformTransactionManager properly propagates an "afterCommit" synchr onization exception to the caller * JtaTransactionManager executes "afterCommit" callbacks even when synchronizing with an existing JTA transaction * factored out TransactionSynchronizationUtils and JtaAfterCompletionSynchroniza tion helper classes * introduced CallbackPreferringPlatformTransactionManager interface, to be imple mented by callback-loving PTM impls * TransactionTemplate/TransactionInterceptor automatically detect and use Callba ckPreferringPlatformTransactionManager * fixed MethodMapTransactionAttributeSource to avoid unnecessary reinitializatio n of method map Package org.springframework.util * ClassUtils falls back to the system class loader if the thread context class l oader is inaccessible * all class loading is done via "ClassLoader.loadClass(name)" rather than "Class .forName(name, true, ClassLoader)" Package org.springframework.validation * DataBinder matches all field names using their canonical name (for required, a llowed and disallowed checks) Package org.springframework.web * clarified MultipartFile constract details * InternalResourceView correctly exports forward attributes on Servlet 2.3- (and preserves existing attributes on 2.4+) * OptionTag and ErrorsTag implement BodyTag interface directly to work around a bug in WebLogic Server 8.1's JSP engine * added "renderPhaseOnly" flag to Portlet WebRequestHandlerInterceptorAdapter, a llowing to intercept action phase too * added "applyWebRequestInterceptorsToRenderPhaseOnly" flag to Portlet AbstractH andlerMapping * factored out AbstractMapBasedHandlerMapping base class from Parameter/PortletM ode/PortletModeParameterHandlerMapping * renamed PortletModeParameterHandlerMapping's "allowDupParameters" property to "allowDuplicateParameters" Changes in version 2.0 RC4 (17.9.2006) -------------------------------------- General * renamed Spring 2.0 DTD to spring-beans-2.0.dtd, while keeping the Spring 1.2.x DTD as compatible spring-beans.dtd * renamed Spring 2.0 XSDs to spring-beans-2.0.xsd etc, to allow for proper versi oning of future additions and changes * spring-beans-2.0.dtd/xsd does not support singleton="true"/"false" anymore. Us e scope="singleton/"prototype" instead! * added "spring-agent.jar" to "dist/weavers" directory, containing the agent for Spring's InstrumentationLoadTimeWeaver * JPA support is fully tested against Oracle TopLink Essentials v2 b16 as well a s Hibernate EntityManager 3.2.0 CR4 * removed ORM support for Apache OJB from the Spring core distribution. OJB supp ort has been moved to Spring Modules. * declared all internal ThreadLocal variables as final (to avoid potential class reloading issues) Package org.springframework.aop * replaced all use of AOP Alliance AspectException with AopInvocationException/A opConfigException/IllegalStateException * Cglib2AopProxy exposes additional interfaces of a CGLIB-enhanced target bean o n a CGLIB AOP proxy as well * fixed PointcutAdvisor support classes to avoid eager access to Advice and Poin tcut from "hashCode()"/"toString()" * added "getTargetObject" method to ScopedObject interface, allowing for access to the raw object in the target scope * fixed AnnotationAwareAspectJAutoProxyCreator to lazily retrieve aspect singlet ons (only once a pointcut matches) * fixed @Configurable support to correctly identify the class name even for a CG LIB proxy Package org.springframework.beans * fixed BeanWrapperImpl to return a Collection/Map as-is if it is not accessible (e.g. because it is a scoped proxy) * fixed BeanWrapperImpl to always use a valid read-write type for a converted co llection/map (never use original class) * fixed BeanWrapperImpl to properly resolve even nested generic Collections and Maps (List of Map, Map of List, etc) * renamed PropertyAccessExceptionsException to PropertyBatchUpdateException and explicitly declared when it is thrown * added "destroyBean" method to ConfigurableBeanFactory interface, for destroyin g a given instance based on a bean def * added support for destruction callbacks to Scope abstraction, driven by a Bean Factory's definition for a scoped bean * PropertyResourceConfigurer, CustomEditorConfigurer and CustomScopeConfigurer u se highest Ordered precendence now * fixed FieldRetrievingFactoryBean to return "false" from "isSingleton()", since it reobtains the field value every time * FieldRetrievingFactoryBean and PropertyPathFactoryBean trim whitespace in all given names (even within the String) * fixed AbstractBeanFactory to accept re-registration of alias for same bean nam e (-> bean definition overriding) * reworked AbstractBeanFactory's alias handling to support local alias definitio ns for a bean in the parent BeanFactory * AbstractAutowireCapableBeanFactory only logs name and class of eagerly cached bean (does not trigger toString anymore) * AbstractAutowireCapableBeanFactory catches any exception from BeanPostProcesso r and wraps it in BeanCreationException * DefaultListableBeanFactory's "preInstantiateSingletons" only fetches the Facto ryBean instance (instead of its object) * reworked DefaultListableBeanFactory's beans-by-type lookup to ignore beans tha t have been overridden by an alias * inner bean definitions inherit the singleton status of their containing bean e ven if generated by namespace handler * fixed method overrides check to accept methods declared on interfaces as well * removed deprecated BeanFactoryBootstrap class Package org.springframework.cache * EhCacheManagerFactoryBean creates an independent CacheManager instance by defa ult now (requires EHCache 1.2) * added "shared" flag to EhCacheManagerFactoryBean, allowing to explicitly ask f or a shared CacheManager instance * refined EhCacheManagerFactoryBean to use pass in an InputStream instead of a U RL for CacheManager initialization Package org.springframework.context * exposed AbstractApplicationContext's "registerShutdownHook()" method in Config urableApplicationContext interface * reverted AbstractApplicationContext to not inherit ClassLoader from parent con text by default (as up until 2.0 RC1) * added appropriate "equals"/"hashCode" implementations to DefaultMessageSourceR esolvable Package org.springframework.core * fixed SpringVersion to return null if the package is not determinable because of ClassLoader restrictions * ResourceArrayPropertyEditor always preserves order of resource entries, even o n JDK 1.3 without Commons Collections * PathMatchingResourcePatternResolver ignores classpath roots that cannot be res olved as jar or in file system Package org.springframework.ejb * introduced EjbAccessException as replacement of AOP Alliance AspectException i n local/remote SLSB invoker interceptors Package org.springframework.instrument * removed unused AbstractLoadTimeWeaver and AspectJWeavingTransformer classes * reworked ReflectiveLoadTimeWeaver to cache Method references and consider "get ThrowawayClassLoader" as optional * fixed AbstractOverridingClassLoader to override "loadClass(name, resolve)" and correctly synchronize its variables * fixed and reworked AbstractOverridingClassLoader's facility for excluding clas s names * added OC4JLoadTimeWeaver for Oracle OC4J 10.1.3.1+ Package org.springframework.jca * SingleConnectionFactory's Connection proxy implements "equals" and "hashCode" based on proxy equality * factored out "resetConnection", "prepareConnection" and "closeConnection" meth ods in SingleConnectionFactory Package org.springframework.jdbc * refined DataSourceUtils to catch Throwable on "Connection.close()" * DataSourceUtils uses lower synchronization order for delegating handles (such as from TransactionAwareDataSourceProxy) * SingleConnectionDataSource's Connection proxy implements "equals" and "hashCod e" based on proxy equality * factored out "resetConnection", "prepareConnection" and "closeConnection" meth ods in SingleConnectionDataSource * CommonsDbcpNativeJdbcExtractor supports original Commons DBCP as well as Tomca t 5.5's relocated version * revised JBossNativeJdbcExtractor to unwrap ResultSet even for WrappedResultSet subclasses (requires JBoss 3.2.4+ now) * DataSourceLookup throws DataSourceLookupFailureException instead of DataAccess ResourceFailureException * added SingleDataSourceLookup, exposing a single given DataSource for any data source name * added AbstractInterruptibleBatchPreparedStatementSetter base class, with singl e "setValuesIfAvailable" callback method * added default SQL error codes for the Apache Derby database Package org.springframework.jms * SingleConnectionFactory's Connection proxy implements "equals" and "hashCode" based on proxy equality * SingleConnectionFactory's Connection proxy ignores "stop()" calls as well (not just "close()" calls) * factored out "resetConnection", "prepareConnection" and "closeConnection" meth ods in SingleConnectionFactory * added "exceptionListener" and "reconnectOnException" properties to SingleConne ctionFactory * JmsTemplate and AbstractMessageListenerContainer call "stop()" on a Connection before closing it (if started before) * DefaultMessageListenerContainer does not block on startup until it can establi sh a shared Connection (if necessary) * added support for synchronized local JMS transactions (alongside some other ma in transaction) to JmsTemplate * added TransactionAwareConnectionFactoryProxy, including support for synchroniz ed local JMS transactions Package org.springframework.orm * iBATIS support works correctly with "useTransactionAwareDataSource" and JTA tr ansaction resume with subsequent access * reintroduced default SQLExceptionTranslator in JdoAccessor/JdoTransactionManag er/LocalPersistenceManagerFactoryBean * HibernateTemplate exposes Session proxies that implement the SessionImplemento r interface as well now (if possible) * exception translation for Hibernate3 turns PropertyValueException into Spring' s DataIntegrityViolationException * exception translation for Hibernate3 keeps original JDBCException as root caus e of Spring's HibernateJdbcException * added ScopedBeanInterceptor for Hibernate3, exposing the raw target class as e ntity name in case of a scoped proxy * LocalPersistenceManagerFactoryBean and JdoTemplate perform full exception tran slation even for reflective calls * expose underlying PersistenceProvider instance in EntityManagerFactoryInfo (if available) * added "persistenceProvider" property to AbstractEntityManagerFactoryBean, for using a shared PersistenceProvider * JpaVendorAdapter exposes a shared PersistenceProvider instance rather than jus t the PersistenceProvider class * added PersistenceUnitManager interface and DefaultPersistenceUnitManager imple mentation (in "jpa.persistenceunit") * added "persistenceUnitManager" bean property to LocalContainerEntityManagerFac toryBean (default is internal manager) * "dataSourceLookup"/"dataSources" configuration is now available on DefaultPers istenceUnitManager instead of LCEMFB * "postProcessPersistenceUnitInfo" hook method is now available on DefaultPersis tenceUnitManager instead of LCEMFB * introduced PersistenceUnitPostProcessor interface, to be registered on Default PersistenceUnitManager or LCEMFB * introduced MutablePersistenceUnitInfo base class, to turn SpringPersistenceUni tInfo to package-protected again * PersistenceUnitReader searches for "classpath*:**/SCHEMA_NAME" last, and catch es and logs any IOException thrown * added support for custom JPA properties to SharedEntityManagerBean/JpaTransact ionManager/JpaInterceptor/JpaTemplate * added support for custom JPA properties to OpenEntityManagerInViewInterceptor * PersistenceAnnotationBeanPostProcessor supports @PersistenceContext's "propert ies", passed into "createEntityManager" * PersistenceAnnotationBeanPostProcessor does not cache EntityManagerFactory ins tances anymore, to allow for new EMFs * PersistenceAnnotationBeanPostProcessor throws IllegalStateException instead of NoSuchBeanDefinitionException Package org.springframework.mock * added support for attributes which implement the Servlet 2.3 HttpSessionBindin gListener interface to MockHttpSession Package org.springframework.remoting * added service URL check to UrlBasedRemoteAccessor, in the form of an Initializ ingBean implementation * refined cache synchronization in (Jndi)RmiClientInterceptor and JaxRpcPortClie ntInterceptor * reworked RmiClientInterceptor to throw RemoteLookupFailureException instead of MalformedURLException/RemoteException * reworked Hessian/BurlapClientInterceptor to throw RemoteLookupFailureException instead of MalformedURLException * Hessian/BurlapClientInterceptor configure a Hessian/BurlapProxyFactory directl y (dropped CauchoRemoteAccessor) * added "serializerFactory" and "sendCollectionType" properties to HessianClient Interceptor/ProxyFactoryBean * added "serializerFactory" property to HessianServiceExporter, applied to Hessi anInput/Output objects * HessianServiceExporter is compatible with the Hessian 2 protocol (Hessian vers ion 3.0.20+) as well as classic Hessian Package org.springframework.scheduling * Spring's Quartz support requires Quartz 1.5 or higher now * added support for Quartz 1.5 JobFactory to SchedulerFactoryBean, through "jobF actory" bean property * SchedulerFactoryBean uses AdaptableJobFactory as default, which also supports Runnables as job class * added SpringBeanJobFactory as subclass of AdaptableJobFactory, as JobFactory r eplacement for QuartzJobBean * JobDetailBean allows any job class to be specified, to allow a JobFactory to a dapt any class to the Job interface * added "jobDataAsMap" property to Simple/CronTriggerBean, supporting the Quartz 1.5 notion of trigger-specific job data * MethodInvokingJobDetailFactoryBean always creates durable JobDetails (just lik e it also sets the volatile flag) Package org.springframework.scripting * fixed BshScriptFactory to correctly handle void, null, and primitive return va lues * fixed JRubyScriptFactory to handle "toString()" invocations locally on the JRu by object proxy Package org.springframework.test * AbstractSpringContextTests calls ConfigurableApplicationContext's "registerShu tdownHook()" for each context instance * factored out concrete loading of a single context from specified config locati ons to AbstractSingleSpringContextTests * restricted visibilities and stronger use of final in AbstractDependencyInjecti onSpringContextTests Package org.springframework.transaction * added "afterCommit" callback to TransactionSynchronization interface * fixed TransactionAttributeSourceAdvisor to avoid potential NPE in TransactionA ttributeSourcePointcut's "hashCode" Package org.springframework.validation * added "getPropertyEditorRegistry" method to BindingResult interface, for re-re gistering custom editors * AbstractBindingResult's "addAllErrors" only accepts Errors instance with same object name * added appropriate "toString" implementation to AbstractBindingResult * added appropriate "equals"/"hashCode" implementations to AbstractBindingResult and BindException * added appropriate "equals"/"hashCode" implementations to ObjectError and Field Error Package org.springframework.web * ExpressionEvaluationUtils falls back to Jakarta JSTL if JSP 2.0 ExpressionEval uator API present but not implemented * added support for attribute destruction callbacks to RequestAttributes abstrac tion + Servlet/PortletRequestAttributes * introduced "requestCompleted()" method in AbstractRequestAttributes base class for Servlet/PortletRequestAttributes * adapted TagUtils to accept subclassed parent tag as expected ancestor too (e.g . OptionTag within subclassed SelectTag) * AbstractJasperReportsView converts exporter parameter values "true"/"false" to Boolean.TRUE/FALSE * removed deprecated FormatHelper from XSLT view package * fixed various JSP form tag issues
Changes in version 2.0 RC3 (10.8.2006)
-------------------------------------- General * spring.jar does not include Portlet support anymore (add spring-portlet.jar to your classpath if needed) Package org.springframework.aop * factored out AbstractGenericPointcutAdvisor (with a configurable Advice) as su bclass of AbstractPointcutAdvisor * fixed AbstractAdvisorAutoProxyCreator to ignore Advisors for which "getBean" t hrows a BeanCurrentlyInCreationException * fixed AnnotationAwareAspectJAutoProxyCreator to explicitly ignore FactoryBeans when looking for aspect beans * reworked AspectJ auto-proxy creation to avoid the creation of unnecessary prox ies * renamed ScopedObject's "remove" method to "removeFromScope", to avoid conflict s with methods on the target class Package org.springframework.beans * added overloaded "setPropertyValues" variant with additional "ignoreInvalidFie lds" flag to PropertyAccessor * fixed BeanWrapperImpl to properly catch and wrap conversion failures for map k eys/values in TypeMismatchExceptions * introduced TypeConverter interface, implemented by BeanWrapperImpl, plus separ ate SimpleTypeConverter implementation * refined PropertyAccessExceptionsException to show nested details even when wra pped in a standard JDK exception * reworked ArgumentConvertingMethodInvoker to use a TypeConverter and allow the converter to be accessed/overridden * BeanFactoryUtils returns bean names in order of definition even for merged nam e arrays (in case of ancestor factories) * redefined BeanFactoryUtils' "countBeans/beanNamesIncludingAncestors" to build on "getBeanNamesOfType(Object.class)" * reworked InstantiationAwareBeanPostProcessor's "postProcessPropertyValues" met hod to take a PropertyDescriptor array * RequiredAnnotationBeanPostProcessor explicitly ignores special setter methods (such as "setBeanName"/"setBeanFactory") * added "copyConfigurationFrom" method to ConfigurableBeanFactory, allowing to c reate a factory with same configuration * exposed "getScope" and "setScope" methods on BeanDefinition interface, allowin g a post-processor to override the scope * DefaultSingletonBeanRegistry disallows the creation (or recreation) of singlet ons during "destroySingletons()" phase * fixed AbstractBeanFactory to only invoke BeanPostProcessor for objects returne d from FactoryBeans if non-null * fixed AbstractBeanFactory to throw BeanCurrentlyInCreationException on null fr om non-fully-initialized FactoryBean * AbstractBeanFactory's "getType" catches BeanCreationExceptions for a FactoryBe an, treating it as "type unknown" * AbstractBeanFactory catches an exception thrown from a FactoryBean's "getObjec tType", treating it as "type unknown" * AbstractAutowireCapableBeanFactory detects whether it injected raw instances o f beans that eventually got wrapped * refined AbstractAutowireCapableBeanFactory to only adapt inner bean names for uniqueness in case of a singleton * refined AbstractAutowireCapableBeanFactory to reject an inner bean marked as s ingleton contained in a non-singleton * DefaultListableBeanFactory's non-eager lookup by type finds matches for lazy-i nit beans as long as class is loadable * added "setAllowEagerClassLoading" method to DefaultListableBeanFactory, to all ow for turning off eager class loading * restored Spring 1.2 compatibility for default-lazy-init="true", with respect t o detection of special beans by type * "idref" tag in XML bean definitions gets turned into a RuntimeBeanNameReferenc e, which gets validated on bean creation * XML definitions for inner beans receive a default scope based on their contain ing bean (prototype for a non-singleton) * DefaultBeanDefinitionDocumentReader does not accept bean definitions with both "scope" and "singleton" values anymore Package org.springframework.context * added "isActive()" method to the ConfigurableApplicationContext interface * AbstractRefreshableApplicationContext disallows access to underlying BeanFacto ry after a "close()" call * avoid AbstractRefreshableApplicationContext deadlock in case of BeanFactory ac cess in a multi-threaded destroy method Package org.springframework.core * fixed PathMatchingResourcePatternResolver to prevent eternal recursion in case of invalid prefix with pattern symbols Package org.springframework.dao * factored out reusable PersistenceExceptionTranslationInterceptor from Persiste nceExceptionTranslationAdvisor Package org.springframework.jdbc * worked around "oracle.sql.DATE" problem on certain Oracle driver versions, ext racting it as timestamp when appropriate * check for ResultSetSupportingSqlParameter superclass instead of SqlOutParamete r and SqlReturnResultSet subclasses * factored out Spring/JtaLobCreatorSynchronization classes from Hibernate Abstra ctLobType to "jdbc.support.lob" package Package org.springframework.jms * introduced CachingDestinationResolver interface, implemented by JndiDestinatio nResolver (allowing to clear the cache) * JmsTransactionManager starts the transactional Session's Connection early (at transaction begin) rather than on demand * optimized JmsTemplate's resource handling to reuse the obtained JMS Connection /Session within a JTA transaction * added "clientId" property to SingleConnectionFactory(102), for assigning a cli ent id to the underlying Connection * added "clientId" property to AbstractMessageListenerContainer, for assigning a client id to the underlying Connection * AbstractMessageListenerContainer supports individual Connections per listener as alternative to a shared Connection * DefaultMessageListenerContainer obtains all JMS resources fresh by default in case of "transactionManager" specified * added "cacheLevel"/"cacheLevelName" property to DefaultMessageListenerContaine r, for overriding the default caching * DefaultMessageListenerContainer is able to recover from a broken Connection (b oth with and without cached Connection) * DefaultMessageListenerContainer is able to recover from a broken Destination i f obtained via JndiDestinationResolver * DefaultMessageListenerContainer waits until all listener tasks have completed before returning from "destroy" * added "taskExecutor" property to SimpleMessageListenerContainer, allowing to e xecute listener in different thread * added protected "buildListenerArguments" template method to MessageListenerAda pter, allowing for multiple arguments Package org.springframework.orm * refined iBATIS SqlMapClientTemplate to allow for nested calls to same SqlMapSe ssion (checking "getCurrentConnection") * reworked Hibernate JTA synch to expose beforeCompletion exceptions to the call er (via SpringJtaSynchronizationAdapter) * updated TopLink API jar to be fully compatible with the official TopLink 10.1. 3 release jar (can be replaced with it) * Hibernate3 and TopLink LocalSessionFactoryBeans implement the PersistenceExcep tionTranslator interface now * reworked Hibernate3 and TopLink exception translation to only apply a SQLExcep tionTranslator if explicitly specified * JDO LocalPersistenceManagerFactoryBean implements the PersistenceExceptionTran slator interface now * DefaultJdoDialect only applies a SQLExceptionTranslator if explicitly specifie d (rely on default JDO translation else) * removed warning for read-only from JdoTransactionManager/JpaTransactionManager , since a vendor dialect may support it * factored out overridable "createEntityManager" template methods in OpenEntityM anagerInViewFilter/Interceptor * EntityManagerFactoryInfo interface does not extend PersistenceExceptionTransla tor anymore (only JpaDialect does) * SpringPersistenceUnitInfo is public to allow for post-processing in LocalConta inerEntityManagerFactoryBean subclass * added "determinePersistenceUnitInfo/postProcessPersistenceUnitInfo" methods to LocalContainerEntityManagerFactoryBean * reworked OpenSession/PersistenceManager/EntityManagerInViewInterceptor to buil d on WebRequestInterceptor abstraction * dropped PortletOpenSession/PersistenceManager/EntityManagerInViewInterceptor i n favor of WebRequestInterceptor model Package org.springframework.mock * MockHttpServletRequest handles HTTP header names as case-insensitive Package org.springframework.remoting * added "registryClientSocketFactory" bean property to RmiClientInterceptor/RmiP roxyFactoryBean * added dedicated "prepare()" method to JndiRmiServiceExporter Package org.springframework.scheduling * renamed SchedulingTaskExecutor's "isShortLivedPreferred" method to "prefersSho rtLivedTasks" Package org.springframework.scripting * ScriptFactoryPostProcessor supports all callbacks that containing BeanFactory supports (e.g. ApplicationContextAware) Package org.springframework.test * AbstractTransactionalSpringContextTests only tries to end transaction on "tear Down" if the transaction is still active Package org.springframework.transaction * fixed AbstractPlatformTransactionManager to not invoke commit synchronization in case of propagated rollback-only flag * added SpringJtaSynchronizationAdapter, exposing JTA Synchronization ifc on top of a Spring TransactionSynchronization * added "timeout" attribute to Transactional annotation, allowing to specify a t imeout in seconds within the annotation Package org.springframework.util * optimized "ObjectUtils.nullSafeToString" implementation to return a given Stri ng right away Package org.springframework.validation * added "ignoreInvalidFields" flag to DataBinder, allowing to ignore inaccessibl e fields (null value in nested path) Package org.springframework.web * redefined Servlet/PortletRequestUtils to treat empty parameter values as valid for Strings ("") and booleans (false) * moved RequestScope/SessionScope and RequestContextListener from "web.context.s cope" to "web.context.request" * added WebRequest abstraction, with ServletWebRequest and PortletWebRequest imp lementations * added WebRequestInterceptor interface, for generic request interceptors (indep endent of Servlet/Portlet) * added support for WebRequestInterceptors to Servlet/Portlet MVC HandlerMapping s (through "interceptors" property) * renamed PortletBean to GenericPortletBean * HttpServletBean/GenericPortletBean override "getXXXXletName"/"getXXXXletContex t" to return null when no config set yet * added "defaultLocale" property to CookieLocaleResolver and SessionLocaleResolv er, for fallback to an explicit locale
Changes in version 2.0 RC2 (6.7.2006)
------------------------------------- General * added showcases to "samples" directory * various documentation clarifications * restored compatibility with IBM JDK 1.3 (with respect to referring to constant s defined in implemented interfaces) Package org.springframework.aop * JdkDynamicAopProxy delegates "equals"/"hashCode" calls to target if "equals"/" hashCode" is defined on proxy interface * Advisors used in combination with an advisor auto-proxy creator can now use be ans which get adviced themselves * moved AbstractAutoProxyCreator's "shouldSkip" check from "isInfrastructureClas s" to "postProcessAfterInitialization" * reworked AbstractAdvisorAutoProxyCreator to avoid fetching of all candidate Ad visors on startup * AbstractAdvisorAutoProxyCreator performs BeanFactory-based prototype cycle che ck instead of control flow check Package org.springframework.beans * factored out SingletonBeanRegistry interface from ConfigurableBeanFactory inte rface * factored out DefaultSingletonBeanRegistry base class from AbstractBeanFactory * added "isCurrentlyInCreation" method to ConfigurableBeanFactory interface * reworked AbstractBeanFactory to allow for prototype cycle check for current th read * fixed AbstractBeanFactory's "isBeanNameUsed" to correctly synchronize access t o "dependentBeanMap" * AbstractAutowireCapableBeanFactory creates "depends-on" beans even before reso lving a bean's class * AbstractAutowireCapableBeanFactory does not apply bean post-processors to "syn thetic" beans * AbstractAutowireCapableBeanFactory accepts null values returned from BeanPostP rocessors * added "synthetic" flag to AbstractBeanDefinition, for marking beans as interna l infrastructure beans * XmlBeanDefinitionReader uses given ResourceLoader/ApplicationContext's ClassLo ader for schema resolution * MethodInvokingFactoryBean returns "void.class" instead of "VoidType.class" for void methods Package org.springframework.context * AbstractApplicationContext uses the ClassLoader of its parent ApplicationConte xt (if any) as default * turned ApplicationObjectSupport's "getApplicationContext()" method from public to protected (for consistency) Package org.springframework.core * NestedXxxException classes build nicer messages in case of root cause with no base exception message * added "getClassLoader()" method to ResourceLoader, exposing the ClassLoader fo r direct access * adapted PathMatchingResourcePatternResolver to always use the ResourceLoader's ClassLoader * added "getResourcePatternResolver(ResourceLoader)" utility method to ResourceP atternUtils Package org.springframework.jdbc * reworked JDBC 3.0 savepoint support to use self-generated savepoint names (to avoid unnamed savepoints on IBM DB2) * removed "S0" from default SQL state list in SQLStateSQLExceptionTranslator: it does not mean bad SQL on MS SQL Server * SqlQuery and SqlUpdate correctly handle a named parameter with a list of value s now Package org.springframework.jms * added support for durable subscriptions to message listener containers, driven by "durableSubscriptionName" property Package org.springframework.jmx * MBeanRegistrationSupport only logs a warning (no error) when an MBean does not exist anymore when trying to unregister Package org.springframework.orm * LocalContainerEntityManagerFactoryBean detects and reads all "META-INF/persist ence.xml" files on the class path * LocalContainerEntityManagerFactoryBean determines persistence unit root URL ba sed on each "persistence.xml" location * JdoTransactionManager uses JDO 2.0's rollback-only facility if available * JpaTransactionManager uses JPA's rollback-only facility now, for better integr ation with the persistence provider * JpaTransactionManager throws UnexpectedRollbackException in case of JPA Rollba ckException thrown from commit * refined JPA exception translation to throw EmptyResultDataAccessException in c ase of JPA NoResultException * refined JPA exception translation to throw IncorrectResultSizeDataAccessExcept ion in case of JPA NonUniqueResult * refined JPA exception translation to throw DataIntegrityViolationException in case of JPA EntityExistsException * refined JPA exception translation to throw InvalidDataAccessResourceUsageExcep tion in case of JPA TransactionRequired * refined Hib exception translation to throw InvalidDataAccessApiUsageException in case of Hibernate ObjectDeleted * refined Hib exception translation to throw IncorrectResultSizeDataAccessExcept ion in case of Hibernate NonUniqueResult Package org.springframework.remoting * JaxRpcPortClientInterceptor/JaxRpcPortProxyFactoryBean allow for direct "custo mPropertyMap[myKey]" access Package org.springframework.scheduling * Quartz SchedulerFactoryBean uses given "nonTransactionalDataSource" as default DataSource if no "dataSource" specified Package org.springframework.test * AbstractTransactionalSpringContextTests properly ends a started transaction ea rly if "onSetupInTransaction" fails Package org.springframework.transaction * JtaTransactionManager explicitly only calls "UserTransaction.setRollbackOnly() " if the transaction is still active Package org.springframework.validation * clarified that "Errors.reject" always registers a global error for the entire target object * "Errors.rejectValue" now accepts an empty field name to indicate the current o bject itself rather than a field of it Package org.springframework.web * added/moved constants for all Servlet spec include/forward request attributes to WebUtils * added "getWebApplicationContext"/"getAutowireMode"/"getDependencyCheck" method s to Autowiring(Tiles)RequestProcessor * DispatcherServlet logs its page-not-found warnings with the actual lookup URL even for import requests * InternalResourceView exposes all forward request attributes (delegating to "We bUtils.exposeForwardRequestAttributes") * RequestContext's "getContextPath()" always exposes the context path for the or iginating request now * added "getQueryString" method to RequestContext, exposing query string for ori ginating request (even after forward) * fixed various JSP form tag issues
Changes in version 2.0 RC1 (20.6.2006)
-------------------------------------- General * completed reference documentation * fixed various documentation issues * spring.jar includes all standard modules except for the Hibernate2 support (wh ich has been superseded by Hibernate3) * basic download only contains reference PDF: no HTML variant and API docs anymo re (only in -with-dependencies now!) Package org.springframework.aop * fixed AspectJAutoProxyCreator to avoid NPE in case of abstract beans without b ean class specified Package org.springframework.beans * FactoryBeans are allowed to return null values now, with FactoryBeanNotInitial izedException to be thrown by themselves * fixed AbstractBeanFactory's "getType" to avoid NPE in case of a bean definitio n without bean class * AbstractBeanFactory uses inverse order of bean instantiation for shutdown even without dependency relationships * fixed DefaultListableBeanFactory to not call "FactoryBean.getObject()" for pro totype if bean class not resolved yet * avoid ClassNotFoundException in case of explicit type specified on "value" tag * resolve target type of a TypedStringValue lazily, consistent with the handling of bean classes * moved parsing-related support classes from "beans.factory"/"beans.factory.supp ort" to "beans.factory.parsing" Package org.springframework.core * StaticLabeledEnum offers its "readResolve" method with protected visibility, t o kick in for subclasses as well Package org.springframework.ejb * fixed AbstractSlsbInvokerInterceptor to reobtain createMethod in case of cache Home="false"/lookupHomeOnStartup="true" Package org.springframework.jms * added "cacheSessions" flag to DefaultMessageListenerContainer, to be turned of f for reobtaining Sessions per receive * added "handleListenerSetupFailure" callback to DefaultMessageListenerContainer , a sibling of "handleListenerException" * DefaultMessageListenerContainer invokes a specified JMS ExceptionListener for listener setup failures as well Package org.springframework.orm * removed LocalSessionFactoryBean's early "buildMappings" call to avoid side eff ects with AnnotationSessionFactoryBean * HibernateTransactionManager explicitly disconnects a pre-bound Session after a transaction (on Hibernate 3.1+) * Hibernate Open-Session-In-View's deferred close mode always switches its Sessi ons to FlushMode.NEVER until closing * refined HibernateTemplate to never register a Session for deferred close in ca se of "alwaysUseNewSession"=true * removed special Session reconnection check for Hibernate 3.1 RC1 * renamed ContainerEntityManagerFactoryBean to "LocalContainerEntityManagerFacto ryBean" * fixed LocalContainerEntityManagerFactoryBean to always look for "META-INF/pers istence.xml" in class path by default * JpaTransactionManager autodetects the JDBC DataSource of the target EntityMana gerFactory Package org.springframework.samples * added JPA support to PetClinic: EntityManagerClinic and JpaTemplateClinic, wit h TopLink Essentials as default provider Package org.springframework.scheduling * added "jobListenerNames" bean property to MethodInvokingJobDetailFactoryBean Package org.springframework.scripting * fixed "spring-lang.xsd" to allow for multiple nested property elements Package org.springframework.web * fixed (the deprecated) BindUtils to not call "ValidatorUtils.invokeValidator" if no Validator given * fixed Servlet/PortletRequestAttributes to correctly update accessed attributes * turned WebContentGenerator's method constants public again, for calling "setSu pportedMethods" in subclasses * FrameworkPortlet now catches all RuntimeException/Errors and rethrows them as PortletException * PortletContentGenerator response preparation operates on RenderRequest and Ren derResponse only * changed Portlet HandlerInterceptor interface to have explicit callback methods for action/render requests * Portlet HandlerInterceptorAdapter allows to adapt the specific action/render c allback methods to general callbacks * Portlet OpenXxxInViewInterceptors just wrap the render request, not the action request anymore * VelocityView and FreeMarkerView do not override content type previously set on HTTP response anymore (on Servlet 2.4+) * moved content type handling from VelocityView and FreeMarkerView up to Abstrac tTemplateView * fixed various JSP form tag issues
Changes in version 2.0 M5 (1.6.2006)
------------------------------------ General * spring.jar is now all-encompassing, including all modules (with the exception of mock and aspects) * spring-aop.jar does not contain AOP Alliance interfaces (in contrast to spring .jar); explicitly add aopalliance.jar Package org.springframework.aop * reworked support for scoped proxies to build on scoping support in core BeanFa ctory * removed incomplete support for ScopedObject handles and persistent scopes * removed deprecated AttributesPooling/Prototype/ThreadLocalTargetSourceCreator * removed unused Class argument from ParameterNameDiscoverer's "getParameterName s(Method)" * reworked ProxyFactoryBean's "setProxyInterfaces" method from String array to C lass array * reworked ProxyFactoryBean to use the ClassLoader passed in through BeanClassLo aderAware * factored out AbstractSingletonProxyFactoryBean from TransactionProxyFactoryBea n Package org.springframework.beans * introduced lazy loading (and lazy validation) of bean classes in standard bean factories and bean definition readers * redefined ListableBeanFactory's "includeFactoryBeans" flag for "getBean(Name)s OfType" into "allowEagerInit" * introduced BeanClassLoaderAware interface, for passing the factory's class loa der to beans that resolve class names * reworked all FactoryBeans that resolve class names to leverage the BeanClassLo aderAware mechanism * PropertyPlaceholderConfigurer is able to resolve placeholders in lazily loaded bean class names * added support for PropertyEditorRegistrars to ConfigurableBeanFactory, for non -synchronized usage of custom editors * CustomEditorConfigurer supports PropertyEditorRegistrars, to be applied to its containing BeanFactory * reworked ConfigurableBeanFactoryUtils into ResourceEditorRegistrar * added "postProcessPropertyValues" callback method to InstantiationAwareBeanPos tProcessor interface * reworked RequiredBeanFactoryPostProcessor into RequiredAnnotationBeanPostProce ssor, properly handling bean inheritance * added scoping support to core BeanFactory, for creating raw target beans in ar bitrary scopes * added "scope" attribute at bean level to XML bean definition format, supersedi ng singleton="true"/"false" * renamed XmlBeanDefinitionReader's (Default)XmlBeanDefinitionParser SPI to (Def ault)BeanDefinitionDocumentReader * renamed XmlBeanDefinitionParserHelper to BeanDefinitionParserDelegate * re-introduced Spring 1.2 XmlBeanDefinitionParser SPI for backwards compatibili ty in case of "parserClass" specified Package org.springframework.context * synchronized AbstractApplicationContext's "refresh()" method, for hot refreshi ng in concurrent environments Package org.springframework.core * renamed GenericsHelper to GenericCollectionTypeResolver, more clearly reflecti ng its actual role * AnnotationUtils discovers annotations inherited via bridge methods now, throug h the new BridgeMethodResolver Package org.springframework.dao * added generic PersistenceExceptionTranslator mechanism, supported by the JpaDi alect abstraction for JPA providers * added PersistenceExceptionTranslationPostProcessor, for automatic translation to DataAccessExceptions Package org.springframework.instrument * introduced class instrumentation support based on standard ClassFileTransforme rs (used by JPA SPI support) * introduced LoadTimeWeaver abstraction for instrumentation-aware ClassLoaders p lus throwaway ClassLoader support Package org.springframework.jdbc * refined default SQL error codes for DB2 and HSQLDB * removed deprecated special check for DB2 error codes - always use "DB2*" as da tabase product name for DB2 * reworked SimpleJdbcDaoSupport/NamedParameterJdbcDaoSupport initialization to w ork without afterPropertiesSet as well Package org.springframework.orm * Hibernate3 LocalSessionFactoryBean explicitly calls "buildMappings()" to prepa re Configuration metadata for subclasses * fixed JpaTransactionManager to not cause an NPE when the creation of a transac tional EntityManager raises an exception * fixed JpaInterceptor to actually bind a new EntityManager to the thread again (worked in M3, didn't work in M4) * fixed EntityManagerFactoryUtils's "convertJpaAccessException" to always return rather than throw DataAccessExceptions * added full support for JPA SPI, in the form of a ContainerEntityManagerFactory Bean with LoadTimeWeaver support * added JpaVendorAdapter abstraction, with out-of-the-box TopLinkJpaVendorAdapte r and HibernateJpaVendorAdapter * added PersistenceAnnotationPostProcessor, processing EJB3-style @PersistenceUn it and @PersistenceContext annotations Package org.springframework.test * added support classes for annotation-based tests in general and for JPA-based tests in particular Package org.springframework.transaction * added "failEarlyOnGlobalRollbackOnly" flag to AbstractPlatformTransactionManag er, for consistent fail-early behavior Package org.springframework.util * "ClassUtils.isPresent" logs exception message only instead of full stacktrace for classes that haven't been found * introduced PatternMatchUtils, for unified matching of Spring's typical "xxx*", "*xxx" and "*xxx*" pattern styles Package org.springframework.validation * reworked ValidationUtils to not accept a null Validator for "invokeValidator" anymore * added "setDisallowedFields" method to DataBinder, for specifying disallowed fi elds instead of allowed fields Package org.springframework.web * reworked mvc RequestHandler interface into HttpRequestHandler in root web pack age, to minimize module dependencies * reworked RequestMethodNotSupportedException into HttpRequestMethodNotSupported Exception in root web package * reworked SessionRequiredException into HttpSessionRequiredException and Portle tSessionRequiredException * added HttpRequestHandlerServlet to "web.context.support" package, for exposing a single HttpRequestHandler bean * dropped "getCause()" method from NestedServletException, to avoid conflicts wi th JDK-1.4-based ServletException class * added support for request and session scopes to all WebApplicationContexts * moved StaticPortletApplicationContext from test tree over to main source tree * fixed SimpleMappingExceptionResolver to use local "exceptionMappings" referenc e * factored out reusable "prepareBinder" method in BaseCommandController, for eas ier overriding of "createBinder" * InternalResourceView exposes Servlet 2.4 forward request attributes even for S ervlet 2.3- * added "getOriginatingRequestUri" method to UrlPathHelper, detecting the Servle t 2.4 request URI attribute in a forward * refined JSP form tag library
Changes in version 2.0 M4 (23.4.2006)
------------------------------------- General * included "tiger" and "aspectj" source trees in source build (spring-src.zip) * included spring-src.zip in both release distributions as a convenience * basic distribution doesn't include build script and exploded source trees anym ore Package org.springframework.aop * fixed Cglib2AopProxy to register an explicitly given ClassLoader with the CGLI B Enhancer * deprecated Commons Attributes based TargetSourceCreators (PoolingAttribute, Pr ototypeAttribute, ThreadLocalAttribute) * fixed CustomizableTraceInterceptor to expose the actual invocation time for ex ception messages * added "trackAllInvocations" flag to JamonPerformanceMonitorInterceptor, for ga thering statistics without logging * auto-proxying works for objects created by FactoryBeans as well (rather than j ust on FactoryBean instances themselves) * BeanNameAutoProxyCreator always proxies exposed objects, with "&beanName" synt ax for proxying FactoryBean instances * renamed "aspectj.autoproxy.AspectJAutoProxyCreator" to "aspectj.annotation.Ann otationAwareAspectJAutoProxyCreator" Package org.springframework.beans * BeanUtils throws explicit BeanInstantiationException in case of bean instantia tion failure * deprecated BeanUtils's "isAssignable" methods in favor of new "isAssignable"/" isAssignableValue" methods on ClassUtils * fixed BeanWrapperImpl to convert a null input for an array type to a null valu e rather than an array with null element * fixed BeanWrapperImpl to apply property-specific editors to elements even for collections without generic type * refined BeanWrapperImpl to apply map key conversion on property access as well , not just on property setting * refined BeanWrapperImpl to inject original collections as far as possible (i.e . unless element conversion necessary) * refined BeanWrapperImpl to correctly detect element type of collections with p arameterization in superclass/interface * BeanWrapperImpl does not register a StringArrayPropertyEditor by default anymo re * fixed BeanWrapperImpl to convert a ManagedProperties instance into a plain Pro perties instance before applying it * fixed BeanWrapperImpl to fall back to approximate collection/map type if it ca nnot reinstantiate given collection/map * fixed BeanArrayPropertyEditor to translate null value to null byte array * added CharArrayPropertyEditor to translate String value into char array * CharacterEditor supports unicode specification passed in as literal String, fo r example "\u00F6" * refined FileEditor to treat absolute file paths as straight files (no Resource Loader), for Spring 1.2 compatibility * PropertyPlaceholderConfigurer catches and logs SecurityException on system pro perty access, continuing resolution * FieldRetrievingFactoryBean is able to access non-public fields as well * added "propertiesArray" bean property to PropertiesFactoryBean, for merging mu ltiple local Properties instances * fixed AbstractBeanFactory to avoid potential deadlock on singleton destruction with concurrent singleton creation * AbstractBeanFactory always registers inner beans with a unique name, adapting overlapping names accordingly * AbstractBeanFactory caches objects returned from "FactoryBean.getObject()" now , in case of a singleton object * BeanPostProcessor's "postProcessAfterInitialization" gets applied to objects c reated by FactoryBeans as well * BeanPostProcessor's "postProcessAfterInitialization" gets applied after "postP rocessBeforeInstantiation" as well * fixed DefaultListableBeanFactory to not preinstantiate bean definition if expl icit singleton object already registered * added "loadBeanDefinitions(String[] locations)" method to BeanDefinitionReader and AbstractBeanDefinitionReader * added Requiered annotation and RequiredBeanFactoryPostProcessor, allowing to e nforce required bean properties Package org.springframework.context * refined AbstractMessageSource to resolve arguments eagerly, for message define d in parent and msg arg defined in child * added (String[], Class) constructors to ClassPathXmlApplicationContext, allowi ng to load relative to a specified class Package org.springframework.core * refined NestedXxxException to be serialization-compatible with Spring 1.2 * refined NestedXxxException to properly handle null message in root cause, thro ugh using the cause's "toString()" * fixed FileSystemResource/UrlResource to retain leading "../" parts in paths, b uilding correct relative paths for them * ResourceEditor resolves placeholders in resource locations against system envi ronment variables as well Package org.springframework.dao * introduced PermissionDeniedDataAccessException, thrown for valid operation tha t was rejected due to lack of permission Package org.springframework.jdbc * added "permissionDeniedCodes" category to SQLErrorCodes, with default code 229 for MS SQL Server in sql-error-codes * JdbcTemplate's "queryForString"/"queryForInt"/etc methods correctly detect inc orrect result sizes even for null values * turned JdbcTemplate's "query(PreparedStatementCreator,PreparedStatementSetter, ResultSetExtractor rse)" method public * JdbcTemplate does not check static SQL for bind parameters anymore, to avoid o verhead of double parsing * improved JdbcTemplate's logging of ignored SQLWarnings, including SQL state an d error code in the log output * refined NativeJdbcExtractorAdapter to retry with DatabaseMetaData Connection i f extraction failed (for Hibernate 3.1) * added NamedParameterJdbcTemplate which provides named parameters support for q uery and update functionality * added "allowsUnusedParameters()" and "checkCompiled()" methods to RdbmsOperati on, for better customizing in subclasses * refined StoredProcedure to accept unused entries in given parameter Maps by de fault * added named parameters support to SqlQuery/SqlUpdate hierarchy of classes Package org.springframework.jms * AbstractMessageListenerContainer prefers SessionAwareMessageListener over Mess ageListener (if both are implemented) * added "exceptionListener" property to AbstractMessageListenerContainer, accept ing a standard JMS ExceptionListener * added "handleListenerException" template method to AbstractMessageListenerCont ainer, by default logging at error level * fixed DefaultMessageListenerContainer to properly use separate invokers per th read, for actually concurrent Sessions * fixed ServerSessionMessageListenerContainer(102) to use "createSession(Connect ion)" method to avoid JMS 1.1 dependency * added MessageListenerAdapter(102), delegating to listener methods that operate on content types (String, byte array) Package org.springframework.jmx * reworked NotificationListenerBean to avoid overloaded bean property setters fo r "mappedObjectNames" Package org.springframework.mail * refined JavaMailSenderImpl to use "Session.getInstance(properties, null)", for compatibility with (old) JavaMail 1.1 Package org.springframework.mock * added overloaded constructors to MockFilterConfig, using a MockServletContext instead of a ServletContext argument Package org.springframework.orm * updated JDO API 2.0 jar to 2.0 RC1 from the Apache JDO project * updated JPA API 1.0 jar to build 40 from the GlassFish project * fixed LocalSessionFactoryBean's "updateDatabaseSchema" to declare the correct exception (DataAccessException) * fixed BlobStringType for Hibernate2/3 to correctly handle SQL NULL * refined JDO PersistenceManagerFactoryUtils to explicitly suspend pre-bound PM in the course of transaction suspension * refined JPA EntityManagerFactoryUtils to explicitly suspend pre-bound EM in th e course of transaction suspension * removed support for obsolete "EntityManagerFactory.getEntityManager()" method from LocalEntityManagerFactoryBean * added "entityManagerInterface" property to SharedEntityManagerAdapter, for exp osing a vendor-extended interface * adapted OpenEntityManagerInViewFilter/Interceptor to not specify obsolete Pers istenceContextType.EXTENDED anymore * fixed JpaDaoSupport's "setEntityManager" method to accept an EntityManager ins tead of an EntityManagerFactory * removed "getEntityManager()"/"getEntityManagerFactory()" accessor methods from JpaDaoSupport * removed "allowCreate" flag from JpaTemplate, always allowing creation (analogo us to shared EntityManager) * added "exceptionConversionEnabled" flag to HibernateInterceptor, TopLinkInterc eptor, JdoInterceptor, JpaInterceptor Package org.springframework.remoting * HTTP invoker and RMI invoker fill the client-side portion of the stack trace i nto transferred exceptions now * RmiClientInterceptorUtils throws clearer exception message in case of proxy mi smatch (for underlying RMI stubs) * added "setContentType" configuration method to HttpInvokerServiceExporter and AbstractHttpInvokerRequestExecutor * built client-side HTTP GZIP response support into SimpleHttpInvokerRequestExec utor/CommonsHttpInvokerRequestExecutor * JaxRpcPortClientInterceptor synchronizes creation of JAX-RPC Calls, to make dy namic invocations with Axis thread-safe * refined JaxRpcPortClientInterceptor to only use JAX-RPC port if "portInterface " specified (prefer dynamic invocations) * added "setCustomPropertyMap" method to JaxRpcPortClientInterceptor/ProxyFactor yBean, accepting String-Object pairs * added AxisBeanMappingServicePostProcessor to "jaxrpc.support" package, for dec larative registration of bean mappings Package org.springframework.scheduling * refined Quartz SchedulerFactoryBean to re-register the associated JobDetail wh en overwriting a JobDetailAwareTrigger * fixed Quartz SchedulerFactoryBean to handle potential cluster race condition o n trigger registration Package org.springframework.scripting * AOP-based auto-proxying works for scripted objects as well now * added "lang" namespace for XML schema definitions, providing configuration for beans written in dynamic languages Package org.springframework.transaction * AbstractPlatformTransactionManager logs "Should roll back transaction but cann ot" message at debug level (not warn) * TransactionInterceptor logs application exception at error level if commit thr ows an exception Package org.springframework.util * added null-safe hashCode and toString methods to ObjectUtils (analogous to JDK 1.5), moved over from Spring Modules * fixed StringUtils's "endsWithIgnoreCase" to correctly handle any String length * fixed CollectionsUtils's "hasUniqueObject" to correctly handle null values * refined NumberUtils to perform a value-in-range check for any Number returned from a NumberFormat * reworked MethodInvoker to match arguments against parameter types when searchi ng for a matching method Package org.springframework.validation * renamed SimpleMapBindingResult to MapBindingResult * DataBinder does not use a default StringArrayPropertyEditor anymore, to nicely handle select list entries with commas * fixed ValidationUtils's "invokeValidator" to work correctly even in case of a null reference as object to be validated * added BindingResultUtils, providing convenience methods for looking up Binding Results in a model Map Package org.springframework.web * refined GenericFilterBean to fully support initialization as bean in a Spring bean factory (without FilterConfig) * refined OncePerRequestFilter to fall back to bean name or fully qualified clas s name if no filter name is available * refined FrameworkServlet to log a request handling failure at debug level rath er than error level * refined AbstractRefreshablePortletApplicationContext to take PortletContext fr om PortletConfig if not explicitly set * factored out "handleNoSuchRequestHandlingMethod" method in MultiActionControll er, to be overridden in subclasses * fixed SimpleMappingExceptionResolver to correctly check the depth of all excep tion mappings before choosing a view * refined SimpleMappingExceptionResolver to only apply a "defaultStatusCode" to a top-level request (not to an include) * added "clearCache()" method to AbstractCachingViewResolver, for removing all c ached view objects * optimized BeanNameViewResolver to avoid internal throwing and catching of NoSu chBeanDefinitionExceptions * ExpressionEvaluationManager supports concatenated expressions (e.g. "${var1}te xt${var2}") on all JSP 2.0 engines * added optional caching of JSP 2.0 Expressions, driven by "cacheJspExpressions" context-param in web.xml (true/false) * "javaScriptEscape" feature of Spring tags correctly escapes "</script>" inside a literal value * fixed JSP SelectTag to correctly handle null values * AbstractJasperReportsView and subclasses require JasperReports 1.0.1 or higher (removed backwards compatibility check) * fixed AbstractJasperReportsView and subclasses to be compatible with J2EE <1.4 (avoid response.setCharacterEncoding) * AbstractJasperReportsView autodetects a JDBC DataSource in the model, as alter native to specifying it in configuration * Struts ContextLoaderPlugIn ignores "Action.setServlet(ActionServlet)" method w hen performing a dependency check * optimized Struts Delegating(Tiles)RequestProcessor to avoid unnecessary NoSuch BeanDefinitionException throw+catch * added Autowiring(Tiles)RequestProcessor, autowiring created Actions (configura ble through ActionServlet init-params)
Changes in version 2.0 M3 (8.3.2006)
------------------------------------ Package org.springframework.aop * AbstractBeanFactoryBasedTargetSource offers explicit "setTargetClass" method, else determines target class on demand * renamed AbstractLazyInitTargetSource to AbstractLazyCreationTargetSource * renamed AbstractPerformanceMonitorInterceptor to AbstractMonitoringInterceptor * refined DebugInterceptor to keep its count in a field of type long instead of int, with "long getCount()" accessor * fixed DebugInterceptor to properly synchronize access to its count field in a multithreading environment Package org.springframework.beans * factored out extended PropertyAccessor and ConfigurablePropertyAccessor interf aces from BeanWrapper/BeanWrapperImpl * BeanWrapperImpl supports PropertyEditors exposed by PropertyDescriptors (typic ally from BeanInfo classes) * BeanWrapperImpl passes a null value to a PropertyEditor's "setValue" method, a llowing for conversion of null values * changed MutablePropertyValues's "addPropertyValue" signature back to void, to remain binary compatible with Spring 1.2 * fixed PropertyTypeConverter to never build "null[...]" property paths that lea d to exceptions in "findCustomEditor" * fixed ArgumentConvertingMethodInvoker to perform conversion attempts on a copy of the argument array (not the source) * added "nullAsEmptyCollection" flag to CustomCollectionEditor, allowing to conv ert a null value to an empty Collection * added "containsLocalBean" method to HierarchicalBeanFactory interface, refacto red from AbstractApplicationContext * fixed AbstractBeanFactory to use canonical bean name (id) for prototype creati on, exposing it to BeanPostProcessors * fixed AbstractBeanFactory to destroy a failed bean completely, including depen dent beans (in case of eager references) * fixed AbstractBeanFactory's definition caching to allow for proper placeholder substitution even with parent/child * added "configureBean" method to AutowireCapableBeanFactory, fully configuring an instance based on a bean definition * DefaultListableBeanFactory does not instantiate "factory-bean" references anym ore, not even for eager-init singletons * re-added support for deprecated "class" property to PropertiesBeanDefinitionRe ader, alongside "(class)" * DefaultXmlBeanDefinitionParser considers "" as default namespace as well, for compatibility with the Oracle XML parser Package org.springframework.context * AbstractApplicationContext discovers its context MessageSource as "messageSour ce" bean even through an alias Package org.springframework.core * added "getRootCause()" method to NestedRuntime/CheckedException, for retrievin g the innermost exception * refined PropertiesLoaderUtils to use a URLConnection with "setUseCaches(false) ", to avoid jar file locking on Windows Package org.springframework.jdbc * added further default SQL error codes for MS SQL, MySQL, and Oracle * refined DataSourceUtils to expect an "afterCompletion" callback from a differe nt thread (in case of JTA transaction) Package org.springframework.jms * reworked DefaultMessageListenerContainer to allow for breaking the receive loo p into smaller, schedulable tasks * DefaultMessageListenerContainer defaults "maxMessagesPerTask" to 1 for short-l ived-preferring SchedulingTaskExecutor * renamed ServerSessionMessageListenerContainer's "maxMessages" to "maxMessagesP erTask", for consistency Package org.springframework.jmx * fixed MBeanServerConnectionFactoryBean to avoid potential initialization of un used JMX Connector on shutdown Package org.springframework.jndi * added "defaultObject" property to JndiObjectFactoryBean, allowing to fall back to default object if JNDI lookup fails Package org.springframework.mock * MockServletContext's "getResourcePaths" correctly resolves directories as path s that end with a slash * MockHttpServletResponse detects charset specification in "setContentType" and sets character encoding accordingly * fixed AbstractTransactionalSpringContextTests's "startNewTransaction" to initi alize "complete" to "!defaultRollback" Package org.springframework.orm * Hibernate LocalSessionFactoryBean offers protected "executeSchemaStatement" me thod for overriding the failure handling * fixed JpaTemplate's "findByNamedQuery" to correctly apply parameter indexes st arting from 1 Package org.springframework.scheduling * added SchedulingTaskExecutor interface, letting an executor declare a preferen ce for short-lived tasks * all thread-pool-backed executors implement SchedulingTaskExecutor to expose a preference for short-lived tasks * added SchedulingAwareRunnable interface, exposing an "isLongLived" flag (analo gous to CommonJ's "isDaemon") * CommonJ WorkManagerTaskExecutor/DelegatingWork exposes SchedulingAwareRunnable 's "isLongLived" flag appropriately * fixed TimerFactoryBean to properly initialize even without "scheduledTimerTask s" configured Package org.springframework.scripting * fixed ScriptFactoryPostProcessor to let scripts receive bean references up the entire container hierarchy Package org.springframework.transaction * added CompositeTransactionAttributeSource and "setTransactionAttributeSources( [])" method for TransactionInterceptor * JtaTransactionManager autodetects JNDI location "java:pm/TransactionManager" o n Borland and Sun application servers Package org.springframework.util * fixed ResponseTimeMonitorImpl to properly synchronize access to its instance v ariables in a multithreading environment Package org.springframework.validation * added further accessors to Errors interface: hasFieldErrors(), getFieldErrorCo unt(), getFieldErrors(), getFieldError() * introduced BindingResult interface, as extension of the Errors interface * reworked BindException to implement the BindingResult interface, wrapping an e xisting BindingResult * added BeanPropertyBindingResult and SimpleMapBindingResult implementations, ba sed on a refactoring of BindException * added "BindingResult getBindingResult()" method to DataBinder, deprecating the "BindException getErrors()" method * adapted BindingErrorProcessor interface to operate on a BindingResult instead of a BindException * added support for direct field access in the form of DirectFieldBindingResult and DataBinder's "initDirectFieldAccess" Package org.springframework.web * changed WebApplicationContext's "ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE" to ac tually start with the package name * ContextLoader throws IllegalStateException if there is already a root applicat ion context present * fixed DispatcherServlet to keep and restore previous thread-bound LocaleContex t and RequestAttributes * added overloaded "getModelAndView" method with HttpServletRequest argument to SimpleMappingExceptionResolver * added "cookieSecure" property to CookieGenerator, indicating that cookies shou ld only be sent using HTTPS connections * added schema support for configuring a SimpleUrlHandlerMapping using spring-we b.xsd * renamed "Handler" interface to "RequestHandler", to differentiate it from the dispatcher's generic "handler" concept * moved ControllerClassNameHandlerMapping from package "web.servlet.mvc.mapping" to "web.servlet.mvc" * added "useDirectFieldAccess()" template method to BaseCommandController, for i nitializing the DataBinder accordingly * added overloaded "onFormChange" method with BindException argument to SimpleFo rmController * MultiActionController does not consider "handleRequest" itself as handler meth od (to avoid potential stack overflow) * added full JSP 1.2 form tag library in package "web.servlet.tags", complementi ng the existing base tag library * upgraded VelocityToolboxView to use Velocity Tools 1.2+ API and avoid using de precated earlier API * added VelocityLayoutViewResolver, a convenience subclass of VelocityViewResolv er with support for VelocityLayoutView * added protected "callNextHandlerInChain" method to DecoratingNavigationHandler , to be called by subclasses
Changes in version 2.0 M2 (1.2.2006)
------------------------------------ Overall * all of Spring must be built on JDK 1.5 now; the test suite is still able to ru n on JDK 1.4 and 1.3 Package org.springframework.aop * added equals/hashCode implementations to all pointcuts and advisors * removed restriction on proxying protected methods from Cglib2AopProxy * allowed AopUtils's "invokeJoinpointUsingReflection" to invoke protected method s * added "autodetectInterfaces" to ProxyFactoryBean, for TransactionProxyFactoryB ean style behavior (is the default now!) * refined ProxyFactoryBean to lazily initialize a singleton proxy, to let "getOb jectType()" expose the type beforehand * improved performance of IntroductionInfoSupport by faster determination of whe ther method is on introduced interface * refined ThreadLocalTargetSource's synchronization to guarantee thread-safe des truction on shutdown * added "hideProxyClassNames" property to AbstractTraceInterceptor, to log with target class instead of proxy class * added "target.dynamic" package to support dynamic refresh of object instances * added BeanFactoryRefreshableTargetSource to allow object instances to be refre shed with new instances from BeanFactory * AspectJ binding from pointcut expressions to arbitrary advice method arguments now working * support for introductions using AspectJ @DeclareParents * support for new AspectJ 5 "pertypewithin" aspect instantiation model * completed implementation of @AspectJ integration class MethodInvocationProceed ingJoinPoint Package org.springframework.beans * fixed PropertyAccessorUtils's "getLastNestedPropertySeparatorIndex" to correct ly handle property paths without dot * added overloaded constructor to StringArrayPropertyEditor, allowing to specify a custom separator for String splitting * BeanWrapperImpl keeps registered editors in a linked Map: the first registered editor that matches will be used * BeanWrapperImpl caches registered editors that match superclass or interface, to avoid repeated assignable-from checks * added support for bean properties with generic Collections/Maps, auto-converti ng to their element/key/value type * added support for constructor arguments with generic Collections/Maps, auto-co nverting to their element/key/value type * added "merge" attribute to "list"/"set/"map"/"props", for merging of collectio n values across parent/child definitions * added "default-merge" attribute to "beans" element to allow control of collect ion merging at the file level * changed FileEditor's behavior to consider input text as standard Spring resour ce location (instead of plain filename) * added "postProcessAfterInstantiation" method to InstantiationAwareBeanPostProc essor * fixed AbstractBeanFactory to correctly delegate to parent BeanFactory from "is FactoryBean" * optimized AbstractBeanFactory to avoid internal NoSuchBeanDefinitionException throw+catch as far as possible * AbstractBeanFactory caches merged bean definitions, for efficient prototype ch ild creation and CGLIB class reuse * reworked AbstractBeanFactory's currently-in-creation check to log debug messag e when unfinished singleton is returned * added "allowCircularReferences" flag to AbstractAutowireCapableBeanFactory, to disallow circular references completely * DefaultListableBeanFactory's "getBeansOfType" logs BeanCurrentlyInCreationExce ption message instead of stacktrace * refined DefaultXmlBeanDefinitionParser to explicity check for empty ref name a nd throw meaningful exception * DefaultXmlBeanDefinitionParser wraps unexpected exceptions in BeanDefinitionSt oreException with context info * inner bean parsing/instantiation exceptions get wrapped in outer exceptions wi th appropriate context information * moved general bean wiring support from "beans.factory.aspectj" to "beans.facto ry.wiring"/"beans.factory.annotation" * renamed AspectJ AnnotationBeanConfigurer to AnnotationBeanConfigurerAspect * deprecated BeanFactoryBootstrap in favor of using a BeanFactoryLocator or a cu stom bootstrap class Package org.springframework.context * refined AbstractApplicationContext to never register more than one JVM shutdow n hook * deprecated ConsoleListener, since it doesn't serve any purpose Package org.springframework.core * JdkVersion explicitly detects JDK 1.6 and 1.7 as well (does not mis-detect 1.6 as 1.3 anymore) * refined Jdk13ControlFlow to be compatible with GNU ClassPath (whose stacktrace has a whitespace after the method name) * added NestedIOException, deriving from java.io.IOException and adding NestedCh eckedException-style root cause handling * refined AbstractResource to work around "FilterInputStream.close()" NPE, simpl y catching Throwable and ignoring it * PathMatchingResourcePatternResolver considers URL protocol "wsjar" as jar file (to load from WebSphere-managed jars) * ResourceArrayPropertyEditor can translate a set/list of patterns into a Resour ce array (rather than just one pattern) * split previous AnnotationUtils delegatetetetete into core.annotation.Annotatio nUtils and beans.annotation.AnnotationBeanUtils Package org.springframework.jdbc * DataSourceTransactionManager only attempts to release Connection if not pre-bo und (to avoid inappropriate log message) * TransactionAwareDataSourceProxy works correctly in combination with JdbcTempla te and transaction suspend/resume now * fixed SingleColumnRowMapper to explicitly check "ResultSet.wasNull()" after "g etInt"/"getLong"/"getFloat" etc * turned visibility of "org.springframework.jdbc.core.StatementCreatorUtils" to package-protected * removed ResultReader interface (sub-interface of RowCallbackHandler): use RowM apper instead * reworked RowMapperResultReader adapter into RowMapperResultSetExtractor * reworked ResultSetSupportingSqlParameter to expose a RowMapper directly throug h a "getRowMapper()" method * reworked SqlQuery and subclasses to work with a RowMapper instead of a ResultR eader -> "newRowMapper" template method * fixed BatchSqlUpdate's constructor that takes a "batchSize" argument to correc tly interpret it as batch size * added "trackRowsAffected" property to BatchSqlUpdate, allowing to turn off the row counts list to save memory * refined JdbcBeanDefinitionReader to offer constructors with BeanDefinitionRegi stry and PropertiesBeanDefinitionReader Package org.springframework.jmx * fixed MBeanExporter to work correctly with an "excludedBeans" list that it not sorted by bean name ascending * fixed "persistPeriod" default to be -1 even in ManagedResource attribute (not just in ManagedResource annotation) Package org.springframework.mock * made "servletContextName" and "portletContextName" configurable in MockServlet Context respectively MockPortletContext * added "set/removeParameter" methods to MockHttpServletRequest, allowing to rep lace/remove existing parameters * added alternative MockPortalContext constructor that accepts custom PortletMod e and WindowState lists * reworked MockActionResponse and MockPortletURL to check against list of suppor ted PortletModes/WindowStates Package org.springframework.orm * SqlMapClientTemplate always works with SqlMapSession and provided Connection t o enable proper batching in all cases * added "configLocations" property to LocalSessionFactoryBean for Hibernate3, al lowing to load multiple config files * LocalSessionFactoryBean supports cache regions specified through "entity/colle ctionCacheStrategies" (on Hibernate 3.1) * LocalSessionFactoryBean supports multiple event listeners per type through "ev entListeners" (on Hibernate 3.1) * added optional SpringSessionContext for Hibernate 3.1, to plug Spring into "ge tCurrentSession()" without proxying * added "replicate" convenience methods to HibernateTemplate for both Hibernate2 and Hibernate3 * added BlobStringType with configurable character encoding for both Hibernate2 and Hibernate3 * updated Spring's JDO 2.0 support to JDO API 2.0 beta (as provided by Apache, c orresponding to JPOX 1.1.0-beta-6) * added full support for Java Persistence API 1.0 (JPA) Public Final Draft, in p ackage "org.springframework.orm.jpa" Package org.springframework.samples * updated "views.properties" files in all sample applications to use "(class)" a nd "(parent)" * renamed PetClinic's "Entity" base class to "BaseEntity", to avoid name collisi on with the JPA Entity annotation * marked JPetStore's OrderForm, AccountForm and UserSession as Serializable Package org.springframework.scheduling * removed special Quartz 1.3 check from SchedulerFactoryBean: requires Quartz 1. 4 or higher now * added support for Quartz 1.5's merged JobDataMap to QuartzJobBean, falling bac k to plain JobDataMap on Quartz 1.4 Package org.springframework.scripting * introduced scripting package based on ScriptFactory and ScriptSource abstracti ons * added support for BeanShell, Groovy and JRuby scripted objects Package org.springframework.test * fixed AbstractDependencyInjectionSpringContextTests's "populateProtectedVariab les" to avoid incorrect warnings * added "startNewTransaction()" method to AbstractTransactionalSpringContextTest s Package org.springframework.transaction * refined AbstractPlatformTransactionManager to suspend synchronizations before the actual transaction (not after) * fixed AbstractPlatformTransactionManager to serialize all relevant state * fixed TransactionInterceptor to correctly serialize TransactionAspectSupport s tate * marked AnnotationTransactionAttributeSource as Serializable Package org.springframework.ui * added ModelMap, providing "addObject" methods that auto-generate model attribu te names according to conventions * added "defaultEncoding" bean property to FreeMarkerConfigurationFactory(Bean), inherited by FreeMarkerConfigurer * added overloaded methods to JasperReportsUtils to allow exporter parameter to be specified for specific formats Package org.springframework.util * ClassUtils's "forName(String)" method uses "getDefaultClassLoader()" instead o f thread context ClassLoader only * fixed "StringUtils.delimitedListToStringArray" to properly handle an empty Str ing as delimiter * refined StopWatch to not add new lines for "shortSummary()" but rather only fo r "prettyPrint()" * fixed ConcurrencyThrottleSupport to serialize all relevant state Package org.springframework.validation * DataBinder registers suppressed fields in BindException, which offers a "getSu ppressedFields()" accessor now Package org.springframework.web * "contextConfigLocation" params in "web.xml" support "${...}" style placeholder s for system properties * deprecated BindUtils and BindInitializer in package "web.bind" in favor of dir ect ServletRequestDataBinder usage * deprecated RequestUtils in package "web.bind" in favor of ServletRequestUtils * renamed RequestUtils in package "web.portlet.bind" to PortletRequestUtils * reworked MultipartException to derive from NestedIOException instead of Nested ServletException, for Portlet reuse * upgraded CommonsMultipartResolver to Commons FileUpload 1.1 (not using depreca ted FileUpload 1.0 API anymore) * added PortletMultipartResolver abstraction, with CommonsPortletMultipartResolv er implementation as default * added multipart support to PortletRequestDataBinder, with factored-out common functionality in WebDataBinder * reworked RequestContextHolder to hold a RequestAttributes facade instead of a full HttpServletRequest * added RequestContextHolder support to DispatcherPortlet, to enable Request/Ses sionScopeMap with portlets * refactored RequestHandledEvent into RequestHandledEvent base class and Servlet RequestHandledEvent subclass * renamed FrameworkPortlet's RequestHandledEvent to PortletRequestHandledEvent, a subclass of RequestHandledEvent * PortletBean ignores init-params that do not match bean properties, analogous t o HttpServletBean * DispatcherServlet does not log handler exceptions at warn level anymore but ra ther only at debug level * fixed DispatcherPortlet to properly support an exposed View object in a given ModelAndView * reworked Servlet ModelAndView and Portlet ModelAndView to fully support ModelM ap's conventional attribute names * added HttpSessionMutexListener and "WebUtils.getSessionMutex", used by Abstrac tController's "synchronizeOnSession" * added "PortletUtils.getSessionMutex", used by the Portlet AbstractController's "synchronizeOnSession" * added "FacesContextUtils.getSessionMutex", to make HttpSessionMutexListener's session mutex available to JSF code * turned AbstractController's "passAllParametersToRenderPhase"/"clearAllRenderPa rameters" into PortletUtils methods * added "propertyEditorRegistrars" property to BaseCommandController, for applyi ng PropertyEditorRegistrars * added "propertyEditorRegistrars" property to Portlet BaseCommandController, fo r applying PropertyEditorRegistrars * added "bindingErrorProcessor" property to Portlet BaseCommandController, for c onfigurable BindingErrorProcessor * turned AbstractCommandController's and AbstractFormController's "handleRequest Internal" methods non-final * refactored AbstractFormController's session form check into one single place, throwing SessionRequiredException * reworked MultiActionController's "bind" and "createBinder" to work on HttpServ letRequest instead of ServletRequest * deprecated MultiActionController's "initBinder(ServletRequest...)" in favor of "initBinder(HttpServletRequest...)" * refined ParameterMethodNameResolver to treat an empty method name as no name a t all, letting the default kick in * added protected accessors for UrlBasedViewResolver's bean properties, allowing subclasses to access the settings * added "argumentSeparator" property to MessageTag, allowing to specify a custom separator instead of the default comma * added "useSingleModelNameAsRoot" property to AbstractXlstView, allowing to enf orce the value of the "root" property * added RequestToViewNameTranslator strategy to allow DispatcherServlet to auto- generate view names where necessary * added DefaultRequestToViewNameTranslator to provide intuitive defaults for aut omatic view name generation * refined Struts DelegatingActionProxy and Delegating(Tiles)RequestProcessor to fall back to root WebApplicationContext * added DelegatingNavigationHandlerProxy and DelegatingPhaseListenerMulticaster to JSF support (used by Spring Web Flow)
Changes in version 2.0 M1 (22.12.2005)
-------------------------------------- Overall * removed all deprecated classes and methods * removed support for iBATIS SQL Maps 1.3 (if you haven't done so already, upgra de to iBATIS SQL Maps 2.0/2.1!) * added explicit support for Hibernate 3.1 while remaining compatible with Hiber nate 3.0 (as far as possible) * factored out "spring-jdo", "spring-hibernate2/3", "spring-toplink", "spring-oj b" jars (not in "spring.jar" anymore!) * distributed first AspectJ aspects (for transaction management and DI of object s not instantiated by Spring container) Package org.springframework.aop * added support for AspectJ pointcut expressions, specified in AspectJ pointcut language * added support for AspectJ aspect implementations, both for classic AspectJ sty le and the AspectJ 5 annotation style * added @Configurable annotation plus BeanConfigurer aspect to allow injection o n any arbitrary object through AspectJ * added AopNamespaceHandler to support dedicated "aop:*" XML tags Package org.springframework.beans * added intelligent error messages to BeanWrapperImpl when properties are not fo und * fixed BeanWrapperImpl to pass its "extractOldValueForEditor" setting on to nes ted BeanWrappers * refined BeanWrapperImpl to perform the accessible checking for read/write meth ods before every invocation * changed "MutablePropertyValues.addPropertyValue(String, Object)" to return 'th is' * removed deprecated "getBeanDefinitionNames(type)" method from ListableBeanFact ory and BeanFactoryUtils * added "createBean" and "initializeBean" methods to AutowireCapableBeanFactory interface * fixed AbstractBeanFactory to allow child bean definitions to refer to a parent via its alias name * DefaultListableBeanFactory is able to call non-public factory methods as well * PropertiesBeanDefinitionReader trims String values for special keys such as "( class)", "(parent)", etc * added "default-init-method" and "default-destroy-method" attributes to the XML bean definition format * added support for XSD-driven XML bean definitions, with pluggable namespace ha ndlers * added UtilNamespaceHandler to support dedicated "util:*" XML tags Package org.springframework.core * introduced TaskExecutor abstraction, as strategy interface for the execution o f Runnables * added SyncTaskExecutor and SimpleAsyncTaskExecutor as simple default implement ations of the TaskExecutor interface Package org.springframework.context * added "getAutowireCapableBeanFactory()" accessor to ApplicationContext interfa ce, for direct access without casting * refined AbstractApplicationContext's lifecycle behavior to properly ignore rep eated "close()" calls * moved DefaultListableBeanFactory's cleanup on "preInstantiateSingletons()" beh avior to AbstractApplicationContext * reworked SimpleApplicationEventMulticaster to delegate to a TaskExecutor, usin g a SyncTaskExecutor as default Package org.springframework.dao * introduced EmptyResultDataAccessException as specific subclass of IncorrectRes ultSizeDataAccessException Package org.springframework.jdbc * added further error codes for Oracle and MySQL to default "sql-error-codes.xml " file * OracleLobHandler lazily initializes Oracle driver classes, always loading via the actual Connection's class loader * fixed DataSourceUtils to correctly re-suspend a Connection even if the Connect ion hasn't been used since resume * fixed JdbcTemplate to extract the JDBC Connection for CallableStatementCreator s if a NativeJdbcExtractor has been set * factored out protected "getColumnMapRowMapper" and "getSingleColumnRowMapper" hooks within JdbcTemplate * SingleColumnRowMapper throws specific IncorrectResultSetColumnCountException i n case of invalid column count * SingleColumnRowMapper explicitly calls "ResultSet.getBigDecimal()" if the requ ired type is BigDecimal * added SimpleJdbcTemplate with ParameterizableRowMapper for Java 5, leveraging varargs and generics Package org.springframework.jms * SimpleMessageConverter accepts a passed-in raw JMS Message and returns a raw J MS Message if content type is unknown * added DefaultMessageListenerContainer mechanism for async message reception vi a the plain JMS MessageConsumer API * added SimpleMessageListenerContainer mechanism for async message reception via the plain JMS MessageListener API * added ServerSessionMessageListenerContainer mechanism for async message recept ion via the JMS ServerSessionPool API Package org.springframework.jmx * introduced MBeanExportOperations interface, providing a programmatic facility for registering MBeans on MBeanExporter * introduced MBeanExportException as unified exception hierarchy for MBeanExport er and MBeanExportOperations * MBeanExporter no longer ignores autodetected MBeans with invalid object names: specify appropriate "excludedBeans" * added support for registering NotificationListeners with the MBeanServer * added @ManagedNotification(s) annotation (and corresponding Commons attributes ) for describing notification MBeanInfo * extended static MBeanInfoAssemblers to support configuration of Notification m etadata * added NotificationPublisher(Aware) to support publication of JMX Notifications from Spring-managed beans * added MBeanExporter option to have Spring extend ObjectNames to ensure they ar e unique per-instance * added MBeanExporter option to have Spring expose the ClassLoader of the manage d resource before MBean invocations Package org.springframework.jndi * added JndiNamespaceHandler to support dedicated "jndi:*" XML tags Package org.springframework.orm * JdoTransactionManager does explicit "isActive()" check before attempting a rol lback, to avoid illegal state exception * HibernateTransactionManager autodetects Hibernate 3.1 to support its native tr ansaction timeout * removed "save" operations with explicit id argument from HibernateTemplate (fo llowing Hibernate 3.1's removal) * upgraded FilterDefinitionFactoryBean to Hibernate 3.1 (which changed its Filte rDefinition in an incompatible fashion) * upgraded IdTransferringMergeEventListener to Hibernate 3.1 (which changed its listener API in an incompatible fashion) * Hibernate LocalSessionFactoryBean exposes its DataSource on "SessionFactory.cl ose()", for potential schema export Package org.springframework.remoting * RmiServiceExporter performs explicit RMI unexport if binding to the registry f ailed, to avoid dangling exports * JaxRpcPortClientInterceptor/ProxyFactoryBean apply given JaxRpcServicePostProc essors to existing JAX-RPC Service too * HttpInvokerServiceExporter, HessianServiceExporter and BurlapServiceExporter i mplement Handler instead of Controller * HttpInvokerRequestExecutor is allowed to throw any Exception, not just IOExcep tion and ClassNotFoundException Package org.springframework.scheduling * TimerFactoryBean creates a non-daemon Timer by default, to let running tasks f inish after Timer was cancelled * added TimerTaskExecutor adapter for accessing a "java.util.Timer" through the TaskExecutor interface * added "taskExecutor" property to Quartz SchedulerFactoryBean, for replacing Qu artz's default thread pool * added SimpleThreadPoolTaskExecutor for Quartz, allowing to define Quartz's def ault thread pool as Spring TaskExecutor * added scheduling-style support for the JDK 1.5 ThreadPoolExecutor mechanism in the "java.util.concurrent" package * added ConcurrentTaskExecutor adapter for accessing a JDK 1.5 Executor through the TaskExecutor interface * added scheduling-style support for the CommonJ TimerManager API, as supported by WebLogic 9 and WebSphere 6 * added WorkManagerTaskExecutor adapter for accessing a CommonJ WorkManager thro ugh the TaskExecutor interface Package org.springframework.samples * upgraded JPetStore (standard and annotation version) to use the new XML schema namespaces "aop", "tx" and "jndi" Package org.springframework.test * added AbstractModelAndViewTests, a convenience super class for testing ModelAn dView objects Package org.springframework.transaction * JtaTransactionManager only invokes rollback if transaction is still active (so me JTA providers eagerly terminate) * added TransactionNamespaceHandler to support dedicated "tx:*" XML tags Package org.springframework.util * added "isNull()" methods to Assert class * added "setPathSeparator" method to AntPathMatcher, allowing to override the de fault path separator "/" * fixed AntPathMatcher to correctly treat "*" right after separator, i.e. to acc ept path "/test/" for pattern "/test/*" * WeakReferenceMonitor uses a daemon thread, to avoid a hanging thread even if w eak references have not been released * changed ConcurrencyThrottleSupport's default "concurrencyLimit" to -1 (keeping ConcurrencyThrottleInterceptor at 1) Package org.springframework.web * use NestedServletException wherever a root cause gets wrapped by a ServletExce ption (for nicer root cause handling) * WebApplicationContext interface does not extend ThemeSource anymore; implement ing ThemeSource is now optional * introduced ServletConfigAware interface, for getting access to a Framework/Dis patcherServlet's ServletConfig object * SimpleServletPostProcessor configures Servlets with DispatcherServlet's Servle tConfig by default (can be turned off) * introduced Handler interface as alternative to Controller, with no ModelAndVie w and only throwing Servlet/IOException * AbstractCachingViewResolver guarantees at-most-once instantiation of each View instance (-> extended synchronization) * added "currentFormObject" template method to AbstractFormController, for post- processing of a session form object * "RequestContextUtils.getLocale(request)" falls back to the accept-header Local e if no LocaleResolver found * FixedLocaleResolver returns the JVM's default Locale if no explicit default Lo cale specified * VelocityView converts Velocity's MethodInvocationException to a Spring NestedS ervletException with original root cause