mirror of
https://github.com/spring-projects/spring-framework
synced 2026-06-08 17:33:33 +00:00
d5f16204fc
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener). These URLs were unable to be fixed. Please review them to see if they can be manually resolved. * [ ] http://dbunit.sourceforge.net/ (200) with 1 occurrences could not be migrated: ([https](https://dbunit.sourceforge.net/) result AnnotatedConnectException). * [ ] http://grinder.sourceforge.net/ (200) with 1 occurrences could not be migrated: ([https](https://grinder.sourceforge.net/) result AnnotatedConnectException). * [ ] http://jasperreports.sourceforge.net (200) with 1 occurrences could not be migrated: ([https](https://jasperreports.sourceforge.net) result AnnotatedConnectException). * [ ] http://jibx.sourceforge.net/ (200) with 1 occurrences could not be migrated: ([https](https://jibx.sourceforge.net/) result AnnotatedConnectException). * [ ] http://joda-time.sourceforge.net (200) with 1 occurrences could not be migrated: ([https](https://joda-time.sourceforge.net) result AnnotatedConnectException). * [ ] http://jotm.objectweb.org/ (200) with 1 occurrences could not be migrated: ([https](https://jotm.objectweb.org/) result NotSslRecordException). * [ ] http://mx4j.sourceforge.net (200) with 1 occurrences could not be migrated: ([https](https://mx4j.sourceforge.net) result AnnotatedConnectException). * [ ] http://mx4j.sourceforge.net/ (200) with 1 occurrences could not be migrated: ([https](https://mx4j.sourceforge.net/) result AnnotatedConnectException). * [ ] http://schemas.xmlsoap.org/soap/encoding/ (200) with 1 occurrences could not be migrated: ([https](https://schemas.xmlsoap.org/soap/encoding/) result AnnotatedConnectException). * [ ] http://www.beanshell.org/ (200) with 1 occurrences could not be migrated: ([https](https://www.beanshell.org/) result SSLHandshakeException). * [ ] http://www.caucho.com/resin-3.0/xml/jaxp.xtp (200) with 2 occurrences could not be migrated: ([https](https://www.caucho.com/resin-3.0/xml/jaxp.xtp) result SSLHandshakeException). * [ ] http://www.datanucleus.org/ (200) with 2 occurrences could not be migrated: ([https](https://www.datanucleus.org/) result AnnotatedConnectException). * [ ] http://www.hsqldb.org (200) with 1 occurrences could not be migrated: ([https](https://www.hsqldb.org) result SSLHandshakeException). * [ ] http://www.mockobjects.com (200) with 1 occurrences could not be migrated: ([https](https://www.mockobjects.com) result ClosedChannelException). * [ ] http://www.mockobjects.com/ (200) with 1 occurrences could not be migrated: ([https](https://www.mockobjects.com/) result ClosedChannelException). * [ ] http://www.easymock.org (301) with 1 occurrences could not be migrated: ([https](https://www.easymock.org) result SSLHandshakeException). * [ ] http://www.easymock.org/ (301) with 1 occurrences could not be migrated: ([https](https://www.easymock.org/) result SSLHandshakeException). * [ ] http://www.jmock.org/ (301) with 1 occurrences could not be migrated: ([https](https://www.jmock.org/) result SSLHandshakeException). * [ ] http://www.objectmentor.com/resources/articles/ocp.pdf (302) with 1 occurrences could not be migrated: ([https](https://www.objectmentor.com/resources/articles/ocp.pdf) result ConnectTimeoutException). * [ ] http://blog.arendsen.net/index.php/2006/10/05/on-the-servicelocatorfactorybean-dlas-and-the-sustainability-of-code-and-design/ (403) with 1 occurrences could not be migrated: ([https](https://blog.arendsen.net/index.php/2006/10/05/on-the-servicelocatorfactorybean-dlas-and-the-sustainability-of-code-and-design/) result SSLHandshakeException). * [ ] http://howardlewisship.com/blog/ (404) with 1 occurrences could not be migrated: ([https](https://howardlewisship.com/blog/) result SSLHandshakeException). * [ ] http://howardlewisship.com/tapestry-javaforge/tapestry-spring/ (404) with 1 occurrences could not be migrated: ([https](https://howardlewisship.com/tapestry-javaforge/tapestry-spring/) result SSLHandshakeException). * [ ] http://www.foo.com/schema/component/component.xsd (404) with 2 occurrences could not be migrated: ([https](https://www.foo.com/schema/component/component.xsd) result SSLHandshakeException). * [ ] http://www.foo.com/schema/jcache (404) with 2 occurrences could not be migrated: ([https](https://www.foo.com/schema/jcache) result SSLHandshakeException). * [ ] http://www.mularien.com/blog/2008/04/24/how-to-reference-and-use-jstl-in-your-web-application/ (404) with 1 occurrences could not be migrated: ([https](https://www.mularien.com/blog/2008/04/24/how-to-reference-and-use-jstl-in-your-web-application/) result SSLHandshakeException). * [ ] http://www.mycompany.com/schema/myns/myns.xsd (404) with 1 occurrences could not be migrated: ([https](https://www.mycompany.com/schema/myns/myns.xsd) result ConnectTimeoutException). * [ ] http://xunitpatterns.com/Test%20Spy.html (404) with 1 occurrences could not be migrated: ([https](https://xunitpatterns.com/Test%20Spy.html) result AnnotatedConnectException). These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended. * [ ] http://www.freemarker.org (301) with 2 occurrences migrated to: https://freemarker.apache.org/ ([https](https://www.freemarker.org) result ConnectTimeoutException). * [ ] http://www.caucho.com/ (302) with 1 occurrences migrated to: https://www.caucho.com/ ([https](https://www.caucho.com/) result SSLHandshakeException). * [ ] http://www.caucho.com (302) with 1 occurrences migrated to: https://www.caucho.com/ ([https](https://www.caucho.com) result SSLHandshakeException). * [ ] http://springide.org/blog/ (AnnotatedConnectException) with 1 occurrences migrated to: https://springide.org/blog/ ([https](https://springide.org/blog/) result AnnotatedConnectException). * [ ] http://springide.org/project/wiki/SpringideInstall (AnnotatedConnectException) with 1 occurrences migrated to: https://springide.org/project/wiki/SpringideInstall ([https](https://springide.org/project/wiki/SpringideInstall) result AnnotatedConnectException). * [ ] http://eclipse-plugins.2y.net/eclipse/plugins.jsp?category=XML (ConnectTimeoutException) with 1 occurrences migrated to: https://eclipse-plugins.2y.net/eclipse/plugins.jsp?category=XML ([https](https://eclipse-plugins.2y.net/eclipse/plugins.jsp?category=XML) result ConnectTimeoutException). * [ ] http://wiki.opensymphony.com/display/WW/WebWork (ConnectTimeoutException) with 1 occurrences migrated to: https://wiki.opensymphony.com/display/WW/WebWork ([https](https://wiki.opensymphony.com/display/WW/WebWork) result ConnectTimeoutException). * [ ] http://www.kbcafe.com/rss/atom.xsd.xml (ConnectTimeoutException) with 1 occurrences migrated to: https://www.kbcafe.com/rss/atom.xsd.xml ([https](https://www.kbcafe.com/rss/atom.xsd.xml) result ConnectTimeoutException). * [ ] http://www.opensymphony.com/quartz/JobSchedulingData (ConnectTimeoutException) with 2 occurrences migrated to: https://www.opensymphony.com/quartz/JobSchedulingData ([https](https://www.opensymphony.com/quartz/JobSchedulingData) result ConnectTimeoutException). * [ ] http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd (ConnectTimeoutException) with 1 occurrences migrated to: https://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd ([https](https://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd) result ConnectTimeoutException). * [ ] http://www.opensymphony.com/webwork/ (ConnectTimeoutException) with 3 occurrences migrated to: https://www.opensymphony.com/webwork/ ([https](https://www.opensymphony.com/webwork/) result ConnectTimeoutException). * [ ] http://www.opensymphony.com/webwork/wikidocs/IoC%20Overview.html (ConnectTimeoutException) with 1 occurrences migrated to: https://www.opensymphony.com/webwork/wikidocs/IoC%20Overview.html ([https](https://www.opensymphony.com/webwork/wikidocs/IoC%20Overview.html) result ConnectTimeoutException). * [ ] http://www.opensymphony.com/webwork/wikidocs/Spring.html (ConnectTimeoutException) with 1 occurrences migrated to: https://www.opensymphony.com/webwork/wikidocs/Spring.html ([https](https://www.opensymphony.com/webwork/wikidocs/Spring.html) result ConnectTimeoutException). * [ ] http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd (ReadTimeoutException) with 5 occurrences migrated to: https://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd ([https](https://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd) result ReadTimeoutException). * [ ] http://castor.codehaus.org/mapping.dtd (UnknownHostException) with 1 occurrences migrated to: https://castor.codehaus.org/mapping.dtd ([https](https://castor.codehaus.org/mapping.dtd) result UnknownHostException). * [ ] http://castor.codehaus.org/xml-framework.html (UnknownHostException) with 1 occurrences migrated to: https://castor.codehaus.org/xml-framework.html ([https](https://castor.codehaus.org/xml-framework.html) result UnknownHostException). * [ ] http://castor.codehaus.org/xml-mapping.html (UnknownHostException) with 1 occurrences migrated to: https://castor.codehaus.org/xml-mapping.html ([https](https://castor.codehaus.org/xml-mapping.html) result UnknownHostException). * [ ] http://groovy.codehaus.org/ (UnknownHostException) with 1 occurrences migrated to: https://groovy.codehaus.org/ ([https](https://groovy.codehaus.org/) result UnknownHostException). * [ ] http://groovy.codehaus.org/Operators (UnknownHostException) with 2 occurrences migrated to: https://groovy.codehaus.org/Operators ([https](https://groovy.codehaus.org/Operators) result UnknownHostException). * [ ] http://jruby.codehaus.org/ (UnknownHostException) with 1 occurrences migrated to: https://jruby.codehaus.org/ ([https](https://jruby.codehaus.org/) result UnknownHostException). * [ ] http://lingo.codehaus.org/ (UnknownHostException) with 1 occurrences migrated to: https://lingo.codehaus.org/ ([https](https://lingo.codehaus.org/) result UnknownHostException). * [ ] http://myserver/logo.png (UnknownHostException) with 1 occurrences migrated to: https://myserver/logo.png ([https](https://myserver/logo.png) result UnknownHostException). * [ ] http://xstream.codehaus.org/ (UnknownHostException) with 1 occurrences migrated to: https://xstream.codehaus.org/ ([https](https://xstream.codehaus.org/) result UnknownHostException). * [ ] http://bitworking.org/projects/URI-Templates/ (302) with 1 occurrences migrated to: https://bitworking.org/projects/URI-Templates/ ([https](https://bitworking.org/projects/URI-Templates/) result 404). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/ServletAnnotationMappingUtils.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/ServletAnnotationMappingUtils.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/ServletAnnotationMappingUtils.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/ui/velocity/VelocityEngineFactory.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/ui/velocity/VelocityEngineFactory.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/ui/velocity/VelocityEngineFactory.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/jsf/DelegatingVariableResolver.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/jsf/DelegatingVariableResolver.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/jsf/DelegatingVariableResolver.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/ActionSupport.html (301) with 2 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/ActionSupport.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/ActionSupport.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/ContextLoaderPlugIn.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/ContextLoaderPlugIn.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/ContextLoaderPlugIn.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DelegatingActionProxy.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DelegatingActionProxy.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DelegatingActionProxy.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DelegatingRequestProcessor.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DelegatingRequestProcessor.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DelegatingRequestProcessor.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DelegatingTilesRequestProcessor.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DelegatingTilesRequestProcessor.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DelegatingTilesRequestProcessor.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DispatchActionSupport.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DispatchActionSupport.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/DispatchActionSupport.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/LookupDispatchActionSupport.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/LookupDispatchActionSupport.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/LookupDispatchActionSupport.html) result 404). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/MappingDispatchActionSupport.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/MappingDispatchActionSupport.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/struts/MappingDispatchActionSupport.html) result 404). * [ ] http://static.springsource.org/spring/docs/current/api/org/springframework/context/access/ContextSingletonBeanFactoryLocator.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring/docs/current/api/org/springframework/context/access/ContextSingletonBeanFactoryLocator.html ([https](https://static.springsource.org/spring/docs/current/api/org/springframework/context/access/ContextSingletonBeanFactoryLocator.html) result 404). * [ ] http://static.springsource.org/spring/docs/current/api/org/springframework/context/support/ClassPathXmlApplicationContext.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring/docs/current/api/org/springframework/context/support/ClassPathXmlApplicationContext.html ([https](https://static.springsource.org/spring/docs/current/api/org/springframework/context/support/ClassPathXmlApplicationContext.html) result 404). * [ ] http://static.springsource.org/spring/docs/current/api/org/springframework/context/support/FileSystemXmlApplicationContext.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring/docs/current/api/org/springframework/context/support/FileSystemXmlApplicationContext.html ([https](https://static.springsource.org/spring/docs/current/api/org/springframework/context/support/FileSystemXmlApplicationContext.html) result 404). * [ ] http://static.springsource.org/spring/docs/current/api/org/springframework/context/support/SimpleThreadScope.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring/docs/current/api/org/springframework/context/support/SimpleThreadScope.html ([https](https://static.springsource.org/spring/docs/current/api/org/springframework/context/support/SimpleThreadScope.html) result 404). * [ ] http://static.springsource.org/spring/docs/current/api/org/springframework/oxm/xstream/XStreamMarshaller.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring/docs/current/api/org/springframework/oxm/xstream/XStreamMarshaller.html ([https](https://static.springsource.org/spring/docs/current/api/org/springframework/oxm/xstream/XStreamMarshaller.html) result 404). * [ ] http://static.springsource.org/spring/docs/current/api/org/springframework/web/client/RestTemplate.html (301) with 8 occurrences migrated to: https://docs.spring.io/spring/docs/current/api/org/springframework/web/client/RestTemplate.html ([https](https://static.springsource.org/spring/docs/current/api/org/springframework/web/client/RestTemplate.html) result 404). * [ ] http://example.com/hotel (404) with 1 occurrences migrated to: https://example.com/hotel ([https](https://example.com/hotel) result 404). * [ ] http://example.com/hotel%20list (404) with 2 occurrences migrated to: https://example.com/hotel%20list ([https](https://example.com/hotel%20list) result 404). * [ ] http://example.com/hotel%2520list (404) with 1 occurrences migrated to: https://example.com/hotel%2520list ([https](https://example.com/hotel%2520list) result 404). * [ ] http://example.com/hotels/ (404) with 6 occurrences migrated to: https://example.com/hotels/ ([https](https://example.com/hotels/) result 404). * [ ] http://example.com/hotels/1/bookings (404) with 1 occurrences migrated to: https://example.com/hotels/1/bookings ([https](https://example.com/hotels/1/bookings) result 404). * [ ] http://host.com/outsideOfficeHours.html (404) with 1 occurrences migrated to: https://host.com/outsideOfficeHours.html ([https](https://host.com/outsideOfficeHours.html) result 404). * [ ] http://repository.springsource.com/maven/bundles/release/</url> (404) with 1 occurrences migrated to: https://repository.springsource.com/maven/bundles/release/</url> ([https](https://repository.springsource.com/maven/bundles/release/</url>) result 404). * [ ] http://blog.springsource.com/2009/03/16/adding-an-atom-view-to-an-application-using-springs-rest-support/ (301) with 1 occurrences migrated to: https://spring.io/blog/2009/03/16/adding-an-atom-view-to-an-application-using-springs-rest-support/ ([https](https://blog.springsource.com/2009/03/16/adding-an-atom-view-to-an-application-using-springs-rest-support/) result 404). * [ ] http://blog.springsource.com/2011/02/23/spring-3-1-m1-caching/ (301) with 1 occurrences migrated to: https://spring.io/blog/2011/02/23/spring-3-1-m1-caching/ ([https](https://blog.springsource.com/2011/02/23/spring-3-1-m1-caching/) result 404). * [ ] http://www.example.com/users/ (404) with 1 occurrences migrated to: https://www.example.com/users/ ([https](https://www.example.com/users/) result 404). * [ ] http://www.example.com/users/fred (404) with 3 occurrences migrated to: https://www.example.com/users/fred ([https](https://www.example.com/users/fred) result 404). * [ ] http://www.example.com/users/fred.pdf (404) with 1 occurrences migrated to: https://www.example.com/users/fred.pdf ([https](https://www.example.com/users/fred.pdf) result 404). * [ ] http://www.example.com/users/fred.xml (404) with 1 occurrences migrated to: https://www.example.com/users/fred.xml ([https](https://www.example.com/users/fred.xml) result 404). * [ ] http://www.springframework.org/schema/beans/factory/xml/support/CustomNamespaceHandlerTests.xsd (404) with 1 occurrences migrated to: https://www.springframework.org/schema/beans/factory/xml/support/CustomNamespaceHandlerTests.xsd ([https](https://www.springframework.org/schema/beans/factory/xml/support/CustomNamespaceHandlerTests.xsd) result 404). * [ ] http://www.springframework.org/schema/jdbc/spring-cache.xsd (404) with 1 occurrences migrated to: https://www.springframework.org/schema/jdbc/spring-cache.xsd ([https](https://www.springframework.org/schema/jdbc/spring-cache.xsd) result 404). * [ ] http://myhost.com/resource/path/myTemplate.txt (500) with 1 occurrences migrated to: https://myhost.com/resource/path/myTemplate.txt ([https](https://myhost.com/resource/path/myTemplate.txt) result 500). * [ ] http://myhost.com/some/arbitrary/path (500) with 1 occurrences migrated to: https://myhost.com/some/arbitrary/path ([https](https://myhost.com/some/arbitrary/path) result 500). These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended. * [ ] http://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html with 1 occurrences migrated to: https://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html ([https](https://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/deprecated-list.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/deprecated-list.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/deprecated-list.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/beans/factory/config/BeanReferenceFactoryBean.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/beans/factory/config/BeanReferenceFactoryBean.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/beans/factory/config/BeanReferenceFactoryBean.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/beans/factory/config/CommonsLogFactoryBean.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/beans/factory/config/CommonsLogFactoryBean.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/beans/factory/config/CommonsLogFactoryBean.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/ejb/support/package-summary.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/ejb/support/package-summary.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/ejb/support/package-summary.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/http/HttpStatus.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/http/HttpStatus.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/http/HttpStatus.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/http/converter/xml/XmlAwareFormHttpMessageConverter.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/http/converter/xml/XmlAwareFormHttpMessageConverter.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/http/converter/xml/XmlAwareFormHttpMessageConverter.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/instrument/classloading/oc4j/OC4JLoadTimeWeaver.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/instrument/classloading/oc4j/OC4JLoadTimeWeaver.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/instrument/classloading/oc4j/OC4JLoadTimeWeaver.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/jmx/support/MBeanRegistrationSupport.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/jmx/support/MBeanRegistrationSupport.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/jmx/support/MBeanRegistrationSupport.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/orm/ibatis/package-summary.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/orm/ibatis/package-summary.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/orm/ibatis/package-summary.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/orm/jpa/vendor/TopLinkJpaDialect.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/orm/jpa/vendor/TopLinkJpaDialect.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/orm/jpa/vendor/TopLinkJpaDialect.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/orm/jpa/vendor/TopLinkJpaVendorAdapter.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/orm/jpa/vendor/TopLinkJpaVendorAdapter.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/orm/jpa/vendor/TopLinkJpaVendorAdapter.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/scheduling/backportconcurrent/package-summary.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/scheduling/backportconcurrent/package-summary.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/scheduling/backportconcurrent/package-summary.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/context/ContextConfigurationAttributes.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/context/ContextConfigurationAttributes.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/context/ContextConfigurationAttributes.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/context/junit4/AbstractTransactionalJUnit4SpringContextTests.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/context/junit4/AbstractTransactionalJUnit4SpringContextTests.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/context/junit4/AbstractTransactionalJUnit4SpringContextTests.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/context/testng/AbstractTransactionalTestNGSpringContextTests.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/context/testng/AbstractTransactionalTestNGSpringContextTests.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/context/testng/AbstractTransactionalTestNGSpringContextTests.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/jdbc/SimpleJdbcTestUtils.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/jdbc/SimpleJdbcTestUtils.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/test/jdbc/SimpleJdbcTestUtils.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/transaction/interceptor/TransactionAspectUtils.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/transaction/interceptor/TransactionAspectUtils.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/transaction/interceptor/TransactionAspectUtils.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/transaction/jta/OC4JJtaTransactionManager.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/transaction/jta/OC4JJtaTransactionManager.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/transaction/jta/OC4JJtaTransactionManager.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/ui/velocity/CommonsLoggingLogSystem.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/ui/velocity/CommonsLoggingLogSystem.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/ui/velocity/CommonsLoggingLogSystem.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/ui/velocity/VelocityEngineUtils.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/ui/velocity/VelocityEngineUtils.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/ui/velocity/VelocityEngineUtils.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/util/CachingMapDecorator.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/util/CachingMapDecorator.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/util/CachingMapDecorator.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/jsf/DelegatingVariableResolver.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/jsf/DelegatingVariableResolver.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/jsf/DelegatingVariableResolver.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/jsf/SpringBeanVariableResolver.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/jsf/SpringBeanVariableResolver.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/jsf/SpringBeanVariableResolver.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/DefaultAnnotationHandlerMapping.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/DefaultAnnotationHandlerMapping.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/mvc/annotation/DefaultAnnotationHandlerMapping.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/util/ExpressionEvaluationUtils.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/util/ExpressionEvaluationUtils.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/util/ExpressionEvaluationUtils.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/util/UriUtils.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/util/UriUtils.html ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/javadoc-api/org/springframework/web/util/UriUtils.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/CustomAutowireConfigurer.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/CustomAutowireConfigurer.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/CustomAutowireConfigurer.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/RequiredAnnotationBeanPostProcessor.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/RequiredAnnotationBeanPostProcessor.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/RequiredAnnotationBeanPostProcessor.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/FieldRetrievingFactoryBean.html (301) with 3 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/FieldRetrievingFactoryBean.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/FieldRetrievingFactoryBean.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/Scope.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/Scope.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/Scope.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/support/BeanNameGenerator.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/support/BeanNameGenerator.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/support/BeanNameGenerator.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/context/ApplicationContext.html (301) with 2 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/ApplicationContext.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/context/ApplicationContext.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ScopeMetadataResolver.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ScopeMetadataResolver.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ScopeMetadataResolver.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/jca/context/SpringContextResourceAdapter.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jca/context/SpringContextResourceAdapter.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/jca/context/SpringContextResourceAdapter.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/jndi/support/SimpleJndiBeanFactory.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jndi/support/SimpleJndiBeanFactory.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/jndi/support/SimpleJndiBeanFactory.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/quartz/SchedulerFactoryBean.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/quartz/SchedulerFactoryBean.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/quartz/SchedulerFactoryBean.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/validation/DefaultMessageCodesResolver.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/DefaultMessageCodesResolver.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/validation/DefaultMessageCodesResolver.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/validation/MessageCodesResolver.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/MessageCodesResolver.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/validation/MessageCodesResolver.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/context/ContextLoaderListener.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/context/ContextLoaderListener.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/context/ContextLoaderListener.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/context/WebApplicationContext.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/context/WebApplicationContext.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/context/WebApplicationContext.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/context/support/WebApplicationContextUtils.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/context/support/WebApplicationContextUtils.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/context/support/WebApplicationContextUtils.html) result 200). * [ ] http://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/jsf/FacesContextUtils.html (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/jsf/FacesContextUtils.html ([https](https://static.springsource.org/spring-framework/docs/current/javadoc-api/org/springframework/web/jsf/FacesContextUtils.html) result 200). * [ ] http://static.springsource.org/spring-gemfire/docs/1.0.0.RELEASE/reference/html/ (301) with 1 occurrences migrated to: https://docs.spring.io/spring-gemfire/docs/1.0.0.RELEASE/reference/html/ ([https](https://static.springsource.org/spring-gemfire/docs/1.0.0.RELEASE/reference/html/) result 200). * [ ] http://static.springsource.org/spring-security/site/ (301) with 1 occurrences migrated to: https://docs.spring.io/spring-security/site/ ([https](https://static.springsource.org/spring-security/site/) result 200). * [ ] http://en.wikipedia.org/wiki/Adapter_pattern with 1 occurrences migrated to: https://en.wikipedia.org/wiki/Adapter_pattern ([https](https://en.wikipedia.org/wiki/Adapter_pattern) result 200). * [ ] http://en.wikipedia.org/wiki/Cache with 1 occurrences migrated to: https://en.wikipedia.org/wiki/Cache ([https](https://en.wikipedia.org/wiki/Cache) result 200). * [ ] http://en.wikipedia.org/wiki/Content_negotiation with 1 occurrences migrated to: https://en.wikipedia.org/wiki/Content_negotiation ([https](https://en.wikipedia.org/wiki/Content_negotiation) result 200). * [ ] http://en.wikipedia.org/wiki/HTTP_ETag with 1 occurrences migrated to: https://en.wikipedia.org/wiki/HTTP_ETag ([https](https://en.wikipedia.org/wiki/HTTP_ETag) result 200). * [ ] http://en.wikipedia.org/wiki/Internet_media_type with 1 occurrences migrated to: https://en.wikipedia.org/wiki/Internet_media_type ([https](https://en.wikipedia.org/wiki/Internet_media_type) result 200). * [ ] http://en.wikipedia.org/wiki/Mock_Object with 1 occurrences migrated to: https://en.wikipedia.org/wiki/Mock_Object ([https](https://en.wikipedia.org/wiki/Mock_Object) result 200). * [ ] http://example.com with 1 occurrences migrated to: https://example.com ([https](https://example.com) result 200). * [ ] http://www.hibernate.org/ (301) with 1 occurrences migrated to: https://hibernate.org/ ([https](https://www.hibernate.org/) result 200). * [ ] http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd (301) with 2 occurrences migrated to: https://hibernate.org/dtd/hibernate-mapping-3.0.dtd ([https](https://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd) result 200). * [ ] http://ibatis.apache.org/ with 1 occurrences migrated to: https://ibatis.apache.org/ ([https](https://ibatis.apache.org/) result 200). * [ ] http://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html with 1 occurrences migrated to: https://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html ([https](https://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html) result 200). * [ ] http://jcp.org/aboutJava/communityprocess/final/jsr160/index.html with 1 occurrences migrated to: https://jcp.org/aboutJava/communityprocess/final/jsr160/index.html ([https](https://jcp.org/aboutJava/communityprocess/final/jsr160/index.html) result 200). * [ ] http://jcp.org/en/jsr/detail?id=107 with 1 occurrences migrated to: https://jcp.org/en/jsr/detail?id=107 ([https](https://jcp.org/en/jsr/detail?id=107) result 200). * [ ] http://jcp.org/en/jsr/detail?id=303 with 1 occurrences migrated to: https://jcp.org/en/jsr/detail?id=303 ([https](https://jcp.org/en/jsr/detail?id=303) result 200). * [ ] http://logback.qos.ch with 1 occurrences migrated to: https://logback.qos.ch ([https](https://logback.qos.ch) result 200). * [ ] http://martinfowler.com/articles/injection.html with 2 occurrences migrated to: https://martinfowler.com/articles/injection.html ([https](https://martinfowler.com/articles/injection.html) result 200). * [ ] http://myfaces.apache.org/ with 1 occurrences migrated to: https://myfaces.apache.org/ ([https](https://myfaces.apache.org/) result 200). * [ ] http://myfaces.apache.org/orchestra/ with 1 occurrences migrated to: https://myfaces.apache.org/orchestra/ ([https](https://myfaces.apache.org/orchestra/) result 200). * [ ] http://repo1.maven.org/maven2/javax/inject/javax.inject/1/ with 2 occurrences migrated to: https://repo1.maven.org/maven2/javax/inject/javax.inject/1/ ([https](https://repo1.maven.org/maven2/javax/inject/javax.inject/1/) result 200). * [ ] http://repository.springsource.com/ivy/bundles/external/ with 2 occurrences migrated to: https://repository.springsource.com/ivy/bundles/external/ ([https](https://repository.springsource.com/ivy/bundles/external/) result 200). * [ ] http://repository.springsource.com/ivy/bundles/release/ with 2 occurrences migrated to: https://repository.springsource.com/ivy/bundles/release/ ([https](https://repository.springsource.com/ivy/bundles/release/) result 200). * [ ] http://static.springsource.org/schema/mvc/spring-mvc.xsd (301) with 1 occurrences migrated to: https://schema.spring.io/mvc/spring-mvc.xsd ([https](https://static.springsource.org/schema/mvc/spring-mvc.xsd) result 200). * [ ] http://blog.springsource.com/2004/08/06/method-injection/ (301) with 1 occurrences migrated to: https://spring.io/blog/2004/08/06/method-injection/ ([https](https://blog.springsource.com/2004/08/06/method-injection/) result 200). * [ ] http://blog.springsource.com/2007/06/11/using-a-shared-parent-application-context-in-a-multi-war-spring-application/ (301) with 1 occurrences migrated to: https://spring.io/blog/2007/06/11/using-a-shared-parent-application-context-in-a-multi-war-spring-application/ ([https](https://blog.springsource.com/2007/06/11/using-a-shared-parent-application-context-in-a-multi-war-spring-application/) result 200). * [ ] http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/ (301) with 2 occurrences migrated to: https://spring.io/blog/2011/02/11/spring-framework-3-1-m1-released/ ([https](https://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/) result 200). * [ ] http://blog.springsource.com/2011/02/14/spring-3-1-m1-introducing-profile/ (301) with 1 occurrences migrated to: https://spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile/ ([https](https://blog.springsource.com/2011/02/14/spring-3-1-m1-introducing-profile/) result 200). * [ ] http://blog.springsource.com/2011/02/15/spring-3-1-m1-unified-property-management/ (301) with 1 occurrences migrated to: https://spring.io/blog/2011/02/15/spring-3-1-m1-unified-property-management/ ([https](https://blog.springsource.com/2011/02/15/spring-3-1-m1-unified-property-management/) result 200). * [ ] http://blog.springsource.com/2011/06/21/spring-3-1-m2-testing-with-configuration-classes-and-profiles/ (301) with 1 occurrences migrated to: https://spring.io/blog/2011/06/21/spring-3-1-m2-testing-with-configuration-classes-and-profiles/ ([https](https://blog.springsource.com/2011/06/21/spring-3-1-m2-testing-with-configuration-classes-and-profiles/) result 200). * [ ] http://struts.apache.org with 1 occurrences migrated to: https://struts.apache.org ([https](https://struts.apache.org) result 200). * [ ] http://struts.apache.org/ with 2 occurrences migrated to: https://struts.apache.org/ ([https](https://struts.apache.org/) result 200). * [ ] http://subversion.apache.org/ with 1 occurrences migrated to: https://subversion.apache.org/ ([https](https://subversion.apache.org/) result 200). * [ ] http://tapestry.apache.org/ with 3 occurrences migrated to: https://tapestry.apache.org/ ([https](https://tapestry.apache.org/) result 200). * [ ] http://tiles.apache.org with 1 occurrences migrated to: https://tiles.apache.org ([https](https://tiles.apache.org) result 200). * [ ] http://tiles.apache.org/dtds/tiles-config_2_0.dtd with 1 occurrences migrated to: https://tiles.apache.org/dtds/tiles-config_2_0.dtd ([https](https://tiles.apache.org/dtds/tiles-config_2_0.dtd) result 200). * [ ] http://tiles.apache.org/dtds/tiles-config_2_1.dtd with 2 occurrences migrated to: https://tiles.apache.org/dtds/tiles-config_2_1.dtd ([https](https://tiles.apache.org/dtds/tiles-config_2_1.dtd) result 200). * [ ] http://tiles.apache.org/dtds/tiles-config_3_0.dtd with 3 occurrences migrated to: https://tiles.apache.org/dtds/tiles-config_3_0.dtd ([https](https://tiles.apache.org/dtds/tiles-config_3_0.dtd) result 200). * [ ] http://tomcat.apache.org/ with 1 occurrences migrated to: https://tomcat.apache.org/ ([https](https://tomcat.apache.org/) result 200). * [ ] http://tomcat.apache.org/tomcat-5.5-doc/config/context.html with 1 occurrences migrated to: https://tomcat.apache.org/tomcat-5.5-doc/config/context.html ([https](https://tomcat.apache.org/tomcat-5.5-doc/config/context.html) result 200). * [ ] http://tomcat.apache.org/tomcat-6.0-doc/config/context.html with 1 occurrences migrated to: https://tomcat.apache.org/tomcat-6.0-doc/config/context.html ([https](https://tomcat.apache.org/tomcat-6.0-doc/config/context.html) result 200). * [ ] http://tools.ietf.org/html/rfc3986 with 1 occurrences migrated to: https://tools.ietf.org/html/rfc3986 ([https](https://tools.ietf.org/html/rfc3986) result 200). * [ ] http://velocity.apache.org with 2 occurrences migrated to: https://velocity.apache.org ([https](https://velocity.apache.org) result 200). * [ ] http://www.atomikos.com/ with 1 occurrences migrated to: https://www.atomikos.com/ ([https](https://www.atomikos.com/) result 200). * [ ] http://www.eclipse.org/ with 1 occurrences migrated to: https://www.eclipse.org/ ([https](https://www.eclipse.org/) result 200). * [ ] http://www.eclipse.org/ajdt/ with 1 occurrences migrated to: https://www.eclipse.org/ajdt/ ([https](https://www.eclipse.org/ajdt/) result 200). * [ ] http://www.eclipse.org/aspectj/doc/next/progguide/index.html with 1 occurrences migrated to: https://www.eclipse.org/aspectj/doc/next/progguide/index.html ([https](https://www.eclipse.org/aspectj/doc/next/progguide/index.html) result 200). * [ ] http://www.eclipse.org/aspectj/doc/next/progguide/semantics-joinPoints.html with 1 occurrences migrated to: https://www.eclipse.org/aspectj/doc/next/progguide/semantics-joinPoints.html ([https](https://www.eclipse.org/aspectj/doc/next/progguide/semantics-joinPoints.html) result 200). * [ ] http://www.eclipse.org/aspectj/doc/released/adk15notebook/index.html with 1 occurrences migrated to: https://www.eclipse.org/aspectj/doc/released/adk15notebook/index.html ([https](https://www.eclipse.org/aspectj/doc/released/adk15notebook/index.html) result 200). * [ ] http://www.eclipse.org/aspectj/doc/released/devguide/antTasks.html with 1 occurrences migrated to: https://www.eclipse.org/aspectj/doc/released/devguide/antTasks.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/antTasks.html) result 200). * [ ] http://www.eclipse.org/aspectj/doc/released/devguide/index.html with 1 occurrences migrated to: https://www.eclipse.org/aspectj/doc/released/devguide/index.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/index.html) result 200). * [ ] http://www.eclipse.org/aspectj/doc/released/devguide/ltw-configuration.html with 1 occurrences migrated to: https://www.eclipse.org/aspectj/doc/released/devguide/ltw-configuration.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/ltw-configuration.html) result 200). * [ ] http://www.eclipse.org/aspectj/doc/released/devguide/ltw.html with 1 occurrences migrated to: https://www.eclipse.org/aspectj/doc/released/devguide/ltw.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/ltw.html) result 200). * [ ] http://www.eclipse.org/aspectj/doc/released/progguide/index.html with 1 occurrences migrated to: https://www.eclipse.org/aspectj/doc/released/progguide/index.html ([https](https://www.eclipse.org/aspectj/doc/released/progguide/index.html) result 200). * [ ] http://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html with 1 occurrences migrated to: https://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html ([https](https://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html) result 200). * [ ] http://www.eclipse.org/aspectj/dtd/aspectj.dtd with 1 occurrences migrated to: https://www.eclipse.org/aspectj/dtd/aspectj.dtd ([https](https://www.eclipse.org/aspectj/dtd/aspectj.dtd) result 200). * [ ] http://www.eclipse.org/jetty/ with 1 occurrences migrated to: https://www.eclipse.org/jetty/ ([https](https://www.eclipse.org/jetty/) result 200). * [ ] http://www.eclipse.org/webtools/ with 1 occurrences migrated to: https://www.eclipse.org/webtools/ ([https](https://www.eclipse.org/webtools/) result 200). * [ ] http://ehcache.org/ (301) with 1 occurrences migrated to: https://www.ehcache.org/ ([https](https://ehcache.org/) result 200). * [ ] http://www.enterpriseintegrationpatterns.com with 1 occurrences migrated to: https://www.enterpriseintegrationpatterns.com ([https](https://www.enterpriseintegrationpatterns.com) result 200). * [ ] http://www.h2database.com with 1 occurrences migrated to: https://www.h2database.com ([https](https://www.h2database.com) result 200). * [ ] http://www.infoq.com/ with 1 occurrences migrated to: https://www.infoq.com/ ([https](https://www.infoq.com/) result 200). * [ ] http://www.infoq.com/minibooks/JTDS with 1 occurrences migrated to: https://www.infoq.com/minibooks/JTDS ([https](https://www.infoq.com/minibooks/JTDS) result 200). * [ ] http://www.jetbrains.com/idea/ with 2 occurrences migrated to: https://www.jetbrains.com/idea/ ([https](https://www.jetbrains.com/idea/) result 200). * [ ] http://quartz-scheduler.org (301) with 2 occurrences migrated to: https://www.quartz-scheduler.org/ ([https](https://quartz-scheduler.org) result 200). * [ ] http://www.slf4j.org with 1 occurrences migrated to: https://www.slf4j.org ([https](https://www.slf4j.org) result 200). * [ ] http://www.springframework.org/dtd/spring-beans-2.0.dtd with 213 occurrences migrated to: https://www.springframework.org/dtd/spring-beans-2.0.dtd ([https](https://www.springframework.org/dtd/spring-beans-2.0.dtd) result 200). * [ ] http://www.springframework.org/dtd/spring-beans.dtd with 3 occurrences migrated to: https://www.springframework.org/dtd/spring-beans.dtd ([https](https://www.springframework.org/dtd/spring-beans.dtd) result 200). * [ ] http://www.springframework.org/schema/aop/spring-aop-2.0.xsd with 71 occurrences migrated to: https://www.springframework.org/schema/aop/spring-aop-2.0.xsd ([https](https://www.springframework.org/schema/aop/spring-aop-2.0.xsd) result 200). * [ ] http://www.springframework.org/schema/aop/spring-aop-2.5.xsd with 14 occurrences migrated to: https://www.springframework.org/schema/aop/spring-aop-2.5.xsd ([https](https://www.springframework.org/schema/aop/spring-aop-2.5.xsd) result 200). * [ ] http://www.springframework.org/schema/aop/spring-aop-3.0.xsd with 2 occurrences migrated to: https://www.springframework.org/schema/aop/spring-aop-3.0.xsd ([https](https://www.springframework.org/schema/aop/spring-aop-3.0.xsd) result 200). * [ ] http://www.springframework.org/schema/aop/spring-aop.xsd with 24 occurrences migrated to: https://www.springframework.org/schema/aop/spring-aop.xsd ([https](https://www.springframework.org/schema/aop/spring-aop.xsd) result 200). * [ ] http://www.springframework.org/schema/beans/spring-beans-2.0.xsd with 119 occurrences migrated to: https://www.springframework.org/schema/beans/spring-beans-2.0.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-2.0.xsd) result 200). * [ ] http://www.springframework.org/schema/beans/spring-beans-2.5.xsd with 61 occurrences migrated to: https://www.springframework.org/schema/beans/spring-beans-2.5.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-2.5.xsd) result 200). * [ ] http://www.springframework.org/schema/beans/spring-beans-3.0.xsd with 11 occurrences migrated to: https://www.springframework.org/schema/beans/spring-beans-3.0.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-3.0.xsd) result 200). * [ ] http://www.springframework.org/schema/beans/spring-beans-3.1.xsd with 35 occurrences migrated to: https://www.springframework.org/schema/beans/spring-beans-3.1.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/beans/spring-beans-3.2.xsd with 3 occurrences migrated to: https://www.springframework.org/schema/beans/spring-beans-3.2.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-3.2.xsd) result 200). * [ ] http://www.springframework.org/schema/beans/spring-beans.xsd with 150 occurrences migrated to: https://www.springframework.org/schema/beans/spring-beans.xsd ([https](https://www.springframework.org/schema/beans/spring-beans.xsd) result 200). * [ ] http://www.springframework.org/schema/cache/spring-cache.xsd with 5 occurrences migrated to: https://www.springframework.org/schema/cache/spring-cache.xsd ([https](https://www.springframework.org/schema/cache/spring-cache.xsd) result 200). * [ ] http://www.springframework.org/schema/context/spring-context-2.5.xsd with 44 occurrences migrated to: https://www.springframework.org/schema/context/spring-context-2.5.xsd ([https](https://www.springframework.org/schema/context/spring-context-2.5.xsd) result 200). * [ ] http://www.springframework.org/schema/context/spring-context-3.0.xsd with 5 occurrences migrated to: https://www.springframework.org/schema/context/spring-context-3.0.xsd ([https](https://www.springframework.org/schema/context/spring-context-3.0.xsd) result 200). * [ ] http://www.springframework.org/schema/context/spring-context-3.1.xsd with 7 occurrences migrated to: https://www.springframework.org/schema/context/spring-context-3.1.xsd ([https](https://www.springframework.org/schema/context/spring-context-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/context/spring-context.xsd with 26 occurrences migrated to: https://www.springframework.org/schema/context/spring-context.xsd ([https](https://www.springframework.org/schema/context/spring-context.xsd) result 200). * [ ] http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd with 12 occurrences migrated to: https://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd) result 200). * [ ] http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd with 5 occurrences migrated to: https://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/jdbc/spring-jdbc.xsd with 5 occurrences migrated to: https://www.springframework.org/schema/jdbc/spring-jdbc.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc.xsd) result 200). * [ ] http://www.springframework.org/schema/jee/spring-jee-3.1.xsd with 1 occurrences migrated to: https://www.springframework.org/schema/jee/spring-jee-3.1.xsd ([https](https://www.springframework.org/schema/jee/spring-jee-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/jee/spring-jee.xsd with 3 occurrences migrated to: https://www.springframework.org/schema/jee/spring-jee.xsd ([https](https://www.springframework.org/schema/jee/spring-jee.xsd) result 200). * [ ] http://www.springframework.org/schema/jms/spring-jms-3.1.xsd with 1 occurrences migrated to: https://www.springframework.org/schema/jms/spring-jms-3.1.xsd ([https](https://www.springframework.org/schema/jms/spring-jms-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/jms/spring-jms.xsd with 2 occurrences migrated to: https://www.springframework.org/schema/jms/spring-jms.xsd ([https](https://www.springframework.org/schema/jms/spring-jms.xsd) result 200). * [ ] http://www.springframework.org/schema/lang/spring-lang-2.0.xsd with 2 occurrences migrated to: https://www.springframework.org/schema/lang/spring-lang-2.0.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-2.0.xsd) result 200). * [ ] http://www.springframework.org/schema/lang/spring-lang-2.5.xsd with 4 occurrences migrated to: https://www.springframework.org/schema/lang/spring-lang-2.5.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-2.5.xsd) result 200). * [ ] http://www.springframework.org/schema/lang/spring-lang-3.0.xsd with 1 occurrences migrated to: https://www.springframework.org/schema/lang/spring-lang-3.0.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-3.0.xsd) result 200). * [ ] http://www.springframework.org/schema/lang/spring-lang-3.1.xsd with 7 occurrences migrated to: https://www.springframework.org/schema/lang/spring-lang-3.1.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/lang/spring-lang.xsd with 5 occurrences migrated to: https://www.springframework.org/schema/lang/spring-lang.xsd ([https](https://www.springframework.org/schema/lang/spring-lang.xsd) result 200). * [ ] http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd with 9 occurrences migrated to: https://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd) result 200). * [ ] http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd with 5 occurrences migrated to: https://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd with 5 occurrences migrated to: https://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd) result 200). * [ ] http://www.springframework.org/schema/mvc/spring-mvc.xsd with 8 occurrences migrated to: https://www.springframework.org/schema/mvc/spring-mvc.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc.xsd) result 200). * [ ] http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd with 1 occurrences migrated to: https://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd ([https](https://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/oxm/spring-oxm.xsd with 1 occurrences migrated to: https://www.springframework.org/schema/oxm/spring-oxm.xsd ([https](https://www.springframework.org/schema/oxm/spring-oxm.xsd) result 200). * [ ] http://www.springframework.org/schema/security/spring-security-3.1.xsd with 1 occurrences migrated to: https://www.springframework.org/schema/security/spring-security-3.1.xsd ([https](https://www.springframework.org/schema/security/spring-security-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/task/spring-task-3.0.xsd with 1 occurrences migrated to: https://www.springframework.org/schema/task/spring-task-3.0.xsd ([https](https://www.springframework.org/schema/task/spring-task-3.0.xsd) result 200). * [ ] http://www.springframework.org/schema/task/spring-task.xsd with 5 occurrences migrated to: https://www.springframework.org/schema/task/spring-task.xsd ([https](https://www.springframework.org/schema/task/spring-task.xsd) result 200). * [ ] http://www.springframework.org/schema/tx/spring-tx-2.0.xsd with 4 occurrences migrated to: https://www.springframework.org/schema/tx/spring-tx-2.0.xsd ([https](https://www.springframework.org/schema/tx/spring-tx-2.0.xsd) result 200). * [ ] http://www.springframework.org/schema/tx/spring-tx-2.5.xsd with 7 occurrences migrated to: https://www.springframework.org/schema/tx/spring-tx-2.5.xsd ([https](https://www.springframework.org/schema/tx/spring-tx-2.5.xsd) result 200). * [ ] http://www.springframework.org/schema/tx/spring-tx.xsd with 16 occurrences migrated to: https://www.springframework.org/schema/tx/spring-tx.xsd ([https](https://www.springframework.org/schema/tx/spring-tx.xsd) result 200). * [ ] http://www.springframework.org/schema/util/spring-util-2.0.xsd with 3 occurrences migrated to: https://www.springframework.org/schema/util/spring-util-2.0.xsd ([https](https://www.springframework.org/schema/util/spring-util-2.0.xsd) result 200). * [ ] http://www.springframework.org/schema/util/spring-util-2.5.xsd with 9 occurrences migrated to: https://www.springframework.org/schema/util/spring-util-2.5.xsd ([https](https://www.springframework.org/schema/util/spring-util-2.5.xsd) result 200). * [ ] http://www.springframework.org/schema/util/spring-util-3.0.xsd with 2 occurrences migrated to: https://www.springframework.org/schema/util/spring-util-3.0.xsd ([https](https://www.springframework.org/schema/util/spring-util-3.0.xsd) result 200). * [ ] http://www.springframework.org/schema/util/spring-util-3.1.xsd with 2 occurrences migrated to: https://www.springframework.org/schema/util/spring-util-3.1.xsd ([https](https://www.springframework.org/schema/util/spring-util-3.1.xsd) result 200). * [ ] http://www.springframework.org/schema/util/spring-util.xsd with 5 occurrences migrated to: https://www.springframework.org/schema/util/spring-util.xsd ([https](https://www.springframework.org/schema/util/spring-util.xsd) result 200). * [ ] http://www.w3.org/DesignIssues/MatrixURIs.html with 1 occurrences migrated to: https://www.w3.org/DesignIssues/MatrixURIs.html ([https](https://www.w3.org/DesignIssues/MatrixURIs.html) result 200). * [ ] http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/ with 1 occurrences migrated to: https://www.w3.org/TR/2004/REC-xmlschema-1-20041028/ ([https](https://www.w3.org/TR/2004/REC-xmlschema-1-20041028/) result 200). * [ ] http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/ with 1 occurrences migrated to: https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/ ([https](https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/) result 200). * [ ] http://www.w3.org/TR/xhtml1/ with 2 occurrences migrated to: https://www.w3.org/TR/xhtml1/ ([https](https://www.w3.org/TR/xhtml1/) result 200). * [ ] http://www.w3.org/TR/xhtml1/dtds.html with 2 occurrences migrated to: https://www.w3.org/TR/xhtml1/dtds.html ([https](https://www.w3.org/TR/xhtml1/dtds.html) result 200). * [ ] http://xmlbeans.apache.org/ with 1 occurrences migrated to: https://xmlbeans.apache.org/ ([https](https://xmlbeans.apache.org/) result 200). * [ ] http://ant.apache.org/ivy with 1 occurrences migrated to: https://ant.apache.org/ivy ([https](https://ant.apache.org/ivy) result 301). * [ ] http://bit.ly/lrDHja with 1 occurrences migrated to: https://bit.ly/lrDHja ([https](https://bit.ly/lrDHja) result 301). * [ ] http://blog.springsource.org/2012/05/06/spring-mvc-3-2-preview-introducing-servlet-3-async-support/ with 1 occurrences migrated to: https://blog.springsource.org/2012/05/06/spring-mvc-3-2-preview-introducing-servlet-3-async-support/ ([https](https://blog.springsource.org/2012/05/06/spring-mvc-3-2-preview-introducing-servlet-3-async-support/) result 301). * [ ] http://db.apache.org/derby with 1 occurrences migrated to: https://db.apache.org/derby ([https](https://db.apache.org/derby) result 301). * [ ] http://static.springsource.org/spring-framework/docs/3.1.3.RELEASE_to_3.2.0.RELEASE (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.1.3.RELEASE_to_3.2.0.RELEASE ([https](https://static.springsource.org/spring-framework/docs/3.1.3.RELEASE_to_3.2.0.RELEASE) result 301). * [ ] http://static.springsource.org/spring-framework/docs/3.2.0.RC2_to_3.2.0.RELEASE (301) with 1 occurrences migrated to: https://docs.spring.io/spring-framework/docs/3.2.0.RC2_to_3.2.0.RELEASE ([https](https://static.springsource.org/spring-framework/docs/3.2.0.RC2_to_3.2.0.RELEASE) result 301). * [ ] http://forum.springsource.org/ (301) with 2 occurrences migrated to: https://forum.spring.io/ ([https](https://forum.springsource.org/) result 301). * [ ] http://forum.springframework.org/forumdisplay.php?f=25 with 1 occurrences migrated to: https://forum.springframework.org/forumdisplay.php?f=25 ([https](https://forum.springframework.org/forumdisplay.php?f=25) result 301). * [ ] http://issues.apache.org/bugzilla/show_bug.cgi?id=39704 with 1 occurrences migrated to: https://issues.apache.org/bugzilla/show_bug.cgi?id=39704 ([https](https://issues.apache.org/bugzilla/show_bug.cgi?id=39704) result 301). * [ ] http://jakarta.apache.org/commons/fileupload with 2 occurrences migrated to: https://jakarta.apache.org/commons/fileupload ([https](https://jakarta.apache.org/commons/fileupload) result 301). * [ ] http://jakarta.apache.org/commons/httpclient with 1 occurrences migrated to: https://jakarta.apache.org/commons/httpclient ([https](https://jakarta.apache.org/commons/httpclient) result 301). * [ ] http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd with 1 occurrences migrated to: https://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd ([https](https://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd) result 301). * [ ] http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd with 2 occurrences migrated to: https://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd ([https](https://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd) result 301). * [ ] http://jira.springframework.org with 2 occurrences migrated to: https://jira.springframework.org ([https](https://jira.springframework.org) result 301). * [ ] http://jira.springframework.org/ with 1 occurrences migrated to: https://jira.springframework.org/ ([https](https://jira.springframework.org/) result 301). * [ ] http://jira.springsource.org/SPR with 1 occurrences migrated to: https://jira.springsource.org/SPR ([https](https://jira.springsource.org/SPR) result 301). * [ ] http://logging.apache.org/log4j with 1 occurrences migrated to: https://logging.apache.org/log4j ([https](https://logging.apache.org/log4j) result 301). * [ ] http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html with 1 occurrences migrated to: https://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html ([https](https://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html) result 301). * [ ] http://mockito.org/ (301) with 1 occurrences migrated to: https://mockito.github.io ([https](https://mockito.org/) result 301). * [ ] http://opensource.atlassian.com/projects/spring/secure/Dashboard.jspa with 3 occurrences migrated to: https://opensource.atlassian.com/projects/spring/secure/Dashboard.jspa ([https](https://opensource.atlassian.com/projects/spring/secure/Dashboard.jspa) result 301). * [ ] http://repo.springsource.org/milestone/</url> with 1 occurrences migrated to: https://repo.springsource.org/milestone/</url> ([https](https://repo.springsource.org/milestone/</url>) result 301). * [ ] http://repo.springsource.org/release/</url> with 1 occurrences migrated to: https://repo.springsource.org/release/</url> ([https](https://repo.springsource.org/release/</url>) result 301). * [ ] http://repo.springsource.org/snapshot/</url> with 1 occurrences migrated to: https://repo.springsource.org/snapshot/</url> ([https](https://repo.springsource.org/snapshot/</url>) result 301). * [ ] http://sourceforge.net/tracker/index.php?func=detail&aid=1088866&group_id=39190&atid=424562 with 1 occurrences migrated to: https://sourceforge.net/tracker/index.php?func=detail&aid=1088866&group_id=39190&atid=424562 ([https](https://sourceforge.net/tracker/index.php?func=detail&aid=1088866&group_id=39190&atid=424562) result 301). * [ ] http://springsource.org/spring-integration with 1 occurrences migrated to: https://springsource.org/spring-integration ([https](https://springsource.org/spring-integration) result 301). * [ ] http://www-01.ibm.com/software/webservers/appserv/was/ with 1 occurrences migrated to: https://www-01.ibm.com/software/webservers/appserv/was/ ([https](https://www-01.ibm.com/software/webservers/appserv/was/) result 301). * [ ] http://www.docbook.org/xml/5.0/xsd/docbook.xsd with 49 occurrences migrated to: https://www.docbook.org/xml/5.0/xsd/docbook.xsd ([https](https://www.docbook.org/xml/5.0/xsd/docbook.xsd) result 301). * [ ] http://www.docbook.org/xml/5.0/xsd/xlink.xsd with 49 occurrences migrated to: https://www.docbook.org/xml/5.0/xsd/xlink.xsd ([https](https://www.docbook.org/xml/5.0/xsd/xlink.xsd) result 301). * [ ] http://www.eclipse.org/aspectj with 2 occurrences migrated to: https://www.eclipse.org/aspectj ([https](https://www.eclipse.org/aspectj) result 301). * [ ] http://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html with 1 occurrences migrated to: https://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html ([https](https://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html) result 301). * [ ] http://www.jboss.org/jbossas/ with 1 occurrences migrated to: https://www.jboss.org/jbossas/ ([https](https://www.jboss.org/jbossas/) result 301). * [ ] http://www.junit.org/ with 1 occurrences migrated to: https://www.junit.org/ ([https](https://www.junit.org/) result 301). * [ ] http://www.bea.com/framework.jsp?CNT=index.htm&FP=/content/products/weblogic/server (301) with 1 occurrences migrated to: https://www.oracle.com/bea/index.html?CNT=index.htm&FP=/content/products/weblogic/server ([https](https://www.bea.com/framework.jsp?CNT=index.htm&FP=/content/products/weblogic/server) result 301). * [ ] http://www.oracle.com/technology/products/oc4j/index.html with 1 occurrences migrated to: https://www.oracle.com/technology/products/oc4j/index.html ([https](https://www.oracle.com/technology/products/oc4j/index.html) result 301). * [ ] http://www.sf.net/home.view?siteLanguage=nl with 1 occurrences migrated to: https://www.sf.net/home.view?siteLanguage=nl ([https](https://www.sf.net/home.view?siteLanguage=nl) result 301). * [ ] http://www.springframework.org with 1 occurrences migrated to: https://www.springframework.org ([https](https://www.springframework.org) result 301). * [ ] http://www.springframework.org/webflow with 2 occurrences migrated to: https://www.springframework.org/webflow ([https](https://www.springframework.org/webflow) result 301). * [ ] http://www.springsource.com/products/sts with 4 occurrences migrated to: https://www.springsource.com/products/sts ([https](https://www.springsource.com/products/sts) result 301). * [ ] http://www.springsource.com/repository with 4 occurrences migrated to: https://www.springsource.com/repository ([https](https://www.springsource.com/repository) result 301). * [ ] http://www.springsource.com/repository/app/faq with 1 occurrences migrated to: https://www.springsource.com/repository/app/faq ([https](https://www.springsource.com/repository/app/faq) result 301). * [ ] http://www.springsource.org/documentation with 2 occurrences migrated to: https://www.springsource.org/documentation ([https](https://www.springsource.org/documentation) result 301). * [ ] http://www.springsource.org/javaconfig with 3 occurrences migrated to: https://www.springsource.org/javaconfig ([https](https://www.springsource.org/javaconfig) result 301). * [ ] http://www.springsource.org/roo with 1 occurrences migrated to: https://www.springsource.org/roo ([https](https://www.springsource.org/roo) result 301). * [ ] http://www.springsource.org/springframework-ebr with 1 occurrences migrated to: https://www.springsource.org/springframework-ebr ([https](https://www.springsource.org/springframework-ebr) result 301). * [ ] http://download.oracle.com/javaee/6/api/javax/inject/Scope.html with 1 occurrences migrated to: https://download.oracle.com/javaee/6/api/javax/inject/Scope.html ([https](https://download.oracle.com/javaee/6/api/javax/inject/Scope.html) result 302). * [ ] http://download.oracle.com/javase/6/docs/api/java/beans/ConstructorProperties.html with 1 occurrences migrated to: https://download.oracle.com/javase/6/docs/api/java/beans/ConstructorProperties.html ([https](https://download.oracle.com/javase/6/docs/api/java/beans/ConstructorProperties.html) result 302). * [ ] http://glassfish.dev.java.net/ with 1 occurrences migrated to: https://glassfish.dev.java.net/ ([https](https://glassfish.dev.java.net/) result 302). * [ ] http://java.sun.com/developer/technicalArticles/J2EE/jpa/index.html with 1 occurrences migrated to: https://java.sun.com/developer/technicalArticles/J2EE/jpa/index.html ([https](https://java.sun.com/developer/technicalArticles/J2EE/jpa/index.html) result 302). * [ ] http://java.sun.com/developer/technicalArticles/J2SE/jmx.html with 1 occurrences migrated to: https://java.sun.com/developer/technicalArticles/J2SE/jmx.html ([https](https://java.sun.com/developer/technicalArticles/J2SE/jmx.html) result 302). * [ ] http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html with 1 occurrences migrated to: https://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html ([https](https://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html) result 302). * [ ] http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/package-summary.html with 2 occurrences migrated to: https://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/package-summary.html ([https](https://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/package-summary.html) result 302). * [ ] http://java.sun.com/javaee/javaserverfaces/ with 2 occurrences migrated to: https://java.sun.com/javaee/javaserverfaces/ ([https](https://java.sun.com/javaee/javaserverfaces/) result 302). * [ ] http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html with 1 occurrences migrated to: https://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html ([https](https://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html) result 302). * [ ] http://java.sun.com/products/JavaManagement/ with 1 occurrences migrated to: https://java.sun.com/products/JavaManagement/ ([https](https://java.sun.com/products/JavaManagement/) result 302). * [ ] http://java.sun.com/products/javabeans/ with 1 occurrences migrated to: https://java.sun.com/products/javabeans/ ([https](https://java.sun.com/products/javabeans/) result 302). * [ ] http://java.sun.com/products/javabeans/docs/spec.html with 1 occurrences migrated to: https://java.sun.com/products/javabeans/docs/spec.html ([https](https://java.sun.com/products/javabeans/docs/spec.html) result 302). * [ ] http://java.sun.com/products/javabeans/jaf/downloads/index.html with 1 occurrences migrated to: https://java.sun.com/products/javabeans/jaf/downloads/index.html ([https](https://java.sun.com/products/javabeans/jaf/downloads/index.html) result 302). * [ ] http://java.sun.com/products/javamail/ with 1 occurrences migrated to: https://java.sun.com/products/javamail/ ([https](https://java.sun.com/products/javamail/) result 302). * [ ] http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd with 1 occurrences migrated to: https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd ([https](https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd) result 302). * [ ] http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd with 1 occurrences migrated to: https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd ([https](https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd) result 302). * [ ] http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd with 1 occurrences migrated to: https://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd ([https](https://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd) result 302). * [ ] http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd with 12 occurrences migrated to: https://java.sun.com/xml/ns/persistence/persistence_1_0.xsd ([https](https://java.sun.com/xml/ns/persistence/persistence_1_0.xsd) result 302). * [ ] http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd with 1 occurrences migrated to: https://java.sun.com/xml/ns/persistence/persistence_2_0.xsd ([https](https://java.sun.com/xml/ns/persistence/persistence_2_0.xsd) result 302). * [ ] http://struts.apache.org/2.x/docs/spring-plugin.html with 1 occurrences migrated to: https://struts.apache.org/2.x/docs/spring-plugin.html ([https](https://struts.apache.org/2.x/docs/spring-plugin.html) result 302). * [ ] http://www.springsource.com/produts/sts with 1 occurrences migrated to: https://www.springsource.com/produts/sts ([https](https://www.springsource.com/produts/sts) result 302). * [ ] http://www.springsource.org/download/community with 2 occurrences migrated to: https://www.springsource.org/download/community ([https](https://www.springsource.org/download/community) result 302). These URLs were intentionally ignored. * http://HOST:8080/remoting/AccountService with 1 occurrences * http://docbook.org/ns/docbook with 100 occurrences * http://example/ with 1 occurrences * http://jakarta.apache.org/log4j/ with 19 occurrences * http://java.sun.com/dtd/properties.dtd with 4 occurrences * http://java.sun.com/xml/ns/j2ee with 2 occurrences * http://java.sun.com/xml/ns/javaee with 4 occurrences * http://java.sun.com/xml/ns/persistence with 28 occurrences * http://localhost/content with 1 occurrences * http://localhost/content.atom with 1 occurrences * http://localhost/registration.html with 1 occurrences * http://localhost:8080 with 3 occurrences * http://localhost:8080/ with 1 occurrences * http://localhost:8080/account/services/accountService with 2 occurrences * http://localhost:8080/account/services/accountService?WSDL with 1 occurrences * http://localhost:8080/people with 2 occurrences * http://localhost:8888/AccountServiceEndpoint?WSDL with 1 occurrences * http://remotehost:8080/remoting/AccountService with 2 occurrences * http://samples.springframework.org/flight with 7 occurrences * http://schemas.microsoft.com/visio/2003/SVGExtensions/ with 5 occurrences * http://testng.org/ with 1 occurrences * http://www.foo.com/schema/component with 6 occurrences * http://www.greeting.com/goodbye/ with 1 occurrences * http://www.greeting.com/hello/ with 1 occurrences * http://www.mycompany.com/schema/myns with 4 occurrences * http://www.springframework.org/schema/aop with 221 occurrences * http://www.springframework.org/schema/beans with 762 occurrences * http://www.springframework.org/schema/beans/test with 2 occurrences * http://www.springframework.org/schema/c with 11 occurrences * http://www.springframework.org/schema/cache with 12 occurrences * http://www.springframework.org/schema/context with 164 occurrences * http://www.springframework.org/schema/jdbc with 45 occurrences * http://www.springframework.org/schema/jee with 9 occurrences * http://www.springframework.org/schema/jms with 6 occurrences * http://www.springframework.org/schema/lang with 38 occurrences * http://www.springframework.org/schema/mvc with 54 occurrences * http://www.springframework.org/schema/oxm with 4 occurrences * http://www.springframework.org/schema/p with 29 occurrences * http://www.springframework.org/schema/security with 2 occurrences * http://www.springframework.org/schema/task with 12 occurrences * http://www.springframework.org/schema/tx with 54 occurrences * http://www.springframework.org/schema/util with 43 occurrences * http://www.springframework.org/spring-ws with 1 occurrences * http://www.springframework.org/tags with 1 occurrences * http://www.springframework.org/tags/form with 1 occurrences * http://www.w3.org/1998/Math/MathML with 1 occurrences * http://www.w3.org/1999/XSL/Transform with 1 occurrences * http://www.w3.org/1999/xlink with 99 occurrences * http://www.w3.org/2000/svg with 5 occurrences * http://www.w3.org/2001/XInclude with 97 occurrences * http://www.w3.org/2001/XMLSchema with 5 occurrences * http://www.w3.org/2001/XMLSchema-instance with 448 occurrences * http://www.w3.org/2005/Atom with 3 occurrences Closes gh-22670
1643 lines
70 KiB
XML
1643 lines
70 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<chapter xml:id="jmx"
|
|
xmlns="http://docbook.org/ns/docbook" version="5.0"
|
|
xmlns:xl="http://www.w3.org/1999/xlink"
|
|
xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:schemaLocation="
|
|
http://docbook.org/ns/docbook https://www.docbook.org/xml/5.0/xsd/docbook.xsd
|
|
http://www.w3.org/1999/xlink https://www.docbook.org/xml/5.0/xsd/xlink.xsd">
|
|
<title>JMX</title>
|
|
|
|
<section xml:id="jmx-introduction">
|
|
<title>Introduction</title>
|
|
|
|
<para>The JMX support in Spring provides you with the features to easily
|
|
and transparently integrate your Spring application into a JMX
|
|
infrastructure.</para>
|
|
|
|
<sidebar>
|
|
<title>JMX?</title>
|
|
|
|
<para>This chapter is not an introduction to JMX... it doesn't try to
|
|
explain the motivations of why one might want to use JMX (or indeed what
|
|
the letters JMX actually stand for). If you are new to JMX, check out
|
|
<xref linkend="jmx-resources" /> at the end of this chapter.</para>
|
|
</sidebar>
|
|
|
|
<para>Specifically, Spring's JMX support provides four core
|
|
features:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>The automatic registration of <emphasis>any</emphasis> Spring
|
|
bean as a JMX MBean</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>A flexible mechanism for controlling the management interface of
|
|
your beans</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>The declarative exposure of MBeans over remote, JSR-160
|
|
connectors</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>The simple proxying of both local and remote MBean
|
|
resources</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>These features are designed to work without coupling your
|
|
application components to either Spring or JMX interfaces and classes.
|
|
Indeed, for the most part your application classes need not be aware of
|
|
either Spring or JMX in order to take advantage of the Spring JMX
|
|
features.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-exporting">
|
|
<title>Exporting your beans to JMX</title>
|
|
|
|
<para>The core class in Spring's JMX framework is the
|
|
<classname>MBeanExporter</classname>. This class is responsible for taking
|
|
your Spring beans and registering them with a JMX
|
|
<interfacename>MBeanServer</interfacename>. For example, consider the following
|
|
class:</para>
|
|
|
|
<programlisting language="java"><![CDATA[package org.springframework.jmx;
|
|
|
|
public class JmxTestBean implements IJmxTestBean {
|
|
|
|
private String name;
|
|
private int age;
|
|
private boolean isSuperman;
|
|
|
|
public int getAge() {
|
|
return age;
|
|
}
|
|
|
|
public void setAge(int age) {
|
|
this.age = age;
|
|
}
|
|
|
|
public void setName(String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
public int add(int x, int y) {
|
|
return x + y;
|
|
}
|
|
|
|
public void dontExposeMe() {
|
|
throw new RuntimeException();
|
|
}
|
|
}]]></programlisting>
|
|
|
|
<para>To expose the properties and methods of this bean as attributes and
|
|
operations of an MBean you simply configure an instance of the
|
|
<classname>MBeanExporter</classname> class in your configuration file and
|
|
pass in the bean as shown below:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
]]><lineannotation><!-- this bean must not be lazily initialized if the exporting is to happen --></lineannotation><![CDATA[
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"]]> <emphasis
|
|
role="bold">lazy-init="false"</emphasis><![CDATA[>
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="bean:name=testBean1" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
</beans>]]></programlisting>
|
|
|
|
<para>The pertinent bean definition from the above configuration snippet
|
|
is the <literal>exporter</literal> bean. The <literal>beans</literal>
|
|
property tells the <classname>MBeanExporter</classname> exactly which of
|
|
your beans must be exported to the JMX <interfacename>MBeanServer</interfacename>.
|
|
In the default configuration, the key of each entry in the
|
|
<literal>beans</literal> <interfacename>Map</interfacename> is used as the
|
|
<classname>ObjectName</classname> for the bean referenced by the
|
|
corresponding entry value. This behavior can be changed as described in
|
|
<xref linkend="jmx-naming"/>.</para>
|
|
|
|
<para>With this configuration the <literal>testBean</literal> bean is
|
|
exposed as an MBean under the <classname>ObjectName</classname>
|
|
<literal>bean:name=testBean1</literal>. By default, all
|
|
<emphasis>public</emphasis> properties of the bean are exposed as
|
|
attributes and all <emphasis>public</emphasis> methods (bar those
|
|
inherited from the <classname>Object</classname> class) are exposed as
|
|
operations.</para>
|
|
|
|
<section xml:id="jmx-exporting-mbeanserver">
|
|
<title>Creating an <interfacename>MBeanServer</interfacename></title>
|
|
|
|
<para>The above configuration assumes that the application is running in
|
|
an environment that has one (and only one)
|
|
<interfacename>MBeanServer</interfacename> already running. In this case, Spring
|
|
will attempt to locate the running <interfacename>MBeanServer</interfacename>
|
|
and register your beans with that server (if any). This behavior is
|
|
useful when your application is running inside a container such as
|
|
Tomcat or IBM WebSphere that has its own
|
|
<interfacename>MBeanServer</interfacename>.</para>
|
|
|
|
<para>However, this approach is of no use in a standalone environment,
|
|
or when running inside a container that does not provide an
|
|
<interfacename>MBeanServer</interfacename>. To address this you can create an
|
|
<interfacename>MBeanServer</interfacename> instance declaratively by adding an
|
|
instance of the
|
|
<classname>org.springframework.jmx.support.MBeanServerFactoryBean</classname>
|
|
class to your configuration. You can also ensure that a specific
|
|
<interfacename>MBeanServer</interfacename> is used by setting the value of the
|
|
<classname>MBeanExporter</classname>'s <literal>server</literal>
|
|
property to the <interfacename>MBeanServer</interfacename> value returned by an
|
|
<classname>MBeanServerFactoryBean</classname>; for example:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"/>
|
|
|
|
]]><lineannotation><!--
|
|
this bean needs to be eagerly pre-instantiated in order for the exporting to occur;
|
|
this means that it must not be marked as lazily initialized
|
|
--></lineannotation><![CDATA[
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="bean:name=testBean1" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
<property name="server" ref="mbeanServer"/>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
</beans>]]></programlisting>
|
|
|
|
<para>Here an instance of <interfacename>MBeanServer</interfacename> is created
|
|
by the <classname>MBeanServerFactoryBean</classname> and is supplied to
|
|
the <classname>MBeanExporter</classname> via the server property. When
|
|
you supply your own <interfacename>MBeanServer</interfacename> instance, the
|
|
<classname>MBeanExporter</classname> will not attempt to locate a
|
|
running <interfacename>MBeanServer</interfacename> and will use the supplied
|
|
<interfacename>MBeanServer</interfacename> instance. For this to work correctly,
|
|
you must (of course) have a JMX implementation on your classpath.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-mbean-server">
|
|
<title>Reusing an existing <interfacename>MBeanServer</interfacename></title>
|
|
|
|
<para>If no server is specified, the <classname>MBeanExporter</classname>
|
|
tries to automatically detect a running <interfacename>MBeanServer</interfacename>.
|
|
This works in most environment where only one
|
|
<interfacename>MBeanServer</interfacename> instance is used, however when multiple
|
|
instances exist, the exporter might pick the wrong server. In such
|
|
cases, one should use the <interfacename>MBeanServer</interfacename>
|
|
<literal>agentId</literal> to indicate which instance to be used:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
|
|
]]><lineannotation><!-- indicate to first look for a server --></lineannotation><![CDATA[
|
|
<property name="locateExistingServerIfPossible" value="true"/>
|
|
]]><lineannotation><!-- search for the MBeanServer instance with the given agentId --></lineannotation><![CDATA[
|
|
<property name="agentId" value="]]><emphasis><![CDATA[<MBeanServer instance agentId>]]></emphasis><![CDATA["/>
|
|
</bean>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="server" ref="mbeanServer"/>
|
|
...
|
|
</bean>
|
|
</beans>]]></programlisting>
|
|
|
|
<para>For platforms/cases where the existing <interfacename>MBeanServer</interfacename>
|
|
has a dynamic (or unknown) <literal>agentId</literal> which is retrieved through lookup
|
|
methods, one should use <link linkend="beans-factory-class-static-factory-method">factory-method</link>:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="server">
|
|
]]><lineannotation><!-- Custom MBeanServerLocator --></lineannotation><![CDATA[
|
|
<bean class="platform.package.MBeanServerLocator" factory-method="locateMBeanServer"/>
|
|
</property>
|
|
|
|
]]><lineannotation><!-- other beans here --></lineannotation><![CDATA[
|
|
|
|
</bean>
|
|
</beans>]]></programlisting>
|
|
</section>
|
|
|
|
<section xml:id="jmx-exporting-lazy">
|
|
<title>Lazy-initialized MBeans</title>
|
|
|
|
<para>If you configure a bean with the
|
|
<classname>MBeanExporter</classname> that is also configured for lazy
|
|
initialization, then the <classname>MBeanExporter</classname> will
|
|
<emphasis role="bold">not</emphasis> break this contract and will avoid
|
|
instantiating the bean. Instead, it will register a proxy with
|
|
the <interfacename>MBeanServer</interfacename> and will defer obtaining the bean
|
|
from the container until the first invocation on the proxy occurs.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-exporting-auto">
|
|
<title>Automatic registration of MBeans</title>
|
|
|
|
<para>Any beans that are exported through the
|
|
<classname>MBeanExporter</classname> and are already valid MBeans are
|
|
registered as-is with the <interfacename>MBeanServer</interfacename> without
|
|
further intervention from Spring. MBeans can be automatically detected
|
|
by the <classname>MBeanExporter</classname> by setting the
|
|
<literal>autodetect</literal> property to <literal>true</literal>:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="autodetect" value="true"/>
|
|
</bean>
|
|
|
|
<bean name="spring:mbean=true" class="org.springframework.jmx.export.TestDynamicMBean"/>]]></programlisting>
|
|
|
|
<para>Here, the bean called <literal>spring:mbean=true</literal> is
|
|
already a valid JMX MBean and will be automatically registered by
|
|
Spring. By default, beans that are autodetected for JMX registration
|
|
have their bean name used as the <classname>ObjectName</classname>. This
|
|
behavior can be overridden as detailed in <xref linkend="jmx-naming" />.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-exporting-registration-behavior">
|
|
<title>Controlling the registration behavior</title>
|
|
|
|
<para>Consider the scenario where a Spring
|
|
<classname>MBeanExporter</classname> attempts to register an
|
|
<classname>MBean</classname> with an <interfacename>MBeanServer</interfacename>
|
|
using the <classname>ObjectName</classname>
|
|
<literal>'bean:name=testBean1'</literal>. If an
|
|
<classname>MBean</classname> instance has already been registered under
|
|
that same <classname>ObjectName</classname>, the default behavior is to
|
|
fail (and throw an
|
|
<exceptionname>InstanceAlreadyExistsException</exceptionname>).</para>
|
|
|
|
<para>It is possible to control the behavior of exactly what happens
|
|
when an <classname>MBean</classname> is registered with an
|
|
<interfacename>MBeanServer</interfacename>. Spring's JMX support allows for
|
|
three different registration behaviors to control the registration
|
|
behavior when the registration process finds that an
|
|
<classname>MBean</classname> has already been registered under the same
|
|
<classname>ObjectName</classname>; these registration behaviors are
|
|
summarized on the following table:</para>
|
|
|
|
<table xml:id="jmx-registration-behaviors">
|
|
<title>Registration Behaviors</title>
|
|
|
|
<tgroup cols="2">
|
|
<colspec align="left" />
|
|
|
|
<colspec colnum="1" colwidth="*" />
|
|
|
|
<colspec colnum="2" colwidth="*" />
|
|
|
|
<thead>
|
|
<row>
|
|
<entry align="center">Registration behavior</entry>
|
|
|
|
<entry align="center">Explanation</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><para><literal>REGISTRATION_FAIL_ON_EXISTING</literal></para></entry>
|
|
|
|
<entry><para> This is the default registration behavior. If an
|
|
<classname>MBean</classname> instance has already been
|
|
registered under the same <classname>ObjectName</classname>,
|
|
the <classname>MBean</classname> that is being registered will
|
|
not be registered and an
|
|
<exceptionname>InstanceAlreadyExistsException</exceptionname> will be
|
|
thrown. The existing <classname>MBean</classname> is
|
|
unaffected. </para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><literal>REGISTRATION_IGNORE_EXISTING</literal></para></entry>
|
|
|
|
<entry><para> If an <classname>MBean</classname> instance has
|
|
already been registered under the same
|
|
<classname>ObjectName</classname>, the
|
|
<classname>MBean</classname> that is being registered will
|
|
<emphasis>not</emphasis> be registered. The existing
|
|
<classname>MBean</classname> is unaffected, and no
|
|
<exceptionname>Exception</exceptionname> will be thrown. </para>
|
|
<para> This is useful in settings where multiple applications
|
|
want to share a common <classname>MBean</classname> in a
|
|
shared <interfacename>MBeanServer</interfacename>. </para></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><para><literal>REGISTRATION_REPLACE_EXISTING</literal></para></entry>
|
|
|
|
<entry><para> If an <classname>MBean</classname> instance has
|
|
already been registered under the same
|
|
<classname>ObjectName</classname>, the existing
|
|
<classname>MBean</classname> that was previously registered
|
|
will be unregistered and the new <classname>MBean</classname>
|
|
will be registered in its place (the new
|
|
<classname>MBean</classname> effectively replaces the previous
|
|
instance). </para></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>The above values are defined as constants on the
|
|
<classname>MBeanRegistrationSupport</classname> class (the
|
|
<classname>MBeanExporter</classname> class derives from this
|
|
superclass). If you want to change the default registration behavior,
|
|
you simply need to set the value of the
|
|
<literal>registrationBehaviorName</literal> property on your
|
|
<classname>MBeanExporter</classname> definition to one of those
|
|
values.</para>
|
|
|
|
<para>The following example illustrates how to effect a change from the
|
|
default registration behavior to the
|
|
<literal>REGISTRATION_REPLACE_EXISTING</literal> behavior:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="bean:name=testBean1" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
<property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
</beans>]]></programlisting>
|
|
</section>
|
|
</section>
|
|
|
|
<section xml:id="jmx-interface">
|
|
<title>Controlling the management interface of your beans</title>
|
|
|
|
<para>In the previous example, you had little control over the management
|
|
interface of your bean; <emphasis>all</emphasis> of the
|
|
<emphasis>public</emphasis> properties and methods of each exported bean
|
|
was exposed as JMX attributes and operations respectively. To exercise
|
|
finer-grained control over exactly which properties and methods of your
|
|
exported beans are actually exposed as JMX attributes and operations,
|
|
Spring JMX provides a comprehensive and extensible mechanism for
|
|
controlling the management interfaces of your beans.</para>
|
|
|
|
<section xml:id="jmx-interface-assembler">
|
|
<title>The <interfacename>MBeanInfoAssembler</interfacename>
|
|
Interface</title>
|
|
|
|
<para>Behind the scenes, the <classname>MBeanExporter</classname>
|
|
delegates to an implementation of the
|
|
<classname>org.springframework.jmx.export.assembler.MBeanInfoAssembler</classname>
|
|
interface which is responsible for defining the management interface of
|
|
each bean that is being exposed. The default implementation,
|
|
<classname>org.springframework.jmx.export.assembler.SimpleReflectiveMBeanInfoAssembler</classname>,
|
|
simply defines a management interface that exposes all public properties
|
|
and methods (as you saw in the previous examples). Spring provides two
|
|
additional implementations of the
|
|
<interfacename>MBeanInfoAssembler</interfacename> interface that allow
|
|
you to control the generated management interface using either
|
|
source-level metadata or any arbitrary interface.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-interface-metadata">
|
|
<title>Using Source-Level Metadata (JDK 5.0 annotations)</title>
|
|
|
|
<para>Using the <classname>MetadataMBeanInfoAssembler</classname> you
|
|
can define the management interfaces for your beans using source level
|
|
metadata. The reading of metadata is encapsulated by the
|
|
<classname>org.springframework.jmx.export.metadata.JmxAttributeSource</classname>
|
|
interface. Spring JMX provides a default implementation which uses JDK 5.0 annotations, namely
|
|
<classname>org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource</classname>. The
|
|
<classname>MetadataMBeanInfoAssembler</classname>
|
|
<emphasis>must</emphasis> be configured with an implementation instance
|
|
of the <classname>JmxAttributeSource</classname> interface for it to
|
|
function correctly (there is <emphasis>no</emphasis> default).</para>
|
|
<para>To mark a bean for export to JMX, you should annotate the bean
|
|
class with the <classname>ManagedResource</classname> annotation. Each
|
|
method you wish to expose as an operation must be marked with the
|
|
<classname>ManagedOperation</classname> annotation and each property you
|
|
wish to expose must be marked with the
|
|
<classname>ManagedAttribute</classname> annotation. When marking
|
|
properties you can omit either the annotation of the getter or the
|
|
setter to create a write-only or read-only attribute
|
|
respectively.</para>
|
|
|
|
<para>The example below shows the annotated version of the
|
|
<classname>JmxTestBean</classname> class that you saw earlier:</para>
|
|
<programlisting language="java"><![CDATA[package org.springframework.jmx;
|
|
|
|
import org.springframework.jmx.export.annotation.ManagedResource;
|
|
import org.springframework.jmx.export.annotation.ManagedOperation;
|
|
import org.springframework.jmx.export.annotation.ManagedAttribute;
|
|
|
|
@ManagedResource(objectName="bean:name=testBean4", description="My Managed Bean", log=true,
|
|
logFile="jmx.log", currencyTimeLimit=15, persistPolicy="OnUpdate", persistPeriod=200,
|
|
persistLocation="foo", persistName="bar")
|
|
public class AnnotationTestBean implements IJmxTestBean {
|
|
|
|
private String name;
|
|
private int age;
|
|
|
|
@ManagedAttribute(description="The Age Attribute", currencyTimeLimit=15)
|
|
public int getAge() {
|
|
return age;
|
|
}
|
|
|
|
public void setAge(int age) {
|
|
this.age = age;
|
|
}
|
|
|
|
@ManagedAttribute(description="The Name Attribute",
|
|
currencyTimeLimit=20,
|
|
defaultValue="bar",
|
|
persistPolicy="OnUpdate")
|
|
public void setName(String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
@ManagedAttribute(defaultValue="foo", persistPeriod=300)
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
@ManagedOperation(description="Add two numbers")
|
|
@ManagedOperationParameters({
|
|
@ManagedOperationParameter(name = "x", description = "The first number"),
|
|
@ManagedOperationParameter(name = "y", description = "The second number")})
|
|
public int add(int x, int y) {
|
|
return x + y;
|
|
}
|
|
|
|
public void dontExposeMe() {
|
|
throw new RuntimeException();
|
|
}
|
|
}]]></programlisting>
|
|
|
|
<para>Here you can see that the <classname>JmxTestBean</classname> class
|
|
is marked with the <classname>ManagedResource</classname> annotation and
|
|
that this <classname>ManagedResource</classname> annotation is configured
|
|
with a set of properties. These properties can be used to configure
|
|
various aspects of the MBean that is generated by the
|
|
<classname>MBeanExporter</classname>, and are explained in greater
|
|
detail later in section entitled <xref
|
|
linkend="jmx-interface-metadata-types" />.</para>
|
|
|
|
<para>You will also notice that both the <literal>age</literal> and
|
|
<literal>name</literal> properties are annotated with the
|
|
<classname>ManagedAttribute</classname> annotation, but in the case of
|
|
the <literal>age</literal> property, only the getter is marked. This
|
|
will cause both of these properties to be included in the management
|
|
interface as attributes, but the <literal>age</literal> attribute will
|
|
be read-only.</para>
|
|
|
|
<para>Finally, you will notice that the <literal>add(int, int)</literal>
|
|
method is marked with the <classname>ManagedOperation</classname>
|
|
attribute whereas the <literal>dontExposeMe()</literal> method is not.
|
|
This will cause the management interface to contain only one operation,
|
|
<literal>add(int, int)</literal>, when using the
|
|
<classname>MetadataMBeanInfoAssembler</classname>.</para>
|
|
|
|
<para>The configuration below shows how you configure the
|
|
<classname>MBeanExporter</classname> to use the
|
|
<classname>MetadataMBeanInfoAssembler</classname>:</para>
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="assembler" ref="assembler"/>
|
|
<property name="namingStrategy" ref="namingStrategy"/>
|
|
<property name="autodetect" value="true"/>
|
|
</bean>
|
|
|
|
<bean id="jmxAttributeSource"
|
|
class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
|
|
|
|
]]><lineannotation><!-- will create management interface using annotation metadata --></lineannotation><![CDATA[
|
|
<bean id="assembler"
|
|
class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
|
|
<property name="attributeSource" ref="jmxAttributeSource"/>
|
|
</bean>
|
|
|
|
]]><lineannotation><!-- will pick up the ObjectName from the annotation --></lineannotation><![CDATA[
|
|
<bean id="namingStrategy"
|
|
class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
|
|
<property name="attributeSource" ref="jmxAttributeSource"/>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.AnnotationTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
</beans>]]></programlisting>
|
|
|
|
|
|
<para>Here you can see that an
|
|
<classname>MetadataMBeanInfoAssembler</classname> bean has been
|
|
configured with an instance of the
|
|
<classname>AnnotationJmxAttributeSource</classname> class and passed to
|
|
the <classname>MBeanExporter</classname> through the assembler property.
|
|
This is all that is required to take advantage of metadata-driven
|
|
management interfaces for your Spring-exposed MBeans.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-interface-metadata-types">
|
|
<title>Source-Level Metadata Types</title>
|
|
|
|
<para>The following source level metadata types are available for use in
|
|
Spring JMX:</para>
|
|
|
|
<para><table xml:id="jmx-metadata-types">
|
|
<title>Source-Level Metadata Types</title>
|
|
|
|
<tgroup cols="3">
|
|
<colspec align="left" />
|
|
|
|
<colspec colname="spycolgen1" colnum="1" colwidth="*" />
|
|
|
|
<colspec colname="spycolgen2" colnum="2" colwidth="*" />
|
|
|
|
<thead>
|
|
<row>
|
|
<entry align="center">Purpose</entry>
|
|
|
|
<entry align="center">Annotation</entry>
|
|
|
|
<entry align="center">Annotation Type</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry>Mark all instances of a <classname>Class</classname> as
|
|
JMX managed resources</entry>
|
|
|
|
<entry><literal>@ManagedResource</literal></entry>
|
|
|
|
<entry>Class</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>Mark a method as a JMX operation</entry>
|
|
|
|
<entry><literal>@ManagedOperation</literal></entry>
|
|
|
|
<entry>Method</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>Mark a getter or setter as one half of a JMX
|
|
attribute</entry>
|
|
|
|
<entry><classname>@ManagedAttribute</classname></entry>
|
|
|
|
<entry>Method (only getters and setters)</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>Define descriptions for operation parameters</entry>
|
|
|
|
<entry><classname>@ManagedOperationParameter</classname> and
|
|
<classname>@ManagedOperationParameters</classname></entry>
|
|
|
|
<entry>Method</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table></para>
|
|
|
|
<para>The following configuration parameters are available for use on
|
|
these source-level metadata types:</para>
|
|
|
|
<para><table xml:id="jmx-metadata-parameters">
|
|
<title>Source-Level Metadata Parameters</title>
|
|
|
|
<tgroup cols="3">
|
|
<colspec align="left" />
|
|
|
|
<colspec colname="spycolgen1" colnum="1" colwidth="*" />
|
|
|
|
<colspec colname="spycolgen2" colnum="2" colwidth="*" />
|
|
|
|
<thead>
|
|
<row>
|
|
<entry align="center">Parameter</entry>
|
|
|
|
<entry align="center">Description</entry>
|
|
|
|
<entry align="center">Applies to</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><classname>ObjectName</classname></entry>
|
|
|
|
<entry>Used by <classname>MetadataNamingStrategy</classname>
|
|
to determine the <classname>ObjectName</classname> of a
|
|
managed resource</entry>
|
|
|
|
<entry><classname>ManagedResource</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>description</literal></entry>
|
|
|
|
<entry>Sets the friendly description of the resource,
|
|
attribute or operation</entry>
|
|
|
|
<entry><classname>ManagedResource</classname>,
|
|
<classname>ManagedAttribute</classname>,
|
|
<classname>ManagedOperation</classname>,
|
|
<classname>ManagedOperationParameter</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>currencyTimeLimit</literal></entry>
|
|
|
|
<entry>Sets the value of the
|
|
<literal>currencyTimeLimit</literal> descriptor field</entry>
|
|
|
|
<entry><classname>ManagedResource</classname>,
|
|
<classname>ManagedAttribute</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>defaultValue</literal></entry>
|
|
|
|
<entry>Sets the value of the <literal>defaultValue</literal>
|
|
descriptor field</entry>
|
|
|
|
<entry><classname>ManagedAttribute</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>log</literal></entry>
|
|
|
|
<entry>Sets the value of the <literal>log</literal> descriptor
|
|
field</entry>
|
|
|
|
<entry><classname>ManagedResource</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>logFile</literal></entry>
|
|
|
|
<entry>Sets the value of the <literal>logFile</literal>
|
|
descriptor field</entry>
|
|
|
|
<entry><classname>ManagedResource</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>persistPolicy</literal></entry>
|
|
|
|
<entry>Sets the value of the <literal>persistPolicy</literal>
|
|
descriptor field</entry>
|
|
|
|
<entry><classname>ManagedResource</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>persistPeriod</literal></entry>
|
|
|
|
<entry>Sets the value of the <literal>persistPeriod</literal>
|
|
descriptor field</entry>
|
|
|
|
<entry><classname>ManagedResource</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>persistLocation</literal></entry>
|
|
|
|
<entry>Sets the value of the
|
|
<literal>persistLocation</literal> descriptor field</entry>
|
|
|
|
<entry><classname>ManagedResource</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>persistName</literal></entry>
|
|
|
|
<entry>Sets the value of the <literal>persistName</literal>
|
|
descriptor field</entry>
|
|
|
|
<entry><classname>ManagedResource</classname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>name</literal></entry>
|
|
|
|
<entry>Sets the display name of an operation parameter</entry>
|
|
|
|
<entry><literal>ManagedOperationParameter</literal></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><literal>index</literal></entry>
|
|
|
|
<entry>Sets the index of an operation parameter</entry>
|
|
|
|
<entry><literal>ManagedOperationParameter</literal></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table></para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-interface-autodetect">
|
|
<title>The <classname>AutodetectCapableMBeanInfoAssembler</classname>
|
|
interface</title>
|
|
|
|
<para>To simplify configuration even further, Spring introduces the
|
|
<classname>AutodetectCapableMBeanInfoAssembler</classname> interface
|
|
which extends the <interfacename>MBeanInfoAssembler</interfacename>
|
|
interface to add support for autodetection of MBean resources. If you
|
|
configure the <classname>MBeanExporter</classname> with an instance of
|
|
<classname>AutodetectCapableMBeanInfoAssembler</classname> then it is
|
|
allowed to "vote" on the inclusion of beans for exposure to JMX.</para>
|
|
|
|
<para>Out of the box, the only implementation of the
|
|
<classname>AutodetectCapableMBeanInfo</classname> interface is the
|
|
<classname>MetadataMBeanInfoAssembler</classname> which will vote to
|
|
include any bean which is marked with the
|
|
<classname>ManagedResource</classname> attribute. The default approach
|
|
in this case is to use the bean name as the
|
|
<classname>ObjectName</classname> which results in a configuration like
|
|
this:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
]]><lineannotation><!-- notice how no 'beans' are explicitly configured here --></lineannotation><![CDATA[
|
|
<property name="autodetect" value="true"/>
|
|
<property name="assembler" ref="assembler"/>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
<bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
|
|
<property name="attributeSource">
|
|
<bean class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
|
|
</property>
|
|
</bean>
|
|
|
|
</beans>]]></programlisting>
|
|
|
|
<para>Notice that in this configuration no beans are passed to the
|
|
<classname>MBeanExporter</classname>; however, the
|
|
<classname>JmxTestBean</classname> will still be registered since it is
|
|
marked with the <classname>ManagedResource</classname> attribute and the
|
|
<classname>MetadataMBeanInfoAssembler</classname> detects this and votes
|
|
to include it. The only problem with this approach is that the name of
|
|
the <classname>JmxTestBean</classname> now has business meaning. You can
|
|
address this issue by changing the default behavior for
|
|
<classname>ObjectName</classname> creation as defined in
|
|
<xref linkend="jmx-naming" />.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-interface-java">
|
|
<title>Defining management interfaces using Java interfaces</title>
|
|
|
|
<para>In addition to the
|
|
<classname>MetadataMBeanInfoAssembler</classname>, Spring also includes
|
|
the <classname>InterfaceBasedMBeanInfoAssembler</classname> which allows
|
|
you to constrain the methods and properties that are exposed based on
|
|
the set of methods defined in a collection of interfaces.</para>
|
|
|
|
<para>Although the standard mechanism for exposing MBeans is to use
|
|
interfaces and a simple naming scheme, the
|
|
<classname>InterfaceBasedMBeanInfoAssembler</classname> extends this
|
|
functionality by removing the need for naming conventions, allowing you
|
|
to use more than one interface and removing the need for your beans to
|
|
implement the MBean interfaces.</para>
|
|
|
|
<para>Consider this interface that is used to define a management
|
|
interface for the <classname>JmxTestBean</classname> class that you saw
|
|
earlier:</para>
|
|
|
|
<programlisting language="java"><![CDATA[public interface IJmxTestBean {
|
|
|
|
public int add(int x, int y);
|
|
|
|
public long myOperation();
|
|
|
|
public int getAge();
|
|
|
|
public void setAge(int age);
|
|
|
|
public void setName(String name);
|
|
|
|
public String getName();
|
|
}]]></programlisting>
|
|
|
|
<para>This interface defines the methods and properties that will be
|
|
exposed as operations and attributes on the JMX MBean. The code below
|
|
shows how to configure Spring JMX to use this interface as the
|
|
definition for the management interface:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="bean:name=testBean5" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
<property name="assembler">
|
|
<bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
|
|
<property name="managedInterfaces">
|
|
<value>org.springframework.jmx.IJmxTestBean</value>
|
|
</property>
|
|
</bean>
|
|
</property>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
</beans>]]></programlisting>
|
|
|
|
<para>Here you can see that the
|
|
<classname>InterfaceBasedMBeanInfoAssembler</classname> is configured to
|
|
use the <interfacename>IJmxTestBean</interfacename> interface when
|
|
constructing the management interface for any bean. It is important to
|
|
understand that beans processed by the
|
|
<classname>InterfaceBasedMBeanInfoAssembler</classname> are
|
|
<emphasis>not</emphasis> required to implement the interface used to
|
|
generate the JMX management interface.</para>
|
|
|
|
<para>In the case above, the <interfacename>IJmxTestBean</interfacename>
|
|
interface is used to construct all management interfaces for all beans.
|
|
In many cases this is not the desired behavior and you may want to use
|
|
different interfaces for different beans. In this case, you can pass
|
|
<classname>InterfaceBasedMBeanInfoAssembler</classname> a
|
|
<classname>Properties</classname> instance via the
|
|
<literal>interfaceMappings</literal> property, where the key of each
|
|
entry is the bean name and the value of each entry is a comma-separated
|
|
list of interface names to use for that bean.</para>
|
|
|
|
<para>If no management interface is specified through either the
|
|
<literal>managedInterfaces</literal> or
|
|
<literal>interfaceMappings</literal> properties, then the
|
|
<classname>InterfaceBasedMBeanInfoAssembler</classname> will reflect on
|
|
the bean and use all of the interfaces implemented by that bean to
|
|
create the management interface.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-interface-methodnames">
|
|
<title>Using
|
|
<classname>MethodNameBasedMBeanInfoAssembler</classname></title>
|
|
|
|
<para>The <classname>MethodNameBasedMBeanInfoAssembler</classname>
|
|
allows you to specify a list of method names that will be exposed to JMX
|
|
as attributes and operations. The code below shows a sample
|
|
configuration for this:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="bean:name=testBean5" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
<property name="assembler">
|
|
<bean class="org.springframework.jmx.export.assembler.MethodNameBasedMBeanInfoAssembler">
|
|
<property name="managedMethods">
|
|
<value>add,myOperation,getName,setName,getAge</value>
|
|
</property>
|
|
</bean>
|
|
</property>
|
|
</bean>]]></programlisting>
|
|
|
|
<para>Here you can see that the methods <literal>add</literal> and
|
|
<literal>myOperation</literal> will be exposed as JMX operations and
|
|
<literal>getName()</literal>, <literal>setName(String)</literal> and
|
|
<literal>getAge()</literal> will be exposed as the appropriate half of a
|
|
JMX attribute. In the code above, the method mappings apply to beans
|
|
that are exposed to JMX. To control method exposure on a bean-by-bean
|
|
basis, use the <literal>methodMappings</literal> property of
|
|
<classname>MethodNameMBeanInfoAssembler</classname> to map bean names to
|
|
lists of method names.</para>
|
|
</section>
|
|
</section>
|
|
|
|
<section xml:id="jmx-naming">
|
|
<title>Controlling the <classname>ObjectName</classname>s for your beans</title>
|
|
|
|
<para>Behind the scenes, the <classname>MBeanExporter</classname>
|
|
delegates to an implementation of the
|
|
<classname>ObjectNamingStrategy</classname> to obtain
|
|
<classname>ObjectName</classname>s for each of the beans it is
|
|
registering. The default implementation,
|
|
<classname>KeyNamingStrategy</classname>, will, by default, use the key of
|
|
the <literal>beans</literal> <interfacename>Map</interfacename> as the
|
|
<classname>ObjectName</classname>. In addition, the
|
|
<classname>KeyNamingStrategy</classname> can map the key of the
|
|
<literal>beans</literal> <interfacename>Map</interfacename> to an entry in a
|
|
<classname>Properties</classname> file (or files) to resolve the
|
|
<classname>ObjectName</classname>. In addition to the
|
|
<classname>KeyNamingStrategy</classname>, Spring provides two additional
|
|
<classname>ObjectNamingStrategy</classname> implementations: the
|
|
<classname>IdentityNamingStrategy</classname> that builds an
|
|
<classname>ObjectName</classname> based on the JVM identity of the bean
|
|
and the <classname>MetadataNamingStrategy</classname> that uses source
|
|
level metadata to obtain the <classname>ObjectName</classname>.</para>
|
|
|
|
<section xml:id="jmx-naming-properties">
|
|
<title>Reading <classname>ObjectName</classname>s from <classname>Properties</classname></title>
|
|
|
|
<para>You can configure your own
|
|
<classname>KeyNamingStrategy</classname> instance and configure it to
|
|
read <classname>ObjectName</classname>s from a
|
|
<classname>Properties</classname> instance rather than use bean key. The
|
|
<classname>KeyNamingStrategy</classname> will attempt to locate an entry
|
|
in the <classname>Properties</classname> with a key corresponding to the
|
|
bean key. If no entry is found or if the
|
|
<classname>Properties</classname> instance is <literal>null</literal>
|
|
then the bean key itself is used.</para>
|
|
|
|
<para>The code below shows a sample configuration for the
|
|
<classname>KeyNamingStrategy</classname>:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="testBean" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
<property name="namingStrategy" ref="namingStrategy"/>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.KeyNamingStrategy">
|
|
<property name="mappings">
|
|
<props>
|
|
<prop key="testBean">bean:name=testBean1</prop>
|
|
</props>
|
|
</property>
|
|
<property name="mappingLocations">
|
|
<value>names1.properties,names2.properties</value>
|
|
</property>
|
|
</bean
|
|
|
|
</beans>]]></programlisting>
|
|
|
|
<para>Here an instance of <classname>KeyNamingStrategy</classname> is
|
|
configured with a <classname>Properties</classname> instance that is
|
|
merged from the <classname>Properties</classname> instance defined by
|
|
the mapping property and the properties files located in the paths
|
|
defined by the mappings property. In this configuration, the
|
|
<literal>testBean</literal> bean will be given the
|
|
<classname>ObjectName</classname> <literal>bean:name=testBean1</literal>
|
|
since this is the entry in the <classname>Properties</classname>
|
|
instance that has a key corresponding to the bean key.</para>
|
|
|
|
<para>If no entry in the <classname>Properties</classname> instance can
|
|
be found then the bean key name is used as the
|
|
<classname>ObjectName</classname>.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-naming-metadata">
|
|
<title>Using the <classname>MetadataNamingStrategy</classname></title>
|
|
|
|
<para>The <classname>MetadataNamingStrategy</classname> uses
|
|
the <literal>objectName</literal> property of the
|
|
<classname>ManagedResource</classname> attribute on each bean to create
|
|
the <classname>ObjectName</classname>. The code below shows the
|
|
configuration for the
|
|
<classname>MetadataNamingStrategy</classname>:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="testBean" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
<property name="namingStrategy" ref="namingStrategy"/>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
|
|
<property name="attributeSource" ref="attributeSource"/>
|
|
</bean>
|
|
|
|
<bean id="attributeSource"
|
|
class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
|
|
|
|
</beans>]]></programlisting>
|
|
|
|
<para>If no <literal>objectName</literal> has been provided for
|
|
the <classname>ManagedResource</classname> attribute, then an
|
|
<classname>ObjectName</classname> will be created with the
|
|
following format:
|
|
<emphasis>[fully-qualified-package-name]:type=[short-classname],name=[bean-name]</emphasis>.
|
|
For example, the generated <classname>ObjectName</classname> for the
|
|
following bean would be: <emphasis>com.foo:type=MyClass,name=myBean</emphasis>.
|
|
</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="myBean" class="com.foo.MyClass"/>]]></programlisting>
|
|
|
|
</section>
|
|
|
|
<section xml:id="jmx-context-mbeanexport">
|
|
<title>Configuring annotation based MBean export</title>
|
|
<para>If you prefer using <link linkend="jmx-interface-metadata">the annotation based
|
|
approach</link> to define your management interfaces, then a convenience subclass of
|
|
<classname>MBeanExporter</classname> is available:
|
|
<classname>AnnotationMBeanExporter</classname>.
|
|
When defining an instance of this subclass, the <literal>namingStrategy</literal>,
|
|
<literal>assembler</literal>, and <literal>attributeSource</literal>
|
|
configuration is no longer needed, since it will always use standard Java
|
|
annotation-based metadata (autodetection is always enabled as well). In fact,
|
|
rather than defining an <classname>MBeanExporter</classname> bean, an even
|
|
simpler syntax is supported by the <interfacename>@EnableMBeanExport</interfacename>
|
|
<interfacename>@Configuration</interfacename> annotation.</para>
|
|
|
|
<programlisting language="java">@Configuration
|
|
@EnableMBeanExport
|
|
public class AppConfig {
|
|
|
|
}</programlisting>
|
|
|
|
<para>If you prefer XML based configuration the '<literal>context:mbean-export'</literal>
|
|
element serves the same purpose.</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<context:mbean-export/>]]></programlisting>
|
|
|
|
<para>You can provide a reference to a particular MBean <literal>server</literal> if
|
|
necessary, and the <literal>defaultDomain</literal> attribute
|
|
(a property of <classname>AnnotationMBeanExporter</classname>)
|
|
accepts an alternate value for the generated MBean
|
|
<classname>ObjectNames</classname>' domains. This would be used
|
|
in place of the fully qualified package name as described in the
|
|
previous section on
|
|
<link linkend="jmx-naming-metadata"><classname>MetadataNamingStrategy</classname></link>.
|
|
</para>
|
|
|
|
<programlisting language="java">@EnableMBeanExport(server="myMBeanServer", defaultDomain="myDomain")
|
|
@Configuration
|
|
ContextConfiguration {
|
|
|
|
}</programlisting>
|
|
|
|
<programlisting language="xml"><![CDATA[<context:mbean-export server="myMBeanServer" default-domain="myDomain"/>]]></programlisting>
|
|
|
|
<note>
|
|
<para>Do not use interface-based AOP proxies in combination with autodetection of
|
|
JMX annotations in your bean classes. Interface-based proxies 'hide' the target class,
|
|
which also hides the JMX managed resource annotations. Hence, use target-class proxies
|
|
in that case: through setting the 'proxy-target-class' flag on <literal><aop:config/></literal>,
|
|
<literal><tx:annotation-driven/></literal>, etc. Otherwise, your JMX beans
|
|
might be silently ignored at startup...</para>
|
|
</note>
|
|
|
|
</section>
|
|
</section>
|
|
|
|
<section xml:id="jmx-jsr160">
|
|
<title>JSR-160 Connectors</title>
|
|
|
|
<para>For remote access, Spring JMX module offers two
|
|
<classname>FactoryBean</classname> implementations inside the
|
|
<literal>org.springframework.jmx.support</literal> package for creating
|
|
both server- and client-side connectors.</para>
|
|
|
|
<section xml:id="jmx-jsr160-server">
|
|
<title>Server-side Connectors</title>
|
|
|
|
<para>To have Spring JMX create, start and expose a JSR-160
|
|
<classname>JMXConnectorServer</classname> use the following
|
|
configuration:</para>
|
|
|
|
<programlisting language="xml"><bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean"/></programlisting>
|
|
|
|
<para>By default <literal>ConnectorServerFactoryBean</literal> creates a
|
|
<classname>JMXConnectorServer</classname> bound to
|
|
<literal>"service:jmx:jmxmp://localhost:9875"</literal>. The
|
|
<literal>serverConnector</literal> bean thus exposes the local
|
|
<interfacename>MBeanServer</interfacename> to clients through the JMXMP protocol
|
|
on localhost, port 9875. Note that the JMXMP protocol is marked as
|
|
optional by the JSR 160 specification: currently, the main open-source
|
|
JMX implementation, MX4J, and the one provided with J2SE 5.0 do
|
|
<emphasis>not</emphasis> support JMXMP.</para>
|
|
|
|
<para>To specify another URL and register the
|
|
<classname>JMXConnectorServer</classname> itself with the
|
|
<interfacename>MBeanServer</interfacename> use the <literal>serviceUrl</literal>
|
|
and <classname>ObjectName</classname> properties respectively:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="serverConnector"
|
|
class="org.springframework.jmx.support.ConnectorServerFactoryBean">
|
|
<property name="objectName" value="connector:name=rmi"/>
|
|
<property name="serviceUrl"
|
|
value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/myconnector"/>
|
|
</bean>]]></programlisting>
|
|
|
|
<para>If the <classname>ObjectName</classname> property is set Spring
|
|
will automatically register your connector with the
|
|
<interfacename>MBeanServer</interfacename> under that
|
|
<classname>ObjectName</classname>. The example below shows the full set
|
|
of parameters which you can pass to the
|
|
<classname>ConnectorServerFactoryBean</classname> when creating a
|
|
JMXConnector:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="serverConnector"
|
|
class="org.springframework.jmx.support.ConnectorServerFactoryBean">
|
|
<property name="objectName" value="connector:name=iiop"/>
|
|
<property name="serviceUrl"
|
|
value="service:jmx:iiop://localhost/jndi/iiop://localhost:900/myconnector"/>
|
|
<property name="threaded" value="true"/>
|
|
<property name="daemon" value="true"/>
|
|
<property name="environment">
|
|
<map>
|
|
<entry key="someKey" value="someValue"/>
|
|
</map>
|
|
</property>
|
|
</bean>]]></programlisting>
|
|
|
|
<para>Note that when using a RMI-based connector you need the lookup
|
|
service (tnameserv or rmiregistry) to be started in order for the name
|
|
registration to complete. If you are using Spring to export remote
|
|
services for you via RMI, then Spring will already have constructed an
|
|
RMI registry. If not, you can easily start a registry using the
|
|
following snippet of configuration:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
|
|
<property name="port" value="1099"/>
|
|
</bean>]]></programlisting>
|
|
</section>
|
|
|
|
<section xml:id="jmx-jsr160-client">
|
|
<title>Client-side Connectors</title>
|
|
|
|
<para>To create an <classname>MBeanServerConnection</classname> to a
|
|
remote JSR-160 enabled <interfacename>MBeanServer</interfacename> use the
|
|
<classname>MBeanServerConnectionFactoryBean</classname> as shown
|
|
below:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="clientConnector" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
|
|
<property name="serviceUrl" value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmxrmi"/>
|
|
</bean>]]></programlisting>
|
|
</section>
|
|
|
|
<section xml:id="jmx-jsr160-protocols">
|
|
<title>JMX over Burlap/Hessian/SOAP</title>
|
|
|
|
<para>JSR-160 permits extensions to the way in which communication is
|
|
done between the client and the server. The examples above are using the
|
|
mandatory RMI-based implementation required by the JSR-160 specification
|
|
(IIOP and JRMP) and the (optional) JMXMP. By using other providers or
|
|
JMX implementations (such as <link
|
|
xl:href="http://mx4j.sourceforge.net">MX4J</link>) you can take advantage
|
|
of protocols like SOAP, Hessian, Burlap over simple HTTP or SSL and
|
|
others:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean">
|
|
<property name="objectName" value="connector:name=burlap"/>
|
|
<property name="serviceUrl" value="service:jmx:burlap://localhost:9874"/>
|
|
</bean>]]></programlisting>
|
|
|
|
<para>In the case of the above example, MX4J 3.0.0 was used; see the
|
|
official MX4J documentation for more information.</para>
|
|
</section>
|
|
</section>
|
|
|
|
<section xml:id="jmx-proxy">
|
|
<title>Accessing MBeans via Proxies</title>
|
|
|
|
<para>Spring JMX allows you to create proxies that re-route calls to
|
|
MBeans registered in a local or remote <interfacename>MBeanServer</interfacename>.
|
|
These proxies provide you with a standard Java interface through which you
|
|
can interact with your MBeans. The code below shows how to configure a
|
|
proxy for an MBean running in a local
|
|
<interfacename>MBeanServer</interfacename>:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="proxy" class="org.springframework.jmx.access.MBeanProxyFactoryBean">
|
|
<property name="objectName" value="bean:name=testBean"/>
|
|
<property name="proxyInterface" value="org.springframework.jmx.IJmxTestBean"/>
|
|
</bean>]]></programlisting>
|
|
|
|
<para>Here you can see that a proxy is created for the MBean registered
|
|
under the <classname>ObjectName</classname>:
|
|
<literal>bean:name=testBean</literal>. The set of interfaces that the
|
|
proxy will implement is controlled by the
|
|
<literal>proxyInterfaces</literal> property and the rules for mapping
|
|
methods and properties on these interfaces to operations and attributes on
|
|
the MBean are the same rules used by the
|
|
<classname>InterfaceBasedMBeanInfoAssembler</classname>.</para>
|
|
|
|
<para>The <classname>MBeanProxyFactoryBean</classname> can create a proxy
|
|
to any MBean that is accessible via an
|
|
<classname>MBeanServerConnection</classname>. By default, the local
|
|
<interfacename>MBeanServer</interfacename> is located and used, but you can
|
|
override this and provide an <classname>MBeanServerConnection</classname>
|
|
pointing to a remote <interfacename>MBeanServer</interfacename> to cater for
|
|
proxies pointing to remote MBeans:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<bean id="clientConnector"
|
|
class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean">
|
|
<property name="serviceUrl" value="service:jmx:rmi://remotehost:9875"/>
|
|
</bean>
|
|
|
|
<bean id="proxy" class="org.springframework.jmx.access.MBeanProxyFactoryBean">
|
|
<property name="objectName" value="bean:name=testBean"/>
|
|
<property name="proxyInterface" value="org.springframework.jmx.IJmxTestBean"/>
|
|
<property name="server" ref="clientConnector"/>
|
|
</bean>]]></programlisting>
|
|
|
|
<para>Here you can see that we create an
|
|
<classname>MBeanServerConnection</classname> pointing to a remote machine
|
|
using the <classname>MBeanServerConnectionFactoryBean</classname>. This
|
|
<classname>MBeanServerConnection</classname> is then passed to the
|
|
<classname>MBeanProxyFactoryBean</classname> via the
|
|
<literal>server</literal> property. The proxy that is created will forward
|
|
all invocations to the <interfacename>MBeanServer</interfacename> via this
|
|
<classname>MBeanServerConnection</classname>.</para>
|
|
</section>
|
|
|
|
<section xml:id="jmx-notifications">
|
|
<title>Notifications</title>
|
|
|
|
<para>Spring's JMX offering includes comprehensive support for JMX
|
|
notifications.</para>
|
|
|
|
<section xml:id="jmx-notifications-listeners">
|
|
<title>Registering Listeners for Notifications</title>
|
|
|
|
<para>Spring's JMX support makes it very easy to register any number of
|
|
<classname>NotificationListeners</classname> with any number of MBeans
|
|
(this includes MBeans exported by Spring's
|
|
<classname>MBeanExporter</classname> and MBeans registered via some
|
|
other mechanism). By way of an example, consider the scenario where one
|
|
would like to be informed (via a <classname>Notification</classname>)
|
|
each and every time an attribute of a target MBean changes.</para>
|
|
|
|
<programlisting language="java"><![CDATA[package com.example;
|
|
|
|
import javax.management.AttributeChangeNotification;
|
|
import javax.management.Notification;
|
|
import javax.management.NotificationFilter;
|
|
import javax.management.NotificationListener;
|
|
|
|
public class ConsoleLoggingNotificationListener
|
|
implements NotificationListener, NotificationFilter {
|
|
|
|
public void handleNotification(Notification notification, Object handback) {
|
|
System.out.println(notification);
|
|
System.out.println(handback);
|
|
}
|
|
|
|
public boolean isNotificationEnabled(Notification notification) {
|
|
return AttributeChangeNotification.class.isAssignableFrom(notification.getClass());
|
|
}
|
|
}]]></programlisting>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="bean:name=testBean1" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
<property name="notificationListenerMappings">
|
|
<map>
|
|
<entry key="bean:name=testBean1">
|
|
<bean class="com.example.ConsoleLoggingNotificationListener"/>
|
|
</entry>
|
|
</map>
|
|
</property>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
</beans>]]></programlisting>
|
|
|
|
<para>With the above configuration in place, every time a JMX
|
|
<classname>Notification</classname> is broadcast from the target MBean
|
|
(<literal>bean:name=testBean1</literal>), the
|
|
<classname>ConsoleLoggingNotificationListener</classname> bean that was
|
|
registered as a listener via the
|
|
<literal>notificationListenerMappings</literal> property will be
|
|
notified. The <classname>ConsoleLoggingNotificationListener</classname>
|
|
bean can then take whatever action it deems appropriate in response to
|
|
the <classname>Notification</classname>.</para>
|
|
|
|
<para>You can also use straight bean names as the link between exported beans
|
|
and listeners:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="bean:name=testBean1" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
<property name="notificationListenerMappings">
|
|
<map>
|
|
<entry key="]]><emphasis role="bold">testBean</emphasis><![CDATA[">
|
|
<bean class="com.example.ConsoleLoggingNotificationListener"/>
|
|
</entry>
|
|
</map>
|
|
</property>
|
|
</bean>
|
|
|
|
<bean id="]]><emphasis role="bold">testBean</emphasis><![CDATA[" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
</beans>]]></programlisting>
|
|
|
|
<para>If one wants to register a single <classname>NotificationListener</classname>
|
|
instance for all of the beans that the enclosing <classname>MBeanExporter</classname>
|
|
is exporting, one can use the special wildcard <literal>'*'</literal> (sans quotes)
|
|
as the key for an entry in the <literal>notificationListenerMappings</literal>
|
|
property map; for example:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<property name="notificationListenerMappings">
|
|
<map>
|
|
<entry key="*">
|
|
<bean class="com.example.ConsoleLoggingNotificationListener"/>
|
|
</entry>
|
|
</map>
|
|
</property>]]></programlisting>
|
|
|
|
<para>If one needs to do the inverse (that is, register a number of distinct
|
|
listeners against an MBean), then one has to use the
|
|
<literal>notificationListeners</literal> list property instead (and in
|
|
preference to the <literal>notificationListenerMappings</literal>
|
|
property). This time, instead of configuring simply a
|
|
<classname>NotificationListener</classname> for a single MBean, one
|
|
configures <classname>NotificationListenerBean</classname> instances...
|
|
a <classname>NotificationListenerBean</classname> encapsulates a
|
|
<classname>NotificationListener</classname> and the
|
|
<classname>ObjectName</classname> (or
|
|
<classname>ObjectNames</classname>) that it is to be registered against
|
|
in an <interfacename>MBeanServer</interfacename>. The
|
|
<classname>NotificationListenerBean</classname> also encapsulates a
|
|
number of other properties such as a
|
|
<classname>NotificationFilter</classname> and an arbitrary handback
|
|
object that can be used in advanced JMX notification scenarios.</para>
|
|
|
|
<para>The configuration when using
|
|
<classname>NotificationListenerBean</classname> instances is not wildly
|
|
different to what was presented previously:</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="bean:name=testBean1" value-ref="testBean"/>
|
|
</map>
|
|
</property>
|
|
<property name="notificationListeners">
|
|
<list>
|
|
<bean class="org.springframework.jmx.export.NotificationListenerBean">
|
|
<constructor-arg>
|
|
<bean class="com.example.ConsoleLoggingNotificationListener"/>
|
|
</constructor-arg>
|
|
<property name="mappedObjectNames">
|
|
<list>
|
|
<value>bean:name=testBean1</value>
|
|
</list>
|
|
</property>
|
|
</bean>
|
|
</list>
|
|
</property>
|
|
</bean>
|
|
|
|
<bean id="testBean" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
</beans>]]></programlisting>
|
|
|
|
<para>The above example is equivalent to the first notification example.
|
|
Lets assume then that we want to be given a handback object every time a
|
|
<classname>Notification</classname> is raised, and that additionally we
|
|
want to filter out extraneous <classname>Notifications</classname> by
|
|
supplying a <classname>NotificationFilter</classname>. (For a full
|
|
discussion of just what a handback object is, and indeed what a
|
|
<classname>NotificationFilter</classname> is, please do consult that
|
|
section of the JMX specification (1.2) entitled <literal>'The JMX
|
|
Notification Model'</literal>.)</para>
|
|
|
|
<programlisting language="xml"><![CDATA[<beans>
|
|
|
|
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
|
|
<property name="beans">
|
|
<map>
|
|
<entry key="bean:name=testBean1" value-ref="testBean1"/>
|
|
<entry key="bean:name=testBean2" value-ref="testBean2"/>
|
|
</map>
|
|
</property>
|
|
<property name="notificationListeners">
|
|
<list>
|
|
<bean class="org.springframework.jmx.export.NotificationListenerBean">
|
|
<constructor-arg ref="customerNotificationListener"/>
|
|
<property name="mappedObjectNames">
|
|
<list>
|
|
]]><lineannotation><!-- handles notifications from two distinct MBeans --></lineannotation><![CDATA[
|
|
<value>bean:name=testBean1</value>
|
|
<value>bean:name=testBean2</value>
|
|
</list>
|
|
</property>
|
|
<property name="handback">
|
|
<bean class="java.lang.String">
|
|
<constructor-arg value="This could be anything..."/>
|
|
</bean>
|
|
</property>
|
|
<property name="notificationFilter" ref="customerNotificationListener"/>
|
|
</bean>
|
|
</list>
|
|
</property>
|
|
</bean>
|
|
|
|
]]><lineannotation><!-- implements both the <interfacename>NotificationListener</interfacename> and <interfacename>NotificationFilter</interfacename> interfaces --></lineannotation><![CDATA[
|
|
<bean id="customerNotificationListener" class="com.example.ConsoleLoggingNotificationListener"/>
|
|
|
|
<bean id="testBean1" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="TEST"/>
|
|
<property name="age" value="100"/>
|
|
</bean>
|
|
|
|
<bean id="testBean2" class="org.springframework.jmx.JmxTestBean">
|
|
<property name="name" value="ANOTHER TEST"/>
|
|
<property name="age" value="200"/>
|
|
</bean>
|
|
|
|
</beans>]]></programlisting>
|
|
</section>
|
|
|
|
<section xml:id="jmx-notifications-publishing">
|
|
<title>Publishing Notifications</title>
|
|
|
|
<para>Spring provides support not just for registering to receive
|
|
<classname>Notifications</classname>, but also for publishing
|
|
<classname>Notifications</classname>.</para>
|
|
|
|
<note>
|
|
<para>Please note that this section is really only relevant to Spring
|
|
managed beans that have been exposed as MBeans via an
|
|
<classname>MBeanExporter</classname>; any existing, user-defined
|
|
MBeans should use the standard JMX APIs for notification publication.</para>
|
|
</note>
|
|
|
|
<para>The key interface in Spring's JMX notification publication support
|
|
is the <classname>NotificationPublisher</classname> interface (defined
|
|
in the <literal>org.springframework.jmx.export.notification</literal>
|
|
package). Any bean that is going to be exported as an MBean via an
|
|
<classname>MBeanExporter</classname> instance can implement the related
|
|
<classname>NotificationPublisherAware</classname> interface to gain
|
|
access to a <classname>NotificationPublisher</classname> instance. The
|
|
<classname>NotificationPublisherAware</classname> interface simply
|
|
supplies an instance of a <classname>NotificationPublisher</classname>
|
|
to the implementing bean via a simple setter method, which the bean can
|
|
then use to publish <classname>Notifications</classname>.</para>
|
|
|
|
<para>As stated in the Javadoc for the
|
|
<classname>NotificationPublisher</classname> class, managed beans that
|
|
are publishing events via the
|
|
<classname>NotificationPublisher</classname> mechanism are
|
|
<emphasis>not</emphasis> responsible for the state management of any
|
|
notification listeners and the like ... Spring's JMX support will take
|
|
care of handling all the JMX infrastructure issues. All one need do as
|
|
an application developer is implement the
|
|
<classname>NotificationPublisherAware</classname> interface and start
|
|
publishing events using the supplied
|
|
<classname>NotificationPublisher</classname> instance. Note that the
|
|
<classname>NotificationPublisher</classname> will be set
|
|
<emphasis>after</emphasis> the managed bean has been registered with an
|
|
<interfacename>MBeanServer</interfacename>.</para>
|
|
|
|
<para>Using a <classname>NotificationPublisher</classname> instance is
|
|
quite straightforward... one simply creates a JMX
|
|
<classname>Notification</classname> instance (or an instance of an
|
|
appropriate <classname>Notification</classname> subclass), populates
|
|
the notification with the data pertinent to the event that is to be
|
|
published, and one then invokes the
|
|
<methodname>sendNotification(Notification)</methodname> on the
|
|
<classname>NotificationPublisher</classname> instance, passing in the
|
|
<classname>Notification</classname>.</para>
|
|
|
|
<para>Find below a simple example... in this scenario, exported
|
|
instances of the <classname>JmxTestBean</classname> are going to publish
|
|
a <classname>NotificationEvent</classname> every time the
|
|
<literal>add(int, int)</literal> operation is invoked.</para>
|
|
|
|
<programlisting language="java"><![CDATA[package org.springframework.jmx;
|
|
|
|
import org.springframework.jmx.export.notification.NotificationPublisherAware;
|
|
import org.springframework.jmx.export.notification.NotificationPublisher;
|
|
import javax.management.Notification;
|
|
|
|
public class JmxTestBean implements IJmxTestBean, NotificationPublisherAware {
|
|
|
|
private String name;
|
|
private int age;
|
|
private boolean isSuperman;
|
|
private NotificationPublisher publisher;
|
|
|
|
]]><lineannotation>// other getters and setters omitted for clarity</lineannotation><![CDATA[
|
|
|
|
public int add(int x, int y) {
|
|
int answer = x + y;
|
|
this.publisher.sendNotification(new Notification("add", this, 0));
|
|
return answer;
|
|
}
|
|
|
|
public void dontExposeMe() {
|
|
throw new RuntimeException();
|
|
}
|
|
|
|
public void setNotificationPublisher(NotificationPublisher notificationPublisher) {
|
|
this.publisher = notificationPublisher;
|
|
}
|
|
}]]></programlisting>
|
|
|
|
<para>The <classname>NotificationPublisher</classname> interface and the
|
|
machinery to get it all working is one of the nicer features of Spring's JMX support.
|
|
It does however come with the price tag of coupling your classes to both Spring and JMX; as
|
|
always, the advice here is to be pragmatic... if you need the functionality offered by the
|
|
<classname>NotificationPublisher</classname> and you can accept the coupling to both Spring
|
|
and JMX, then do so.</para>
|
|
</section>
|
|
</section>
|
|
|
|
<section xml:id="jmx-resources">
|
|
<title>Further Resources</title>
|
|
|
|
<para>This section contains links to further resources about JMX.</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>The <link xl:href="https://java.sun.com/products/JavaManagement/">JMX homepage</link> at Sun</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>The <link xl:href="https://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html">JMX specification</link> (JSR-000003)</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>The <link xl:href="https://jcp.org/aboutJava/communityprocess/final/jsr160/index.html">JMX Remote API specification</link> (JSR-000160)</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>The <link xl:href="http://mx4j.sourceforge.net/">MX4J
|
|
homepage</link> (an Open Source implementation of various JMX
|
|
specs)</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><link xl:href="https://java.sun.com/developer/technicalArticles/J2SE/jmx.html">Getting Started with JMX</link> - an introductory article from Sun.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</section>
|
|
</chapter>
|