SPRING FRAMEWORK CHANGELOG
==========================
$Id: changelog.txt,v 1.3 2004/04/23 18:52:18 tjuerge Exp $


Changes in version 1.0.1 (22.4.2003)
------------------------------------

Package org.springframework.aop
* added "addBeforeAdvice"/"addAfterReturningAdvice"/"addThrowsAdvice" methods to Advised, available on all AOP proxies
* added "addAfterReturningAdvice" method to AdvisedSupport
* refined usage of AopConfigException, to avoid cyclic dependencies between org.springframework.aop subpackages
* moved internal class AopUtils from package aop.framework.support to aop.support, to avoid cyclic package dependencies
* renamed AbstractPrototypeTargetSource to AbstractPrototypeBasedTargetSource
* renamed AbstractPrototypeTargetSourceCreator to AbstractPrototypeBasedTargetSourceCreator
* fixed interface implementation check in DelegatingIntroductionInterceptor to also detect super-interfaces

Package org.springframework.beans
* added "getPropertyType" method to BeanWrapper/BeanWrapperImpl, capable of checking indexed/mapped elements
* BeanWrapperImpl allows registration of custom editors for array/List/Map properties
* BeanWrapperImpl allows registration of custom editors for specific elements of array/List/Map properties
* fixed CustomBooleanEditor, CustomDateEditor and CustomNumberEditor to parse null texts as null values
* added InputStreamEditor to standard PropertyEditors, for creating java.io.InputStream instances from String locations
* added ByteArrayPropertyEditor to standard PropertyEditors, for turning Strings into their byte representations
* added DestructionAwareBeanPostProcessor subinterface, adding a before-destruction callback
* AbstractBeanFactory overrides parent bean if child name equals parent name (rather than causing a stack overflow)
* AbstractAutowireCapableBeanFactory throws more expressive exceptions if a custom init-method failed
* AbstractAutowireCapableBeanFactory throws an exception if a BeanPostProcessor returns null as bean instance

Package org.springframework.core
* added check whether cause is "this" to NestedRuntime/CheckedException, to avoid stack overflow in obscure scenarios

Package org.springframework.context
* AbstractXml/StaticApplicationContext use internal bean factory of parent context as parent for their bean factory
* AbstractXml/StaticApplicationContext properly check parent context for referenced parent beans (bean parent="...")
* removed unused default constructor and protected setters from DefaultMessageSourceResolvable
* AbstractMessageSource returns default message if passed-in message code is null
* AbstractMessageSource just falls back to message code as message if no default message given
* AbstractMessageSource's "getMessageInternal" method returns null instead of throwing NoSuchMessageException
* added "resolveConfigLocations" method to AbstractApplicationContext, resolving file patterns via PathMatcher
* AbstractXmlApplicationContext resolves its config locations via "resolveConfigLocations" to allow for file patterns
* EventPublicationInterceptor implements ApplicationContextAware rather than extending ApplicationObjectSupport

Package org.springframework.jdbc
* fixed JdbcTemplate's "queryForList" to correctly handle a single row with a single column as result
* added "setSqlReadyForUse" method to StoredProcedure, for indicating that the SQL should be used as provided
* SQLErrorCodesFactory caches database product name in a Map based on DataSource to avoid unnecessary metadata lookups
* added property "useSqlStateForTranslation" to SqlErrorCodes to allow for translation of PostgreSQL state codes
* added "extractDatabaseMetaData" method to JdbcUtils, using the DatabaseMetaDataCallback interface as parameter

Package org.springframework.orm
* fixed Hibernate Session unbinding in case of JtaTransactionManager with flush failure im beforeCommit synchronization
* added support for transaction-scoped Sessions with plain JTA or EJB CMT, without JtaTransactionManager being involved
* added explicit auto-commit handling to LocalSessionFactoryBean's "executeSchemaScript" method
* SqlMapClientTemplate closes the SqlMapSession even if JDBC Connection retrieval or closing failed

Package org.springframework.remoting
* refined exceptions thrown by RmiClientInterceptor's "createRmiProxy" and RmiProxyFactoryBean's "afterPropertiesSet"
* added "getApplicationContext" method to ServletEndpointSupport, as alternative to "getWebApplicationContext"

Package org.springframework.scheduling
* added "applicationContextJobDataKey" property to JobDetailBean, for exposing the ApplicationContext in the JobDataMap

Package org.springframework.transaction
* fixed AbstractPlatformTransactionManager's handling of beforeCompletion callbacks in case of beforeCommit failures
* added WebSphere 5.1 check to WebSphereTransactionManagerFactoryBean (covering versions 5.1, 5.0 and 4 now)

Package org.springframework.util
* added "retrieveMatchingFiles" method to PathMatcher, retrieving matching files from a directory tree
* added "isPattern" method to PathMatcher, checking whether a given string has to be matched via the "match" method

Package org.springframework.validation
* fixed bug where DataBinder would choke on null values of required fields, resulting in an NPE
* factored out message code resolution into MessageCodesResolver strategy, with DefaultMessageCodesResolver impl
* DefaultMessageCodesResolver generates codes for specific elements and the whole collection in case of array/List/Map
* DefaultMessageCodesResolver generates code for the type of a field, e.g. "typeMismatch.java.lang.String"
* DefaultMessageCodesResolver generates code for the object name in case of an ObjectError, e.g. "myError.myForm"

Package org.springframework.web
* WebApplicationObjectSupport applies lazy WebApplicationContext type check to facilitate easier unit testing
* added MaxUploadSizeExceededException to multipart package, as a specific subclass of MultipartException
* CommonsMultipartResolver and CosMultipartResolver throw MaxUploadSizeExceededException when appropriate
* fixed HttpServletBean's support for required properties, renaming "setRequiredProperty" to "addRequiredProperty"
* apply HandlerExceptionResolvers also if multipart resolution of handler mapping failed (passing in null as handler)
* added "messageCodesResolver" property to BaseCommandController, available to all command and form controllers
* added overloaded "onBind" method with an additional BindException parameter to BaseCommandController
* added overloaded "onSubmit" method with just command and BindException parameters to SimpleFormController
* added "getThemeMessage" methods to RequestContext, for easy access to theme-specific messages in non-JSP views
* added "arguments" property to MessageTag, allowing to specify a comma-delimited list of String message arguments
* activated MessageTag's and ThemeTag's "var" and "scope" properties in Tag Library Descriptor (spring.tld)
* reworked ComponentControllerSupport class for Tiles to be compatible with both Struts 1.1 and Struts 1.2
* added Struts ActionSupport and DispatchActionSupport base classes, for easy access to a Spring context from Actions
* added Struts ContextLoaderPlugIn and DelegatingActionProxy, superseding Don Brown's Spring Struts Plugin


Changes in version 1.0 final (24.3.2003)
----------------------------------------

Package org.springframework.aop
* upgraded to release 1.0 of the AOP Alliance interfaces
* removed attachment feature on MethodInvocation
* all Spring advices extend org.aopalliance.aop.Advice tag interface
* introduced frozen flag on ProxyConfig, to be used to disable advice changes
* deleted MethodAfterReturningAdvice, as AfterReturningAdvice superclass is sufficient
* fixed too eager initialization of common interceptors in AbstractAutoProxyCreator, potentially causing circular refs
* renamed AdvisorAutoProxyCreator to DefaultAdvisorAutoProxyCreator, to distinguish it from its abstract superclass
* all pre-built Advisors implement the Ordered interface, offering a "order" bean property for specifying a value

Package org.springframework.beans
* added support for directly setting array, List and Map elements to BeanWrapperImpl
* added support for fetching a Set element via an index to BeanWrapperImpl, applying the index to the Set Iterator
* removed BeanWrapperImpl's "invoke" method which lacked sophistication like support for overloaded methods
* fixed BeanWrapperImpl's custom editor detection for indexed and mapped properties
* fixed BeanWrapperImpl's default editor registration to use classes rather than instances, for thread-safety
* fixed BeanWrapperImpl's conversion of Lists to arrays to correctly convert to primitive arrays
* fixed BeanWrapperImpl's population of an array when given a single value
* added BeanDefinition interface, used by ConfigurableBeanFactory to return property and constructor argument values
* adapted BeanDefinitionRegistry interface and AbstractBeanFactory base class to BeanDefinition interface
* refined AbstractAutowireCapableBeanFactory's use of synchronization, particularly with custom editors
* refined AbstractAutowireCapableBeanFactory's "destroyBean" implementation to detect "shutdown(boolean force)" methods
* fixed type difference weight algorithm in AbstractAutowireCapableBeanFactory to ignore non-matching arguments
* reworked DefaultListableBeanFactory's bean definition registry to respect the order of registration
* fixed DefaultListableBeanFactory's "getBeanDefinitionNames" implementation to ignore directly registered singletons
* CustomEditorConfigurer implements Ordered interface, to support ordered invocation of BeanFactoryPostProcessors
* added "ignoreUnresolvablePlaceholders" property to PropertyPlaceholderConfigurer
* reworked PropertiesFactoryBean to work with PropertiesPersister strategy
* trim the text value of a "prop" tag to avoid unwanted whitespace caused by typical XML formatting

