From 35f15ac8a18c766a011c6e47d37eb9d61a35a906 Mon Sep 17 00:00:00 2001 From: Claus Ibsen Date: Fri, 7 Sep 2012 14:46:45 +0000 Subject: [PATCH] AMQ-3451: Fixed memory leak when using embedded ActiveMQ broker from Spring XML file. Need to clear a spring cache when stopping. git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1382055 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/activemq/xbean/BrokerFactoryBean.java | 2 -- .../org/apache/activemq/xbean/XBeanBrokerFactory.java | 10 ++-------- .../org/apache/activemq/xbean/XBeanBrokerService.java | 9 ++++++++- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/activemq-core/src/main/java/org/apache/activemq/xbean/BrokerFactoryBean.java b/activemq-core/src/main/java/org/apache/activemq/xbean/BrokerFactoryBean.java index 76e5eff5e8..fa0b32520a 100644 --- a/activemq-core/src/main/java/org/apache/activemq/xbean/BrokerFactoryBean.java +++ b/activemq-core/src/main/java/org/apache/activemq/xbean/BrokerFactoryBean.java @@ -20,8 +20,6 @@ import java.beans.PropertyEditorManager; import java.net.URI; import org.apache.activemq.broker.BrokerService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.apache.xbean.spring.context.ResourceXmlApplicationContext; import org.apache.xbean.spring.context.impl.URIEditor; import org.springframework.beans.BeansException; diff --git a/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java b/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java index ab967583cf..4f0111f4c8 100644 --- a/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java +++ b/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java @@ -17,30 +17,24 @@ package org.apache.activemq.xbean; import java.beans.PropertyEditorManager; -import java.io.File; import java.net.MalformedURLException; import java.net.URI; -import java.util.Map; import org.apache.activemq.broker.BrokerFactoryHandler; import org.apache.activemq.broker.BrokerService; import org.apache.activemq.spring.Utils; import org.apache.activemq.util.IntrospectionSupport; import org.apache.activemq.util.URISupport; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.apache.xbean.spring.context.ResourceXmlApplicationContext; import org.apache.xbean.spring.context.impl.URIEditor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.FatalBeanException; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; -import org.springframework.core.io.UrlResource; -import org.springframework.util.ResourceUtils; /** * diff --git a/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerService.java b/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerService.java index 467f5cbc54..557397774d 100644 --- a/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerService.java +++ b/activemq-core/src/main/java/org/apache/activemq/xbean/XBeanBrokerService.java @@ -25,6 +25,7 @@ import org.apache.activemq.broker.BrokerService; import org.apache.activemq.usage.SystemUsage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.CachedIntrospectionResults; /** * An ActiveMQ Message Broker. It consists of a number of transport @@ -85,7 +86,13 @@ public class XBeanBrokerService extends BrokerService { public void destroy() throws Exception { stop(); } - + + @Override + public void stop() throws Exception { + // must clear this Spring cache to avoid any memory leaks + CachedIntrospectionResults.clearClassLoader(getClass().getClassLoader()); + super.stop(); + } /** * Sets whether or not the broker is started along with the ApplicationContext it is defined within.