지난 10월 30일에 Spring Framewrk 2.5.6버전이 릴리즈 되었다.
지금 내가 하고 있는 프로젝트는 Spring 2.5.5를 기반으로 개발하고 있는데, 현재 개발자 테스트를 시작하고 있는 중이다. 프로젝트 종료가 올해말로 예정되어 있기 때문에 현재 구성되어 있는 개발 환경을 바꾸지 않고 올해 말까지 진행 하기로 하였다. 

그래도 변경된 부분을 살펴봐야 하기에 로그를 살펴 보았는데, 여느때 보다는 수정된 목록들의 개수가 적었다. 그 만큼 많은 부분들이 안정되어 간다는 말일 거다.

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 EclipseLink 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 supported for matching FactoryBean itself

Package org.springframework.beans
* BeanUtils skips conventional editor check for array classes (in order to not break 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 BeanDefinitionDecorators as well
* BeanDefinition objects are considered equal even if their originating resource objects are different
* AbstractFactoryBean's early singleton proxy handles equals, hashCode and toString 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 interface
* fixed corner case in AbstractBeanDefinition where a ClassCastException could arise in "getBeanClass(Name)"
* DefaultSingletonBeanRegistry eagerly cleans up cached dependency information when destroying a bean
* AbstractBeanFactory rejects getBean request with arguments in case of a pre-existing 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 identity
* factored out "createBeanDefinition" template method in BeanDefinitionParserDelegate
* turned visibility of BeanDefinitionParserDelegate's "checkNameUniqueness" method to protected
* XML list/set/map elements (in both the beans and the util namespace) support nested description element

Package org.springframework.cache
* EhCacheFactoryBean obtains decorated Ehcache instead of raw Cache, honoring pre-configured cache decorators
* removed useless "diskStorePath" property from EhCacheFactoryBean (ignored by all 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 resource 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 silently 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 file (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 to invoke subsequent interceptors as well

Package org.springframework.instrument
* ShadowingClassLoader excludes "net.sf.cglib." package from shadowing by default

Package org.springframework.jdbc
* provided Jdbc4SqlXmlHandler as default implementation of the SqlXmlHandler interface
* 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", with default codes for DB2 and Sybase
* SQLErrorCodeSQLExceptionTranslator applies default SQLExceptionSubclassTranslator after error code translation only
* SQLErrorCodeSQLExceptionTranslator is able to work without fallback SQLState translation as well
* SQLExceptionSubclassTranslator translates SQLFeatureNotSupportedException to InvalidDataAccessApiUsageException
* SQLStateSQLExceptionTranslator returns TransientDataAccessResourceException for well-known vendor-specific SQL states
* factored out AbstractFallbackSQLExceptionTranslator base class for consistent "fallbackTranslator" capabilities
* CallableStatementCreatorFactory strictly honors "SqlParameter.isInputValueProvided" (allowing for statement caching)
* JdbcTemplate passes full Calendar argument to JDBC driver even in case of no SQL type specified
* JdbcTemplate does not call the costly "Statement.getWarnings()" unless ignoreWarnings=false or debug logging is on
* added "checkFullyPopulated" setting to BeanPropertyRowMapper, for validating that all bean properties have been mapped

Package org.springframework.jms
* JmsException message and logged JMSException message explicitly includes linked exception now if not already contained
* SingleConnectionFactory only calls "Connection.stop()" on reset when the shared Connection has actually been started
* SingleConnectionFactory explicitly creates Queue/TopicConnection when first call is createQueue/TopicConnection method
* CachingConnectionFactory explicitly creates Queue/TopicSession when first call is createQueue/TopicConnection method
* CachingConnectionFactory's JMS Session proxies implement SessionProxy interface, 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 close
* CachingConnectionFactory's cached producers pass on "disableMessageID" and "disableMessageTimestamp" properties
* CachingConnectionFactory also caches MessageConsumers (controlled through "cacheConsumers" property)
* AbstractJmsListeningContainer eagerly clears shared JMS Connection after releasing, avoiding repeated close exceptions
* revised DefaultMessageListenerContainer to correctly work with non-JMS transaction manager and CACHE_CONNECTION level
* DefaultMessageListenerContainer supports a stop notification callback for unlimited maxMessagesPerTask as well now
* introduced SubscriptionNameProvider interface for message listener objects suggesting default subscription names
* "jms:listener-container" uses actual message listener object's class name as default 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 NotificationListenerRegistar, allowing for JMX env entries
* added "refreshOnConnectFailure" property to MBeanClientInterceptor, allowing for 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 standard JNDI provider exposed inbetween

Package org.springframework.orm
* HibernateTemplate detects Spring-managed transactional Session even with SessionFactory proxy and allowCreate=false
* HibernateTemplate's "loadAll" operation selects distinct root entities (avoiding duplicate entries in result list)
* HibernateTemplate translates Hibernate's DataException into a Spring DataIntegrityViolationException (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 Hibernate Session (for Seam compatibility)
* added "persistenceXmlLocation" property to DefaultPersistenceUnitManager, as alternative to "persistenceXmlLocations"
* @PersistenceContext of type TRANSACTION allows returned Query objects to be parameterized 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 custom AOP interceptors before the endpoint
* RmiClientInterceptor always logs connect failure at warn level, even when debug logging (incl. stacktrace) is active
* JndiRmiClientInterceptor skips narrowing for RmiInvocationHandler stubs (fixing 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 LocaleContextHolder 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 SchedulerContextAware on a given JobFactory
* SchedulerFactoryBean uses bean name as default scheduler name (when "schedulerName" property not explicitly specified)
* SchedulerFactoryBean does not accept a pre-registered Scheduler instance in the Quartz SchedulerRepository anymore
* SchedulerFactoryBean does not expose the Spring-created/managed Scheduler to the 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 that lead to termination of execution

Package org.springframework.test
* SpringJUnit4ClassRunner skips execution of test classes with non-matching @IfProfileValue annotation completely

Package org.springframework.transaction
* AbstractPlatformTransactionManager resumes after any kind of inner begin failure (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 being empty
* "StringUtils.cleanPath" preserves leading slash if given in original path
* "FileSystemUtils.copyRecursively" ignores 'special' files (i.e. neither a regular file nor a directory)

Package org.springframework.web
* HttpRequestHandlerServlet propagates HTTP request locale into Spring's LocaleContextHolder
* revised "WebUtils.extractFilenameFromUrlPath" to search actual URI part only even 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 "ExternalContext.getRequestParameterValuesMap"
* PortletContextResource cleans given path (analogous to ServletContextResource)
* Servlet/PortletContextResource accept path with leading "/../" part as well (as accepted by most servlet containers)
* DispatcherServlet removes error-view-driven servlet request attributes after rendering (for Tomcat compatibility)
* exposed "getParamName()" method on LocaleChangeInterceptor and ThemeChangeInterceptor
* added "cacheSecondsForSessionAttributeHandlers" property to Servlet/Portlet AnnotationMethodHandlerAdapter
* AnnotationMethodHandlerAdapter exposes special ModelMap that removes BindingResult if target attribute gets replaced
* Servlet AnnotationMethodHandlerAdapter always takes first exact @RequestMapping path match as best path match
* @MVC handler methods, model attribute methods and init binder methods allow for 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 descriptive exception if incompatible
* Portlet AbstractCommandController falls back to lazy command creation if session 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 (analogous to the standard VelocityViewServlet)
* revised XsltView to specify full resource URI as StreamSource system id, for properly resolving relative paths
* officially deprecated AbstractXsltView in favor of XsltView and its more flexible "locateSource" mechanism
* revised error logging during XSLT processing to properly log compilation errors before an eventual fatal exception
* moved internal TransformerUtils helper class to generic "org.springframework.util.xml" package





Posted by 행복상자