Package org.springframework.context
* ApplicationContext interface extends ResourceLoader interface
* added "addBeanFactoryPostProcessor" method to ConfigurableApplicationContext interface
* AbstractApplicationContext implements resource loading through extending DefaultResourceLoader
* reworked AbstractXmlApplicationContext to use a "getConfigLocations" template method
* ClassPathXmlApplicationContext extends AbstractXmlApplicationContext rather than FileSystemXmlApplicationContext
* added "postProcessBeanFactory" hook to AbstractApplicationContext
* added ResourceLoaderAware and MessageSourceAware interfaces, for expressing simpler dependencies
* AbstractMessageSource supports resolution of message arguments that are MessageSourceResolvables themselves
* renamed AbstractMessageSource's "resolve" method to "resolveCode"
* refined ReloadableResourceBundleMessageSource's use of synchronization
* reworked ReloadableResourceBundleMessageSource to work with ResourceLoader instead of ApplicationContext
* reworked ReloadableResourceBundleMessageSource to work with PropertiesPersister strategy
* added encoding support to ReloadableResourceBundleMessageSource, via "defaultEncoding" and "fileEncodings"

Package org.springframework.core
* added ResourceLoader interface, extended by the ApplicationContext interface
* factored out default loading strategy from ResourceEditor into DefaultResourceLoader implementation
* fixed CLASSPATH_URL_PREFIX check in ResourceEditor
* log warning message rather than throw an exception if ResourceEditor cannot resolve a system property
* decode URL file path before using it to construct a File in UrlResource and ClassPathResource

Package org.springframework.jdbc
* refined SimpleNativeJdbcExtractor's "getNativeConnectionFromStatement" implementation
* added generic StatementCallback, PreparedStatementCallback and CallableStatementCallback interfaces
* added SqlProvider interface, typically implemented by PreparedStatementCreators and CallableStatementCreators
* added "execute" methods to JdbcTemplate and JdbcOperations, taking XxxStatementCallback implementations as actions
* all "query" methods that take a RowCallbackHandler return a List, passing through a results List from a ResultReader
* renamed "doWithResultSetFromStaticQuery" and "doWithResultSetFromPreparedStatement" to "query"
* removed JdbcTemplate's "update" method that takes a PreparedStatementCreator array
* added "queryForLong" methods to JdbcTemplate class and JdbcOperations interface
* fixed number detection for JdbcTemplate's "queryForInt" and "queryForLong"
* added ResultSet type support to PreparedStatementCreatorFactory, CallableStatementCreatorFactory, and SqlOperation

Package org.springframework.jndi
* added "jndiEnvironment" property to AbstractJndiLocator, for simplified configuration of JNDI environment settings
* renamed ContextCallback interface to JndiCallback

Package org.springframework.mail
* added character encoding support to MimeMessageHelper, allowing to specify an encoding for the entire message
* added overloaded "setTo"/"setCc"/"setBcc" methods to MimeMessageHelper, with InternetAddress arguments
* added "addTo"/"addCc"/"addBcc" methods to MimeMessageHelper, supporting automatic encoding of personal names

Package org.springframework.orm
* reworked LocalSessionFactoryBean's schema support, providing "drop/create/updateDatabaseSchema" methods
* LocalSessionFactoryBean keeps the Hibernate Configuration object, allowing access via the "getConfiguration" method
* added "createCriteria" method to HibernateTemplate, for creating Criteria objects that respect transaction timeouts
* added "loadAll(Class)" method to HibernateTemplate and HibernateOperations, for retrieving all instances of a class
* added overloaded "findByNamedQuery" methods for named parameters to HibernateTemplate and HibernateOperations
* added HibernateTemplate's "execute" and "executeFind" methods to HibernateOperations interface
* allow for ClobStringType to be instantiated without LobHandler, for use with Hibernate's SchemaExport tool
* adapted iBATIS SQL Maps 2 support to SQL Maps 2.0 RC1, calling the new SqlMapSession.close method
* changed SqlMapClientCallback's "doInSqlMapSession(SqlMapSession)" method to "doInSqlMapClient(SqlMapExecutor)"

Package org.springframework.scheduling
* fixed SchedulerFactoryBean's JobDetail auto-registration when multiple triggers refer to the same JobDetail
* added TimerTaskExecutionException to be thrown by TimerTask impls, analogous to Quartz' JobExecutionException

Package org.springframework.transaction
* AbstractPlatformTransactionManager does not attempt rollback when afterCompletion callback throws an exception
* added "transactionAttributeSource" property to TransactionProxyFactoryBean, for specifying any attribute source
* renamed TransactionAttributeSourceTransactionAroundAdvisor to TransactionAttributeSourceAdvisor
* TransactionAttributeSourceAdvisor has default ordering behavior rather than an order value of 10
* JotmFactoryBean implements DisposableBean to stop a locally created JOTM instance on context shutdown

Package org.springframework.ui
* added SpringResourceLoader adapter that can load a Velocity resource via any Spring ResourceLoader
* reworked Velocity resource loader path handling to automatically adapt to any kind of Spring resource location
* added overloaded "mergeTemplate" methods that support file encodings to VelocityEngineUtils
* removed "exposeModelAsContextAttributes" method from VelocityEngineUtils
* added FreeMarker support (analogous to Velocity): FreeMarkerConfigurationFactory, FreeMarkerConfigurationFactoryBean

Package org.springframework.util
* added ObjectUtils class, containing the "nullSafeEquals" method formerly found in StringUtils
* added PropertiesPersister interface, to factor out properties parsing strategies
* added DefaultPropertiesPersister implementation, capable of loading properties files with a specific charset

Package org.springframework.validation
* added "getNestedPath" method to Errors interface
* Errors allows paths that end with a dot as "setNestedPath" arguments

Package org.springframework.web
* updated HtmlUtils to more efficient implementation by Chris Wilson
* added "getRequiredSessionAttribute" method to WebUtils
* changed WebUtils' "getOrCreateSessionAttribute" signature from HttpServletRequest to HttpSession
* added "defaultEncoding" property and "determineEncoding" method to UrlPathHelper
* reworked CommonsMultipartResolver's "headerEncoding" property into "defaultEncoding"
* added "determineEncoding" method to CommonsMultipartResolver, checking the request encoding with fallback to default
* reworked CosMultipartResolver's "headerEncoding" property into "defaultEncoding"
* added "determineEncoding" method to CosMultipartResolver, checking the request encoding with fallback to default
* added ServletContextAware interface for application beans, to be detected by web application contexts
* reworked CommonsMultipartResolver and CosMultipartResolver to implement ServletContextAware
* added CharacterEncodingFilter, for specifying a character set for requests (typically not sent by current browsers)
* reworked ContextLoader and WebApplicationContextUtils to remember exceptions thrown on root context initialization
* added "bindEmptyMultipartFiles" setting to ServletRequestDataBinder
* added "onBind" callback to BaseCommandController, for customized processing after binding but before validation
* AbstractFormController invokes "formBackingObject" on submission rather than "getCommand", if no session form
* added "setView" and "setViewName" mutators to ModelAndView, to allow for post-processing in a HandlerInterceptor
* fixed AbstractCachingViewResolver's caching to use appropriate synchronization
* added "contextRelative" flag to RedirectView, to automatically prepend the context path to a given URL
* refactored TilesView to delegate to various protected methods, for easy subclassing
* fetch DefinitionsFactory on initialization of TilesView, throwing a proper exception if not found
* do not set content type in TilesView, not even if the response is not committed yet
* do not try to send HTTP errors in TilesView but rather throw ServletExceptions
* added support for path attribute to TilesView, for overriding the path of the layout page in a component controller
* removed default config location from VelocityConfigurer (specify a custom config location instead)
* removed unused "writerPoolSize" property from VelocityView
* added "encoding" property to VelocityView, for specifying a view-specific file encoding
* removed model attribute conversion of dots to underscores from VelocityView
* added FreeMarker support (analogous to Velocity): FreeMarkerConfig, FreeMarkerConfigurer, FreeMarkerView


