0% 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.

Uploaded by

pavanimopuri
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% 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.

Uploaded by

pavanimopuri
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 105

SPRING FRAMEWORK CHANGELOG

==========================
http://www.springframework.org

Changes in version 2.5.6.SEC01 (2009-04-22)


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

You might also like