Le 23/09/2014 08:10, Jacopo Cappellato a écrit :
Jacques,
I think that the comment you added to
https://cwiki.apache.org/confluence/display/OFBTECH/Run+OFBiz+under+outside+Application+Servers
is enough; it should actually be moved from that page to the
https://cwiki.apache.org/confluence/display/OFBTECH/Tomcat page (where there is
already a shorter text).
I will keep it there because it warns also other users (not Tomcat)
I wouldn't add the code sample there because some of the code settings you have
committed in OFBiz depend on the version of Java (the current ones are ok for
Java 6 but not for Java 7 that is the current version we are using): but feel
free to add it if you think it may help users.
Since the code may be useful only with external Tomcat and since the code was
added to the container that is only executed when you run in embedded mode, I
will remove that code from the trunk.
I finally agree it should be better removed from code and better explained in
Tomcat wiki page. I will do that!
Jacques
Regards,
Jacopo
On Sep 22, 2014, at 9:10 PM, Jacques Le Roux <[email protected]>
wrote:
Actually I put it more as a reminder for users who rely on an external Tomcat
instance, not the embedded one most users prefer.
I kinda explained that at
https://issues.apache.org/jira/browse/OFBIZ-5395?focusedCommentId=13824518
Since I investigated this last year, I decided to put what I discovered in code
even if it's not useful/used OOTB.
Notably the default parameters and explanation about them. It's a kind of
documentation in code if you want.
Maybe, to make things more clear, I should have commented out all lines.
I put a word in this page
https://cwiki.apache.org/confluence/display/OFBTECH/Run+OFBiz+under+outside+Application+Servers
Maybe I could do better and extract this block of OOTB code to this page and
explain things better there.
It seems it was what I wanted to do and did not finish completely. On the other
hand it's maybe easier for external Tomcat users to have it there, not sure.
I could for instance put a link to the Jira comment above in the code to
explain things better
and add this
@@ -203,6 +202,7 @@
}
try {
server.setGlobalNamingContext(new InitialContext());
+ //server.addLifecycleListener(jreMemoryLeakPreventionListener); // Useless
with OOTB Tomcat embedded, but useful when using an external Tomcat instance
} catch (NamingException e) {
throw new ContainerException(e);
}
What do you think?
Jacques
Le 22/09/2014 14:38, Jacopo Cappellato a écrit :
Jacques,
I am wondering how your commit could have fixed the issue in the demo server:
the code you have added create an instance of JreMemoryLeakPreventionListener
but doesn't attach it to the server, so it is not used.
Jacopo
On Nov 17, 2013, at 10:01 PM, Jacques Le Roux <[email protected]>
wrote:
Sorry again, BTW you are invited to try/use/break the demo trunk as most as
possible ;)
On Sunday, November 17, 2013 9:59 PM Jacques Le Roux
<[email protected]> wrote:
Sorry, the right initial address for Plumbr is http://plumbr.eu/
On Sunday, November 17, 2013 9:33 PM Jacques Le Roux
<[email protected]> wrote:
BTW, I have installed Plumbr https://portal.plumbr.eu/ into the trunk demo
(don't ask how :D )
It's running for more than a week, any leaks (no surprises)
Jacques
On Sunday, November 17, 2013 7:53 PM [email protected] <[email protected]>
wrote:
Author: jleroux
Date: Sun Nov 17 18:53:17 2013
New Revision: 1542795
URL: http://svn.apache.org/r1542795
Log:
Adds the JreMemoryLeakPreventionListener, see
https://issues.apache.org/jira/browse/OFBIZ-5395 for details
Modified:
ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java
Modified:
ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java?rev=1542795&r1=1542794&r2=1542795&view=diff
==============================================================================
---
ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java
(original) +++
ofbiz/trunk/framework/catalina/src/org/ofbiz/catalina/container/CatalinaContainer.java
Sun Nov 17 18:53:17 2013 @@ -44,6 +44,7
@@ import org.apache.catalina.Host;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.Manager;
import org.apache.catalina.connector.Connector;
+import org.apache.catalina.core.JreMemoryLeakPreventionListener;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardEngine;
import org.apache.catalina.core.StandardHost;
@@ -140,7 +141,7 @@ import org.xml.sax.SAXException;
*/
/**
- * CatalinaContainer - Tomcat 5
+ * CatalinaContainer - Tomcat
*
*/
public class CatalinaContainer implements Container {
@@ -206,6 +207,17 @@ public class CatalinaContainer implement
tomcat.enableNaming();
}
+ //
https://tomcat.apache.org/tomcat-7.0-doc/config/listeners.html#JRE_Memory_Leak_Prevention_Listener_-_org.apache.catalina.core.JreMemoryLeakPreventionListener
+ // <<The JRE Memory Leak Prevention Listener provides work-arounds for
known places where the Java Runtime environment
uses + // the context class loader to load a singleton as this will
cause a memory leak if a web application class loader
happens + // to be the context class loader at the time.>> + //
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java?view=annotate
+
JreMemoryLeakPreventionListener jreMemoryLeakPreventionListener = new
JreMemoryLeakPreventionListener(); + // Mostly use
default config, but some specific cases here +
jreMemoryLeakPreventionListener.setAppContextProtection(true); // True is
the default for Java 1.6, use false for Java from 1.7.0_02 onwards (see sources
above) +
jreMemoryLeakPreventionListener.setGcDaemonProtection(false); // False because
of
https://mail-archives.apache.org/mod_mbox/tomcat-users/201008.mbox/%[email protected]%3E
+ jreMemoryLeakPreventionListener.setUrlCacheProtection(false);
// False to keep the URLConnection cache, moot
point + // configure JNDI in the StandardServer StandardServer server =
(StandardServer) tomcat.getServer();
try {
@@ -480,7 +492,7 @@ public class CatalinaContainer implement
String protocol = ContainerConfig.getPropertyValue(connectorProp, "protocol",
"HTTP/1.1");
String address = ContainerConfig.getPropertyValue(connectorProp, "address",
"0.0.0.0");
int port = ContainerConfig.getPropertyValue(connectorProp, "port", 0) +
ClassLoaderContainer.portOffset;
-
+
boolean secure = ContainerConfig.getPropertyValue(connectorProp,
"secure", false);
if (protocol.toLowerCase().startsWith("ajp")) {
protocol = "ajp";
@@ -540,7 +552,7 @@ public class CatalinaContainer implement
try {
for (ContainerConfig.Container.Property prop:
connectorProp.properties.values()) {
- if ("port".equals(prop.name)) {
+ if ("port".equals(prop.name)) {
connector.setProperty(prop.name, "" + port);
} else {
connector.setProperty(prop.name, prop.value);