Changes in version 1.0 RC2 (1.3.2003)
-------------------------------------

Package org.springframework.aop
* simplified Advisor interface hierarchy, reducing Advisor subinterfaces to PointcutAdvisor and IntroductionAdvisor
* adapted metadata-driven auto-proxying support and tests to Commons Attributes snapshot from January 15th

Package org.springframework.beans
* fixed PropertyValue's "equals" implementation, added corresponding "hashCode" implementation
* apply custom property editors to converted String array values in BeanWrapperImpl
* CustomNumberEditor supports Short, BigInteger and BigDecimal too
* refactored AbstractBeanFactory into AbstractBeanFactory and AbstractAutowireCapableBeanFactory
* revised BeanFactoryLocator exception handling
* renamed SimpleJndiBeanFactoryLocator to JndiBeanFactoryLocator
* added "systemPropertiesMode" setting to PropertyPlaceholderConfigurer, with values "never", "fallback" and "override"
* added PreferencesPlaceholderConfigurer, being able to resolve placeholders via J2SE 1.4 Preferences
* added CustomEditorConfigurer, for registering custom PropertyEditors in a declarative way
* reworked MethodInvocationFactoryBean to derive from org.springframework.util.MethodInvoker
* added "null" tag to XML bean definition format, for denoting Java null values
* added optional "type" attribute to "constructor-arg" tag, for resolving ambiguities when converting String values

Package org.springframework.context
* renamed JndiBeanFactoryLocator to ContextJndiBeanFactoryLocator
* renamed DefaultBeanFactoryLocator to ContextSingletonBeanFactoryLocator
* renamed LocatorFactory to DefaultLocatorFactory
* fixed "useCodeAsDefaultMessage" fallback for multiple codes in a MessageSourceResolvable
* renamed NestingMessageSource to HierarchicalMessageSource and AbstractNestingMessageSource to AbstractMessageSource
* fixed bug in ReloadableResourceBundleMessageSource's filename caching that prevented loading from multiple basenames
* added "clearCacheIncludingAncestors" method to ReloadableResourceBundleMessageSource
* added "createBeanFactory" and "initBeanDefinitionReader" hooks to AbstractXmlApplicationContext

Package org.springframework.core
* added "getURL" method to Resource interface, supported by FileSystem/ClassPath/ServletContextResource
* ClassPathResource returns a File on "getFile" if the classpath resource resides in the file system

Package org.springframework.ejb
* moved logger instance from AbstractEnterpriseBean to AbstractStatelessSession Bean and AbstractMessageDrivenBean
* propagate BeansException in AbstractStatelessSessionBean's "ejbCreate" rather than wrapping it in a CreateException

Package org.springframework.jdbc
* moved CannotGetJdbcConnectionException and CannotCloseJdbcConnectionException to root jdbc package
* added support for new SQL error code categories: DataRetrieval/OptimisticLocking/DataAccessResourceFailureException
* added "execute(String sql)" method to JdbcTemplate, supporting static SQL and DDL statements
* renamed JdbcTemplate's "execute(CallableStatementCreator csc, List declaredParameters)" method to "call"
* added overloaded "query" methods to JdbcTemplate, allowing to pass in prepared statement arguments as Object array
* added "queryForList"/"queryForObject"/"queryForInt" methods to JdbcTemplate class and JdbcOperations interface
* allowed ResultSetExtractor's "extractData" and JdbcTemplate's "doWithResultSetXxx" to return a result object
* removed "doWithResultSetXxx" methods from JdbcOperations interface
* removed JdbcHelper and its helper classes ColumnExtractor and DefaultColumnExtractor
* revised DataFieldMaxValueIncrementer implementation hierarchy, removed NextMaxValueProvider inner classes
* factored out AbstractSequenceMaxValueIncrementer from OracleSequenceMaxValueIncrementer, with no value cache
* added PostgrSQLSequenceMaxValueIncrementer as subclass of AbstractSequenceMaxValueIncrementer

Package org.springframework.jndi
* renamed the "inContainer" property to "resourceRef", and changed the default value from "true" to "false"

Package org.springframework.mail
* added "javaMailProperties" to JavaMailSender, for creating a Session with specific JavaMail properties

Package org.springframework.orm
* reworked LocalSessionFactoryBean's "configLocation" into Resource
* added "mappingLocations" and "mappingDirectoryLocations" to LocalSessionFactoryBean, each taking a Resource array
* reworked LocalSessionFactoryBean's "mappingResourceJars" property into "mappingJarLocations" Resource array
* auto-detect DataSource in HibernateTransactionManager if configured with LocalDataSourceConnectionProvider
* flush Hibernate sessions when using JtaTransactionManager with pre-bound Sessions (e.g. with Open Session in View)
* added "dataSource" property to LocalPersistenceManagerFactoryBean, for specifying a DataSource as connection factory
* auto-detect DataSource in JdoTransactionManager if PersistenceManagerFactory has a DataSource as connection factory
* added support for the SqlMapClient API of iBATIS SQL Maps 2 (SqlMapClientFactoryBean/Template/Callback/Operations)
* added SqlMapClientDaoSupport class for DAOs that work with iBATIS SQL Maps 2

Package org.springframework.remoting
* added support for custom RMI socket factories to RmiServiceExporter
* unbind RMI object from RMI registry on shutdown of RmiServiceExporter
* renamed RemoteInvocationHandler/RemoteInvocationWrapper to RmiInvocationHandler/RmiInvocationWrapper
* RmiInvocationHandler uses RemoteInvocation class as argument, allowing for custom subclasses with additional params

Package org.springframework.samples
* added optional SendOrderConfirmationEmailAdvice to JPetStore, illustrating MethodAfterReturningAdvice and MailSender
* added scheduling demo to Image Database sample app, illustrating Quartz and Timer, also showing MailSender usage

Package org.springframework.scheduler
* added Quartz support, for setting up Schedulers, JobDetails and Triggers in a Spring context
* added QuartzJobBean, a convenience class that applies the Quartz job data map as bean properties
* added MethodInvocationJobDetailFactoryBean, a convenience class for delegating a job to a business method
* added J2SE Timer support, for setting up Timers and ScheduledTimerTasks
* added MethodInvocationTimerTaskFactoryBean, a convenience class for delegating a task to a business method

Package org.springframework.transaction
* consider a JTA transaction with STATUS_MARKED_ROLLBACK as existing transaction in JtaTransactionManager

Package org.springframework.ui
* renamed NestingThemeSource to HierarchicalThemeSource
* removed AbstractXmlUiApplicationContext and StaticUiApplicationContext base classes (use UiApplicationContextUtils)

Package org.springframework.util
* removed package path utility methods from ClassLoaderUtils
* added MethodInvoker, a base class for MethodInvocationFactoryBean and MethodInvocationJobDetailFactoryBean

Package org.springframework.validation
* added "allowedFields" property to DataBinder, to avoid unwanted modifications when binding request parameters
* added overridable "isAllowed" method to DataBinder

Package org.springframework.web
* added "defaultMethod" property to ParameterMethodNameResolver
* added "numberToolAttribute" to VelocityView, for exposing a locale-aware NumberTool (from Velocity Tools 1.1)
* added "velocityFormatter" property to VelocityView, for exposing a VelocityFormatter (part of standard Velocity)
* relaxed exceptions for null models/null root tag name in AbstractXsltView
* added stylesheet parameters to AbstractXsltView which subclasses can create
* AbstractPdfView now sets the content type correctly on the response


Changes in version 1.0 RC1 (11.2.2003)
--------------------------------------

Package org.springframework.aop
* Overhauled advice manipulation methods on AdvisedSupport
* SimpleIntroductionAdvisor -> DefaultInterceptionIntroductionAdvisor
* added AfterReturning advice to complete AOP advice types
* RegexpMethodPointcut can handle multiple patterns
* added NameMatchMethodPointcut and NameMatchMethodPointcutAroundAdvisor for simple "xxx*"/"*xxx" name matches
* changed AbstractAutoProxyCreator's "interceptors" property to "interceptorNames" to handle prototypes correctly
* added ConcurrencyThrottleInterceptor, blocking invocations if a specified concurrency limit is reached

