<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Vorformatiert Zchn";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.E-MailFormatvorlage17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.HTMLVorformatiertZchn
        {mso-style-name:"HTML Vorformatiert Zchn";
        mso-style-priority:99;
        mso-style-link:"HTML Vorformatiert";
        font-family:"Courier New";
        mso-fareast-language:DE;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="DE" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hello everybody,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I use Drools to create rules from an external source and create an artifact from those rule strings, putting it into a local repository.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">A minimalistic working example can be found at
<a href="https://github.com/dadadom/MavenMemoryLeakMinimalExample">https://github.com/dadadom/MavenMemoryLeakMinimalExample</a><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">The code, taken from that example, is basically like this:<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> ReleaseId releaseId = new ReleaseIdImpl("some:releaseid:1.0.0-SNAPSHOT");<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> String rules = "rule \"testrule\ … “;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> KieServices kServices = KieServices.Factory.get();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> KieFileSystem kfs = kServices.newKieFileSystem();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> kfs.write("src/main/resources/someBase/testrule", rules);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> kfs.generateAndWritePomXML(releaseId);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> String kmoduleXmlString = "<kmodule … </kmodule>”;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> kfs.writeKModuleXML(kmoduleXmlString.getBytes());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> KieModule kieModule = kServices.newKieBuilder(kfs).getKieModule();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> try {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> File pomFile = new File(System.getProperty("java.io.tmpdir"), "pom.xml");<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> try (FileOutputStream fos = new FileOutputStream(pomFile)) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> fos.write(KieBuilderImpl.generatePomXml(releaseId).getBytes()); fos.flush();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> } catch (IOException e) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> e.printStackTrace();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> final MavenRepository mavenRepository = MavenRepository.getMavenRepository();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> mavenRepository.deployArtifact(releaseId, (InternalKieModule) kieModule, pomFile);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">When I call this method in a ServletContextListener in a Tomcat Server (version 7 or 8) and undeploy the application afterwards, I get a memory leak.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">Tomcat tells me that the application has a memory leak:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE">The following web applications were stopped (reloaded, undeployed), but their<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE">classes from previous runs are still loaded in memory, thus causing a memory<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE">leak (use a profiler to confirm):<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New";mso-fareast-language:DE">/mvntest<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">Looking at the memory dump with e.g. JProfiler, I can trace the dangling instances back to an object<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"> static INSTANCE of class org.drools.compiler.kie.builder.impl.KieRepositoryImpl<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">So it seems like there is something which I am either missing or which is a bug. I cannot find any .close() or .release() method or something alike on any of the involved objects …<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">If anyone could give me a hint how to solve this problem, I’d be happy not to litter my memory no more
</span><span lang="EN-US" style="font-family:Wingdings">J</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">Regards and thanks<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">Dominik<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
<br>
<font face="Arial" color="Navy" size="2">…………………………………………………………………<br>
mit freundlichen Grüßen / kind regards<br>
Dominik Sandjaja<br>
Fon: +49 (0) 203 60878 183<br>
Fax: +49 (0) 203 60878 222<br>
e-mail: dominik.sandjaja@it-motive.de<br>
<br>
it-motive AG<br>
Zum Walkmüller 6<br>
47269 Duisburg<br>
info@it-motive.de<br>
http://www.it-motive.de<br>
……………………………………………………………………<br>
Vorsitzender des Aufsichtsrats: Dr.-Ing. Jürgen Sturm<br>
Vorstand: Horst-Dieter Deelmann (Vors.), Matthias Heming, Christoph Tim Klose<br>
HRB 9207, Amtsgericht Duisburg<br>
</font>
</body>
</html>