<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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReleaseId releaseId = new ReleaseIdImpl(&quot;some:releaseid:1.0.0-SNAPSHOT&quot;);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String rules = &quot;rule \&quot;testrule\ &#8230; &#8220;;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KieServices kServices = KieServices.Factory.get();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KieFileSystem kfs = kServices.newKieFileSystem();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kfs.write(&quot;src/main/resources/someBase/testrule&quot;, rules);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kfs.generateAndWritePomXML(releaseId);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String kmoduleXmlString = &quot;&lt;kmodule &#8230; &lt;/kmodule&gt;&#8221;;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kfs.writeKModuleXML(kmoduleXmlString.getBytes());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File pomFile = new File(System.getProperty(&quot;java.io.tmpdir&quot;), &quot;pom.xml&quot;);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try (FileOutputStream fos = new FileOutputStream(pomFile)) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final MavenRepository mavenRepository = MavenRepository.getMavenRepository();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;</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:&quot;Courier New&quot;;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:&quot;Courier New&quot;;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:&quot;Courier New&quot;;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:&quot;Courier New&quot;;mso-fareast-language:DE">/mvntest<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p>&nbsp;</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">&nbsp; 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>&nbsp;</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 &#8230;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-US"><o:p>&nbsp;</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&#8217;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>&nbsp;</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>&nbsp;</o:p></span></p>
</div>
<br>
<font face="Arial" color="Navy" size="2">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br>
mit freundlichen Gr&uuml;&szlig;en / kind regards<br>
Dominik Sandjaja<br>
Fon: &#43;49 (0) 203 60878 183<br>
Fax: &#43;49 (0) 203 60878 222<br>
e-mail: dominik.sandjaja@it-motive.de<br>
<br>
it-motive AG<br>
Zum Walkm&uuml;ller 6<br>
47269 Duisburg<br>
info@it-motive.de<br>
http://www.it-motive.de<br>
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br>
Vorsitzender des Aufsichtsrats: Dr.-Ing. J&uuml;rgen Sturm<br>
Vorstand: Horst-Dieter Deelmann (Vors.), Matthias Heming, Christoph Tim Klose<br>
HRB 9207, Amtsgericht Duisburg<br>
</font>
</body>
</html>