Package org.springframework.beans
* removed PropertyEditorManager registration from BeanWrapper, purely relying on local registration now
* removed PropertyValuesValidator support from BeanWrapper
* removed newWrapperInstance method from BeanWrapper
* removed AbstractVetoableChangeListener from beans package
* simplified BeanWrapperImpl's PropertyAccessException handling
* improved BeanWrapperImpl's TypeMismatchException message in case of list or array entries
* moved SortDefinition classes to new beans.support package
* moved PagedListHolder classes from util package to beans.support, to remove cyclic package dependency
* reworked BeanPostProcessor interface into postProcessBeforeInitialization and postProcessAfterInitialization
* revised order of BeanFactory lifecycle methods, now invoking setBeanFactory etc before afterPropertiesSet
* added BeanCreationException, thrown on any error during bean creation (property setting, lifecycle methods)
* added "autodetect" autowire mode that chooses either "constructor" or "byType" through introspection of the class
* reworked AutowireCapableBeanFactory's "autowire" and "autowireConstructor" into a generic "autowire" method
* moved AutowireCapableBeanFactory interface to package beans.factory.config
* added SetFactoryBean class to package beans.factory.config, with "setClass" property for target class
* reworked ListFactoryBean and MapFactoryBean to support "listClass" respectively "mapClass" properties
* moved ConstructorArgumentValues and RuntimeBeanReference to package beans.factory.config
* PropertyPlaceholderConfigurer resolves placeholders in constructor arguments
* PropertyPlaceholderConfigurer supports resolution of system properties
* moved BeanFactoryBootstrap and BootstrapException to package beans.factory.access
* moved BeanFactoryUtils from package beans.factory.support to beans.factory
* added "getAliases" method to BeanDefinitionRegistry interface (same as in BeanFactory)
* allow for FactoryBeans as inner bean definitions
* redesigned RootBeanDefinition and DefaultXmlBeanDefinitionParser to alternatively work with plain class names
* load "spring-beans.dtd" via class loader of BeansDtdResolver instead of thread context class loader
* removed deprecated "ref external" support from XML bean definition format (use "ref bean" instead)
* added new "idref" tag to XML bean definition format, for referencing a bean ID as string (allowing for validation)
* added support for "autodetect" autowire mode to XML bean definition format
* added "set" tag to XML bean definition format, analogous to "list" and "map"
* fixed "constructor-arg" detection in DefaultXmlBeanDefinitionParser to not interfere with inner bean definitions
* reworked BeanFactoryLoader interface into org.springframework.beans.factory.access.BeanFactoryLocator
* added SingletonBeanFactoryLocator class, for use by glue code needing to access a BeanFactory/ApplicationContext
* added SimpleJndiBeanFactoryLocator class, for example for use in Spring's EJB support classes

Package org.springframework.context
* ApplicationContext interface does not extend AutowireCapableBeanFactory anymore (use ConfigurableApplicationContext)
* ApplicationContext's "getResource" method does not throw IOException anymore
* always interpret file paths as relative in AbstractApplicationContext's "getResourceByPath" implementation
* MessageSource's NoSuchMessageException is unchecked rather than checked, as it reflects a configuration error
* renamed MessageSourceResolvable's "getArgs" method to "getArguments"
* reworked internal structure of AbstractNestingMessageSource and ResourceBundleMessageSource
* added ReloadableResourceBundleMessageSource, supporting hot reloading of message definition files
* added "useCodeAsDefaultMessage" property to AbtractNestingMessageSource, to ease development and debugging
* added DefaultBeanFactoryLocator class, for use by glue code needing to access a BeanFactory/ApplicationContext
* added JndiBeanFactoryLocator class, for example for use in Spring's EJB support classes

Package org.springframework.core
* removed HasRootCause, InternalErrorException, ParameterizableErrorCoded, and Timestamped
* added JdkVersion class for easy detection of JDK 1.3 and 1.4
* moved Constants and ControlFlow classes from util package to core
* added InputStreamSource interface to package core.io, as super-interface of Resource
* added "equals" and "hashCode" implementations to AbstractResource, based on descriptions strings
* allow for ${...} placeholders in resource locations parsed by ResourceEditor, replacing them with system properties

Package org.springframework.dao
* TypeMismatchException extends InvalidDataAccessResourceUsageException

Package org.springframework.ejb
* replaced BeanFactoryLoader interface with BeanFactoryLocator, to load a BeanFactory or ApplicationContext for EJBs
* removed XmlBeanFactoryLoader, superseded by JndiBeanFactoryLocator/SimpleJndiBeanFactoryLocator

Package org.springframework.jdbc
* added support for transaction suspension to DataSourceTransactionManager
* added "isNativeConnectionNecessaryForNativePreparedStatements/CallableStatements" methods to NativeJdbcExtractor
* added XAPoolNativeJdbcExtractor for ObjectWeb's XAPool
* added CLOB handling to LobHandler, with BlobCreator reworked into LobCreator that covers both BLOBs and CLOBs
* revised OracleLobHandler to work with all Oracle 9i drivers (classes12 and ojdbc14)
* fixed handling of null values in DefaultLobHandler and OracleLobHandler
* added getExceptionTranslator convenience method to JdbcDaoSupport
* added JdbcOperations interface for JdbcTemplate, to ease unit testing

Package org.springframework.mail
* added MimeMessageHelper to package mail.javamail, providing simple access to a MimeMessage including attachments

Package org.springframework.orm
* added support for transaction suspension to HibernateTransactionManager and JdoTransactionManager
* added HibernateOperations and SqlMapOperations interfaces for HibernateTemplate respectively SqlMapTemplate
* added convertHibernateAccessException convenience method to HibernateDaoSupport
* added convertJdoAccessException convenience method to JdoDaoSupport
* revised Hibernate-JTA synchronization to close the Session early in case of a Hibernate TransactionManagerLookup
* added "jtaTransactionManager" property to LocalSessionFactoryBean, for driving Hibernate's TransactionManagerLookup
* added ClobStringType for mapping Strings to LobHandler-managed CLOBs with Hibernate
* added "lobHandler" property to LocalSessionFactoryBean, for driving ClobStringType
* added "evict", "saveOrUpdateCopy" and overloaded "delete" and "update" methods to HibernateTemplate
* changed the argument of JdoDialect's "flush" from Transaction to PersistenceManager
* JdoTransactionManager uses JdoDialect's "translateException" in case of flushing failure on commit

Package org.springframework.remoting
* made RemoteExporter's "serviceInterface" property required
* added skeleton class check to Hessian/BurlapServiceExporter, to make them work with both Hessian/Burlap 2.x and 3.x
* fixed exception handling in BurlapClientInterceptor

Package org.springframework.samples
* introduced Image Database sample application, illustrating LobHandler and HTTP multipart file uploads

Package org.springframework.transaction
* added propagation behaviors "REQUIRES_NEW", "NOT_SUPPORTED" and "NEVER" to TransactionDefinition
* refactored TransactionStatus into minimal interface, with DefaultTransactionStatus as default implementation
* rollback on Error in TransactionInterceptor, via DefaultTransactionAttribute's "rollbackOn" implementation
* added "readOnly" argument to TransactionSynchronization's "beforeCommit" method
* added ResourceHolderSupport class to package transaction.support, based on the former ExpiringObject util class
* reworked TransactionSynchronizationManager to move callback triggering to AbstractPlatformTransactionManager
* added support for transaction suspension (including synchronization) to AbstractPlatformTransactionManager
* added support for transaction suspension to JtaTransactionManager, via the JTA TransactionManager interface
* added JotmFactoryBean for exposing a JOTM instance (implementing UserTransaction and TransactionManager)
* added WebSphereTransactionManagerFactoryBean for exposing a WebSphere 4/5's JTA TransactionManager
* allow advisors for TransactionProxyFactoryBean's "preInterceptors" and "postInterceptors" properties
* removed AbstractTransactionAttributeSource, moved isMatch implementation to concrete subclasses

Package org.springframework.ui
* added VelocityEngineUtils utility class for convenient merging of a Velocity template with a model

Package org.springframework.util
* removed ObjectArrayUtils and ReflectionUtils

Package org.springframework.validation
* apply custom editor on Errors.getFieldValue to manually rejected field values too

Package org.springframework.web
* removed "getUrlToApplication" from WebUtils
* fixed check for existing "webAppRootProperty" in WebUtils to allow for same value on web app redeployment
* moved TagUtils helper class from package web.servlet.tags to web.util, renamed scope constants
* removed "publishWebApplicationContext" and "parseContextConfigLocation" from WebApplicationContextUtils
* moved ServletContextResource from package web.util to web.context.support
* removed Servlet 2.3 "getServletContextName" call from ServletContextResource, for Servlet 2.2 compatibility
* fixed ServletContextResource's "exists" check (to allow for relative directory paths e.g. in VelocityEngineFactory)
* added "getAlreadyFilteredAttributeName" method to OncePerRequestFilter, for custom identification of the filter
* renamed MultipartFile's "getOriginalFileName" method to "getOriginalFilename"
* allow for existing multipart request in DispatcherServlet even if MultipartResolver configured (for forwards)
* invoke HandlerInterceptor.afterCompletion even if a later HandlerInterceptor aborts processing
* pass request and response into HandlerExceptionResolver's "resolveException" method
* removed "setName" method from View interface, making AbstractView implement BeanNameAware instead
* added "contentType" propert to UrlBasedViewResolver, for setting the content type of all resolved views
* apply ContextResourceEditor to bean factories created by XmlViewResolver and ResourceBundleViewResolver
* refactored URL path matching into UrlPathHelper, used by AbstractUrlHandlerMapping and AbstractMethodNameResolver
* added "urlDecode" property to UrlPathHelper, for URL-decoding request URI and context path (if required)
* renamed FileNameViewController to UrlFilenameViewController
* removed deprecated "beanName" property from AbstractCommandController (use "commandName" instead)
* SimpleFormController's default "onSubmit" forwards to success view with full Errors model instead of just command
* turned AbstractWizardFormController's "getCurrentPage" method non-final, to be overridden if determined by request
* removed experimental ValidatableThrowawayController
* re-evaluate EL expressions on each tag rendering instead of on tag instance initialization in all Spring tags

Building
* replaced use-case-specific JARs with module-specific JARs (spring-core, spring-aop, spring-dao, spring-web, etc)
* added "xdoclet/xjavadoc.jar" to "release" target in the framework build script (needed for building with attributes)
* put Commons Attributes and XDoclet JARs in Ant classpath instead of expecting them in Ant's lib directory
* renamed all "ant.bat" files in the samples to "build.bat"
* added "build.bat" and "warfile.bat" files to "samples/jpetstore/attributes" directory
* added "build.bat" file to framework root


Changes in version 1.0 M4 (4.1.2003)
------------------------------------

Package org.springframework.aop
* moved auto proxy creator implementations into new org.springframework.aop.framework.autoproxy package
* introduced ProxyConfig base class for ProxyFactoryBean etc, specifying common AOP proxy settings
* introduced Before and Throws advice, in addition to interception Around advice
* replaced InvokerInterceptor and ProxyInterceptor interface by TargetSource interface
* removed "exposeInvocation" option in proxy factories
* significantly reduced overhead of AOP framework
* added aop.framework.adapter package to allow for new Advisor/advice types without changing the basic AOP framework

Package org.springframework.beans
* removed event propagation support in BeanWrapper
* added FileEditor to standard PropertyEditors, for creating java.io.File instances from String representations
* added URLEditor to standard PropertyEditors, for creating java.net.URL instances from String representations
* added "registerCustomEditor(Class, PropertyEditor)" convenience method to the BeanWrapper interface
* added "registerCustomEditor(Class, PropertyEditor)" method to the ConfigurableBeanFactory interface
* added "setParent" method to ConfigurableBeanFactory interface
* added "preInstantiateSingletons" method to ConfigurableListableBeanFactory interface
* added "containsBeanDefinition" method to ListableBeanFactory interface (same as in BeanDefinitionRegistry)
* introduced AutowireCapableBeanFactory interface, allowing for autowiring of externally managed bean instances
* dissolved PropertyValuesProviderFactoryBean interface and AbstractFactoryBean convenience base class
* fixed ManagedList and ManagedMap resolution for prototypes in AbstractBeanFactory
* fixed potential multithreading issue on nested prototype resolution in AbstractBeanFactory
* dependent beans (with corresponding "depends-on") are destroyed first in AbstractBeanFactory's "destroySingletons"
* consider arrays of primitive wrappers as "simple" properties in the sense of dependency-check="simple"
* added support for inner bean definitions, at the same level as bean references and values
* added generic autowire method to AutowireCapableBeanFactory, for guessing an appropriate autowiring strategy
* factored out bean definition format reading logic into Properties/Xml/JdbcBeanDefinitionReader
* added "beanClassLoader" property to AbstractBeanDefinitionReader, to override the thread context class loader
* removed bean definition reading methods in DefaultListableBeanFactory, reduced them in XmlBeanFactory
* added "allowBeanDefinitionOverriding" property in DefaultListableBeanFactory
* separated XML bean definition reading into XmlBeanDefinitionReader plus (Default)XmlDefinitionParser
* enabled more specific error messages on XML bean definition parse failures through use of location parameter
* added optional "description" element in XML bean definition documents to allow for user documentation
* added "default-lazy-init" attribute for XML bean definitions
* allow for "bean/"list"/"map"/"props" as sub-element of "list" and "entry" in XML bean definitions
* added two "beanOfType" convenience methods to BeanFactoryUtils
* added ListFactoryBean and MapFactoryBean to beans.factory.config

Package org.springframework.context
* ApplicationContext interface extends AutowireCapableBeanFactory
* removed ContextOptions support in ApplicationContext and AbstractApplicationContext
* moved ApplicationEventMulticaster interface to package context.event
* fixed "lazy-init" support in AbstractApplicationContext, delegating to the factory's "preInstantiateSingletons"
* reworked ApplicationContext's "InputStream getResourceAsStream" method into "Resource getResource"
* removed ApplicationContext's "getResourceBasePath" method, as its functionality is covered by the new "getResource"
* added support for pseudo URL prefix "classpath:" in AbstractApplicationContext's "getResource"
* added ContextResourceEditor to package context.config, for populating Resource bean properties via the context
* added ContextResourceFactoryBean, for configuring Resource instances via ApplicationContext's "getResource"
* added "getBeanFactory" method to ConfigurableApplicationContext, for access to the internal bean factory
* moved PropertyResourceConfigurer/PropertyOverrideConfigurer/PropertyPlaceholderConfigurer to beans.factory.config

Package org.springframework.core
* introduced Resource interface in core.io package, for specifying resource locations in a generic way
* added ClassPathResource, FileSystemResource, UrlResource, and InputStreamResource implementations
* added ResourceEditor for automatic conversion of Strings to bean properties of type Resource

Package org.springframework.ejb
* SimpleRemoteSlsbInvokerInterceptor/SimpleRemoteStatelessSessionProxyFactoryBean support non-RMI business interfaces
* SimpleRemoteSlsbInvokerInterceptor/SimpleRemoteStatelessSessionProxyFactoryBean's "inContainer" default set to false
* support for multiple paths as "BeanFactoryPath" in XmlBeanFactoryLoader, separated by any number of commas or spaces

Package org.springframework.jdbc
* moved JDBC-specific DataAccessException subclasses from jdbc.core to root jdbc package
* moved SQLExceptionTranslator interface plus implementations from package jdbc.core to jdbc.support
* moved DataFieldMaxValueIncrementer interface plus implementations from jdbc.core.support to jdbc.support.incrementer
* reworked QueryExecutor interface into NativeJdbcExtractor in package jdbc.support
* reworked CommonsDbcpQueryExecutor implementation into CommonsDbcpNativeJdbcExtractor for DBCP 1.1
* added JBossNativeJdbcExtractor for the JBoss 3.2 connection pool
* added SimpleNativeJdbcExtractor for any pools that just wrap Connections but not Statements
* introduced LobHandler and BlobCreator interfaces in package jdbc.support.lob
* added DefaultLobHandler for any standard JDBC compliant driver
* added OracleLobHandler implementation for the peculiar requirements of Oracle's JDBC driver
* added DatabaseStartupValidator that allows to defer the initialization of database-dependent components
* removed setExceptionTranslator from RdbmsOperation, set an appropriately configured JdbcTemplate instead

Package org.springframework.orm
* introduced support for iBATIS Database Layer, in package org.springframework.orm.ibatis
* added "get" and "lock" convenience methods to HibernateTemplate
* added OpenSessionInViewInterceptor and OpenSessionInViewFilter to org.springframework.orm.hibernate.support
* LocalSessionFactoryBean's "executeSchemaUpdate" uses plain executeUpdate calls now instead of a batch
* changed type of LocalPersistenceManagerFactoryBean's "configLocation" property from String to Resource

Package org.springframework.remoting
* reworked RemoteProxySupport into RemoteAccessor plus UrlBasedRemoteAccessor
* removed AuthorizableRemoteProxyFactorySupport, deferred authorization properties to concrete implementations
* RmiClientInterceptor/RmiProxyFactoryBean and RmiServiceExporter can work with conventional RMI services
* RmiClientInterceptor/RmiProxyFactoryBean supports non-RMI business interfaces for conventional RMI services
* renamed RmiServiceExporter's "name" to "serviceName" and "port" to "registryPort"
* added "servicePort" property to RmiServiceExporter, for specifying the port that the exported object uses
* introduced JAX-RPC service and port access classes in org.springframework.remoting.jaxrpc
* added ServletEndpointSupport classes for implementing JAX-RPC-based services that access a Spring context

Package org.springframework.samples
* introduced JPetStore sample application, an adapted version of Clinton Begin's JPetStore
* added "jdbc.properties" file with PropertyPlaceholderConfigurer in Petclinic and JPetStore
* commented out "resource-ref" entries in Petclinic, Countries, and JPetStore for simpler deployment
* removed support for JBoss' internal HSQL instance from Petclinic and Countries, for simpler deployment

Package org.springframework.transaction
* reworked transaction synchronization, allowing for synchronization even on "empty" transactions
* removed TransactionProxyFactoryBean's "proxyInterfacesOnly" property in favour of ProxyConfig's "proxyTargetClass"
* TransactionInterceptor now keeps TransactionStatus in its own ThreadLocal, not MethodInvocation
* merged TransactionFactoryProxyBean's parsing into NameMatchTransactionAttributeSource
* added TransactionAttributeSourceTransactionAroundAdvisor to allow pointcut to be used for transaction interception

Package org.springframework.ui
* replaced "appRootMarker" mechanism in VelocityEngineFactory with "resourceLoaderPath" property

Package org.springframework.validation
* removed event propagation support in DataBinder
* added "getValuesForProperty" and "toCodeForProperty" methods to Constants helper class

Package org.springframework.web
* added attribute-driven Controller mapping, in org.springframework.web.servlet.handler.metadata package
* added "getOrCreateSessionAttribute" helper method to WebUtils, for on-demand state objects in a web tier
* introduced GenericFilterBean and OncePerRequestFilter base classes in package org.springframework.web.filter
* reworked MultipartFilter to extend GenericFilterBean/OncePerRequestFilter
* added "isEmpty" method to MultipartFile interface, for checking whether a file has been chosen in a multipart form
* renamed CommonsMultipartResolver's "maximumFileSize"/"maximumInMemorySize" to "maxUploadSize"/"maxInMemorySize"
* renamed CosMultipartResolver's "maximumFileSize" to "maxUploadSize"
* reworked CommonsMultipartResolver's/CosMultipartResolver's "uploadTempDir" from String to core.io.Resource
* fixed multipart cleanup with a local MultipartResolver in DispatcherServlet
* added "getRequiredWebApplicationContext" method to WebApplicationContextUtils
* dissolved support for exposing "config" objects as ServletContext attributes
* introduced ConfigurableWebApplicationContext configuration interface instead of constructor requirements
* reworked initialization workflow of XmlWebApplicationContext and StaticWebApplicationContext
* allowed for overriding context creation in ContextLoader (now a full object) and FrameworkServlet
* added "contextConfigLocation" property to FrameworkServlet, analogous to ContextLoader's
* DispatcherServlet's default exception handling lets RuntimeExceptions straight through
* HandlerMappings, HandlerInterceptors, ViewResolvers, and Views are allowed to throw any Exception
* allowed for on-demand fetching of prototype handlers in SimpleUrlHandlerMapping and BeanNameUrlHandlerMapping
* removed UrlHandlerAware support in AbstractUrlHandlerMapping
* added ModelAndView argument to HandlerInterceptor's "postHandle" method, for exposing additional model objects
* added "afterCompletion" method to HandlerInterceptor, invoked on any outcome for proper resource cleanup
* added HandlerInterceptorAdapter for simplified implementation of pre-only/post-only interceptors
* changed ServletExceptions in RequestContextUtils to IllegalStateExceptions
* InternalResourceViewResolver and XmlViewResolver override getCacheKey for more efficient non-locale-aware caching
* moved SimpleMappingExceptionResolver from package org.springframework.web.servlet.support to web.servlet.handler
* added "defaultErrorView" property to SimpleMappingExceptionResolver
* moved UserRoleAuthorizationInterceptor from package org.springframework.web.servlet.support to web.servlet.handler
* moved WebContentGenerator from package org.springframework.web.servlet.mvc to web.servlet.support
* introduced WebContentInterceptor for applying request/response checks and preparations to a set of controllers
* MultiActionController extends AbstractController, for applying checks and preparation to all handle methods
* AbstractWizardFormController overrides "handleInvalidSubmit" to show the initial page of a new wizard form
* added additional "referenceData(request,page)" method to AbstractWizardFormController
* added additional "getTargetPage(request,command,errors,currentPage)" method to AbstractWizardFormController
* introduced ThrowawayController and ValidatableThrowawayController for WebWork/Maverick-style controllers
* added AbstractUrlBasedView and UrlBasedViewResolver base classes, for consistent handling of view URLs
* renamed VelocityView's "templateName" property to "url" for consistency, deriving from AbstractUrlBasedView now
* added VelocityViewResolver convenience class, deriving from UrlBasedViewResolver
* removed "exposeDateFormatter" and "exposeCurrencyFormatter" properties in VelocityView
* added "dateToolAttribute" to VelocityView, for exposing a locale-aware DateTool (from Velocity Tools 1.0)
* renamed org.springframework.web.servlet.view.velocity.VelocityConfiguration to VelocityConfig

New package org.springframework.metadata plus supporting packages
* providing a facade to source-level and other attribute metadata
* integration with Jakarta Commons Attributes as default backend implementation
* added metadata-driven autoproxying to allow for .NET-style attribute-driven declarative services
See the org.springframework.aop.framework.autoproxy.metadata package for tests illustrating this,
using Commons Attributes to drive declarative transaction management, pooling, and other services.


Changes in version 1.0 M3 (25.11.2003)
--------------------------------------

Package org.springframework.aop
* major AOP API changes: see changes-M2-M3.txt for further details
* added "targetClass" argument to StaticMethodPointcut.applies()
* CGLIB proxies support introductions now
* can force CGLIB proxying using new "proxyTargetClass" property on DefaultProxyConfig
* introduced various invoker interceptors like Prototype-, CommonsPooling-, and ThreadLocalInvokerInterceptor

Package org.springframework.beans
* fixed empty-value-on-primitive-property check in BeanWrapperImpl to allow a custom editor to modify the value first
* added support for indexed and mapped properties to BeanWrapperImpl, with "beanName.indexedProperty[index]" syntax
* log value when setting property value in case of simple properties, at debug lebel
* ClassEditor and other framework classes use the thread context class loader now, consistent within the framework
* introduced "containsBean" method in BeanFactory, checking for the existence of a bean without creating it
* BeanFactory's "isSingleton" method now checks singleton status of created object in case of a FactoryBean
* introduced "getBeansOfType" method in ListableBeanFactory, retrieving both normal beans and FactoryBean-created beans
* introduced "getObjectType" method in FactoryBean, to avoid unnecessary bean creation on autowire checks
* reworked BeanFactoryUtils' "beanNamesIncludingAncestors" and "beansOfTypeIncludingAncestors" methods
* added "beanOfTypeIncludingAncestors" method to BeanFactoryUtils, expecting a single matching bean
* introduced FactoryBeanCircularReferenceException and refined circular reference handling with a FactoryBean involved
* introduced BeanNameAware interface to be implemented by beans that want to be aware of their bean factory name
* introduced ConfigurableBeanFactory and ConfigurableListableBeanFactory interfaces in beans.factory.config package
* reworked BeanPostProcessor and BeanFactoryPostProcessor interfaces and moved them to beans.factory.config package
* renamed ListableBeanFactoryImpl to DefaultListableBeanFactory, reflecting its role in the reworked factory hierarchy
* reworked AbstractBeanDefinition/RootBeanDefinition/ChildBeanDefinition, introduced "validate" method
* check for invalid bean definitions: "lazy-init" attribute and FactoryBean classes only allowed for singletons
* fixed RootBeanDefinition bug that caused an unnecessary additional invocation of the constructor of the defined bean
* added support for lazy initialization of singleton beans in AbstractBeanFactory and subclasses
* redefined autowiring to ignore if no matching bean found but still complain in case of more than one matching bean
* ignore specified dependency types on autowiring, like BeanFactory and ApplicationContext
* added ConstructorArgumentValues support to RootBeanDefinition, for resolving arguments to specific beans or values
* added autowire="constructor" mode for PicoContainer-style Type 3 IoC, resolving constructor arguments by type
* made "id" attribute of "bean" tag in XML bean definition format optional, using the first given name as primary name
* allow for "bean" tags with neither "id" nor "name", using the bean class name as implicit id (PicoContainer-style)
* added "lazy-init" attribute to "bean" tag in XML bean definition format, default being "false"
* added "depends-on" attribute to "bean" tag in XML format, expressing initialization dependencies on other beans
* added "constructor-arg" tag to "bean" tag in XML format, analogous to "property" tag, with optional "index" attribute
* added "default-dependency-check" and "default-autowire" attributes to root tag in XML bean definitions
* reworked PropertiesFactoryBean to allow for loaded and local properties and moved into beans.factory.config package
* added CommonsLogFactoryBean to beans.factory.config package, for setting up shared Log instances
* added MethodInvocationFactoryBean to beans.factory.config package, for exposing an object from any static method call

Package org.springframework.context
* split ApplicationContext interface into ApplicationContext client interface and ConfigurableApplicationContext SPI
* ApplicationContextException extends BeansException, to enable consistent catching of exceptions thrown by a context
* ApplicationContextAware and ApplicationObjectSupport throw BeansException now instead of ApplicationContextException
* moved ResourcePropertiesFactoryBean to beans.factory.config package
* added "ignoreResourceNotFound" property to PropertyResourceConfigurer, default is "false" (throwing an exception)
* added support for placeholders in bean reference names to PropertyPlaceholderConfigurer
* added support for cross-referencing placeholders in placeholder values to PropertyPlaceholderConfigurer

Package org.springframework.jdbc
* added setter methods for data access templates and convenience methods for resource opening/closing to JdbcDaoSupport
* refactored JDBC core package so that SQLErrorCodeExceptionTranslator can be subclassed by and passed into JdbcTemplate
* refactored JDBC object package so that one JdbcTemplate can be used to configure multiple RdbmsOperations
* reworked JdbcBeanFactory to extend DefaultListableBeanFactory instead of using a refreshable delegate

Package org.springframework.mail
* added "port" bean property to JavaMailSenderImpl, for setting a non-default mail server port
* added "session" bean property to JavaMailSenderImpl, for setting a custom JavaMail Session (possibly pulled from JNDI)

Package org.springframework.orm
* added setter methods for data access templates to HibernateDaoSupport/JdoDaoSupport
* added convenience methods for resource opening/closing to HibernateDaoSupport/JdoDaoSupport
* reworked HibernateAccessor/HibernateTemplate/HibernateInterceptor flush handling
* throw HibernateObjectRetrievalFailedException on Hibernate's ObjectDeletedException
* added "mappingResourceJars" property to LocalSessionFactoryBean, allowing to load mapping resources from jar files
* added "jdbcExceptionTranslator" property to HibernateTemplate, allowing to set a SQLExceptionTranslator for SQL ex's
* added "jdbcExceptionTranslator" property to HibernateTransactionManager, applied to flushing failures on commit
* added "jdbcExceptionTranslator" parameter to SessionFactoryUtils.getSession, applied to transaction synchronizations
* added "save(entity, id)" convenience method to HibernateTemplate
* introduced JdoAccessor as common base class for JdoTemplate and JdoInterceptor
* introduced JdoDialect interface with getJdbcConnection and flush methods
* added support for JdoDialect in JdoTransactionManager and JdoAccessor/JdoTemplate/JdoInterceptor

Package org.springframework.samples
* switched Countries and Petclinic to auto-detection of spring.tld in META-INF of spring.jar
* switched Countries and Petclinic to ContextLoaderServlet for maximum compatibility
* Tiles Example uses package org.springframework.samples.tiles now
* added warfile.bat, readme.txt, and redirecting index.jsp to Tiles Example

Package org.springframework.transaction
* moved commit exception handling from concrete implementations up to the generic AbstractPlatformTransactionManager
* added "rollbackOnCommitFailure" bean property to AbstractPlatformTransactionManager
* added "cleanupAfterCompletion" template method to AbstractPlatformTransactionManager
* reworked commit exception handling in HibernateTransactionManager and JdoTransactionManager
* reworked cleanup code in DataSourceTransactionManager/HibernateTransactionManager/JdoTransactionManager
* fixed PROPAGATION_SUPPORTS handling in DataSourceTransactionManager/HibernateTransactionManager/JdoTransactionManager
* added "cacheUserTransaction" property to JtaTransactionManager, caching the looked-up UserTransaction by default
* dissolved ThreadObjectManager and put resource binding (for JDBC/JDO/Hibernate) in TransactionSynchronizationManager
* added transaction synchronization support for JDBC and JDO to always return the same resources in a JTA transaction

Package org.springframework.ui
* reworked VelocityEngineFactory to allow VelocityEngineFactoryBean to run outside of application context

Package org.springframework.util
* reworked ClassLoaderUtils' "getResourceAsStream" to load from the class path root with or without leading slash
* "PagedListHolder" and its contained "MutableSortDefinition" implement Serializable now, for distributed sessions
* added convenience methods "previousPage" and "nextPage" to PagedListHolder

Package org.springframework.web
* reworked DataBinder and ServletRequestDataBinder to contain a BindException instead of derive from it
* interfaces HandlerAdapter, HandlerMapping, and ViewResolver do not require ApplicationContextAware anymore
* interface View does not require addStaticAttribute and getName methods anymore
* HandlerAdapter and Controller can throw any Exception now, instead of just ServletException and IOException
* introduced HandlerExceptionResolver interface, for resolution of specific exceptions to error page ModelAndViews
* added SimplerMappingExceptionResolver implementation, for mapping exception class names/messages to view names
* introduced ModelAndViewDefiningException, to be thrown during handler processing to forward to a specific error page
* renamed BaseCommandController's "setBeanName" method to "setCommandName", keeping "setBeanName" deprecated
* renamed BaseCommandController's "userObject" method to "getCommand"
* check both ".x" and ".y" as submit image suffixes in AbstractWizardFormController
* moved FileNameViewController from Tiles Example to package org.springframework.web.servlet.mvc
* view bean factories of XmlViewResolver and ResourceBundleViewResolver are now children of the application context
* added "attributesMap" property to AbstractView, for setting attribute values like bean references via a Map
* renamed InternalResourceView's "exposeModelsAsRequestAttributes" method to "exposeModelAsRequestAttributes"
* if in included request, examine the include paths for handler mappings instead of the original request paths
* if already in included request, perform another include instead of forward in InternalResourceView
* fixed potential NPE in debug log statement of VelocityView
* added taglib URI "http://www.springframework.org/tags" for auto-detection of spring.tld in META-INF of spring.jar


Changes in version 1.0 M2 (23.10.2003)
--------------------------------------
* added optional dependency checking for bean factories, ensuring that all bean properties have been set before use
* added non-default "autowire" functionality so that bean factories can optionally configure dependencies automatically
* added PropertyValuesProviderFactoryBean instead of having getPropertyValues() in the FactoryBean interface
* added BeanPostProcessor interface and support for it in AbstractBeanFactory and AbstractApplicationContext
* moved BeanFactoryPostProcessor from context.support to beans.factory.support package
* reworked AbstractBeanFactory's circular reference detection into eager singleton caching
* redefined XmlBeanFactory "ref" tag: "local" for local bean ids, "bean" for any bean name ("external" deprecated now)
* reworked XmlBeanFactory's alias handling to allow for multiple aliases in the "name" attribute of the bean tag
* allowed nested maps in XML bean definitions, i.e. a "map" tag as child of an "entry" tag of a surrounding "map" tag
* reworked AopUtils and AOP ProxyFactory configuration options
* introduced auto proxy creator classes in org.springframework.aop.framework.support, implementing BeanPostProcessor
* restructured org.springframework.context.support package into support, event, and config packages
* removed "shared object" support in ApplicationContext as part of API simplification
* reworked AbstractXmlApplicationContext's "getInputStreamForBeanFactory" into "loadBeanDefinitions(BeanFactory)"
* added support for multiple file paths in FileSystemXmlApplicationContext and ClassPathXmlApplicationContext
* added support for multiple basenames in a ResourceBundleMessageSource, getting checked sequentially
* introduced MessageSourceAccessor helper class for easy message access, available via ApplicationObjectSupport
* reworked PropertyResourceConfigurer into PropertyOverrideConfigurer and PropertyPlaceholderConfigurer
* introduced generic mail infrastructure in org.springframework.mail package, around the MailSender interface
* introduced JavaMailSender and JavaMailSenderImpl in org.springframework.mail.javamail package
* introduced CosMailSenderImpl in org.springframework.mail.cos, using the MailMessage class from Jason Hunter's COS
* added preInterceptors/postInterceptors support to TransactionProxyFactoryBean
* added support for returning result sets from a stored procedure
* allow HibernateCallback to throw SQLException on direct JDBC access
* refined data access exceptions with new ORM-specific and additional Hibernate-specific subclasses
* reworked Hessian/Burlap/RMI remoting proxies into interceptors with proxy factory bean subclasses
* reworked (Authorizable)RemoteProxyFactoryBean into (Authorizable)RemoteProxySupport
* introduced generic multipart handling aka file upload in org.springframework.web.multipart
* introduced multipart implementation for Jakarta Commons FileUpload
* introduced multipart implementation for Jason Hunter's COS (com.oreilly.servlet)
* added support for multiple file paths in XmlWebApplicationContext's "contextConfigLocation" context-param
* added support for automatic multipart resolution to DispatcherServlet
* fixed context/servlet path detection in WebUtils and AbstractUrlHandlerMapping
* moved LastModified interface to org.springframework.web.servlet.mvc
* reworked DispatcherServlet's revalidation support to leverage HttpServlet.getLastModified
* added "synchronizeOnSession" support to AbstractController, available to all command and form controllers
* renamed AbstractFormController's "processSubmit" method to "processFormSubmission"
* added overloaded "getInitialPage(request,command)" method to AbstractWizardFormController
* added spring:transform tag, providing support for transforming reference data
* refactored Velocity support into generic VelocityEngineFactory and web-specific VelocityConfigurer for views
* Velocity support in web framework uses VelocityEngine now to allow for different Velocity configs in same web app
* fixed TilesView content type handling
* added tiles-example showing how to use Tiles in conjunction with Spring
* added documentation on tags in docs/taglib
* added build scripts and directory structure to webapp-minimal skeleton to allow use as a kickstart for user projects
* combined webapp-typical/hibernate/aop skeletons into one single webapp-typical with multiple context definitions
* introduced alternative Hibernate implementation of Petclinic, now shipping as the default configuration


Changes in version 1.0 M1 (30.8.2003)
-------------------------------------
* changed package structure from com.interface21 to org.springframework
* revised distribution jar files (spring-beans, spring-context, spring-jdbc, spring)
* introduced DisposableBean interface
* introduced "destroy-method" attribute for XML bean definitions
* support for CSV as XML bean "name" to be able to define multiple aliases
* revised bean factory exception messages to include line numbers
* fixed typeMismatch reporting for nested bean properties
* added PropertiesFactoryBean as alternative to properties file loading
* added getValues and toCode methods to Constants utility class
* DynamicMethodPointcut now takes method, args and AttributeRegistry arguments instead of MethodInvocation
* JndiObjectFactoryBean does not prepend container prefix if scheme is given
* fixed Statement and ResultSet handling to work for all kinds of JDBC drivers
* dissolved ReadOnlyResultSet to make JdbcTemplate return the underlying ResultSet
* removed getSql method from PreparedStatementCreator interface
* introduced QueryExecutor interface for retrieval of underlying driver ResultSets
* added CommonsDbcpQueryExecutor implementation for Jakarta Commons DBCP
* revised RdbmsOperation hierarchy to allow for all of JdbcTemplate's options
* SingleConnectionDataSource implements DisposableBean
* SingleConnectionDataSource does not override auto-commit anymore
* renamed XxxExtracter to XxxExtractor and XxxTranslater to XxxTranslator
* support for returning Types.ARRAY from stored procedure
* LocalSessionFactoryBean implements DisposableBean
* added HibernateTemplate.deleteAll for batch deletes
* support for overlapping method name patterns in transaction attribute source definitions
* support for specifying timeouts via TransactionAttributeEditor
* added TransactionProxyFactoryBean for simplified transaction proxies
* removed support for non-transactional execution from AbstractPlatformTransactionManager
* added support for transaction timeouts via JDBC statement timeouts to DataSourceTransactionManager
* added support for transaction timeouts via Hibernate query timeouts to HibernateTransactionManager
* fixed RMI registry detection in RmiServiceExporter
* fixed custom editor usage for rejected field values
* introduced WebApplicationObjectSupport convenience base class
* refined cache control options in WebContentGenerator
* revised initHandler method in AbstractUrlHandlerMapping
* added "urlMap" property to SimpleUrlHandlerMapping
* revised exception behavior of RequestContext and BindErrorsTag
* re-added deprecated ContextLoaderServlet for Servlet 2.2 containers
* refactored Log4jConfigListener into Log4jWebConfigurer and listener
* introduced deprecated Log4jConfigServlet for Servlet 2.2 containers
* introduced Tiles support through TilesView and TilesConfigurer
* introduced support for Spring-aware Tiles component controller
* added customization in AbstractPdfView


Changes in version 0.9.1 (8.8.2003)
-----------------------------------
* revised distribution jar files (spring-beans, spring-jdbc, spring-full)
* fixed error logging in XmlBeanFactory
* support for XML bean definition includes via XML entities
* Spring bean definition DTD allows map entries to be lists now
* introduced "init-method" attribute for XML bean definitions
* new BeanFactoryPostProcessor hook to override bean definition values
* revised PropertyResourceConfigurer based on BeanFactoryPostProcessor
* revised simple JNDI implementation
* support for execution context in SqlQuery hierarchy
* eager initialization of exception translator in JdbcTemplate
* fixed StoredProcedure transaction participation
* moved DataSourceTransactionManager to jdbc.datasource package
* revised JDO LocalPersistenceManagerFactoryBean with bean-defined settings
* revised Hibernate LocalSessionFactoryBean with bean-defined settings
* ability to use Spring-configured DataSource for Hibernate
* support for Hibernate entity interceptors
* fixed Hibernate transaction exception logging
* new HibernateTemplate convenience methods for single-step actions
* new convenience base classes for JDBC/Hibernate/JDO DAOs
* support for read-only transactions
* revised TransactionInterceptor configuration options
* TransactionInterceptor does not have a default strategy anymore
* updated AOP framework to current AOP Alliance interfaces
* optional CGLIB support in the AOP framework (to proxy classes as well as interfaces)
* distinction between static and dynamic method pointcuts
* new regular expression pointcut
* revised EJB support classes with BeanFactory access
* new BindInitializer support in BindUtils
* revised VelocityConfigurer with bean-defined settings
* support for Ant-style path matching in the web framework
* support for JSP expression language in tag implementations
* recommended "spring:" as tag prefix instead of "i21:"
* turned sample "PagedList" into full-fledged "Countries"
* new Petclinic tutorial
* new MVC-step-by-step tutorial
* new article "The Spring Framework - A Lightweight Container"
* new article "Container Resources vs Local Resources"


Changes in version 0.9 (25.6.2003)
----------------------------------
* first public release since the version that came with the book "Expert One-on-One J2EE Design and Development"
* following various unofficial 0.8 CVS snapshots
* general tightening and polishing
* log via Commons Logging
* Log4J configuration support
* revised bean definition XML format with DTD
* support for lists, maps, and props in XML bean definitions
* support for hierarchical bean factories
* support for custom property editors
* various new out-of-the-box editors for dates, numbers, etc
* new FactoryBean interface instead of custom bean definitions
* FactoryBean-based resource definitions for JDBC DataSource etc
* revised simple DataSource implementations
* new JDBC error code exception translater
* new DataFieldMaxValueIncrementer support for JDBC
* new generic transaction management
* new JDO support: resource definition, transaction strategy, template, interceptor
* new Hibernate support: resource definition, transaction strategy, template, interceptor
* new support for remoting via Hessian and Burlap
* new AOP framework aligned with AOP Alliance
* revised EJB access classes based on AOP
* resource access from application contexts
* support for MessageSourceResolvable
* revised validation framework
* support for global validation errors
* revised web framework
* refactored form controller hierarchy
* new handler interception mechanism
* locale and theme resolution
* support for HTML escaping
* revised JSP tag implementations
* new sample application "Petclinic"
* new sample application "PagedList"
* application skeletons as configuration showcases
* MutableSortDefinition accepts now NO_CHANGE for setProperty and does nothing in this case
* (many new convenience classes and methods)
* (too many minor improvements to list)
* (lots of minor bugfixes)

