Re: genStrAsCharArray not available in JspC and performance increase?
On 5/29/05, Kevin Burton <[EMAIL PROTECTED]> wrote: > So on: > > http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jasper-howto.html#Production%20Configuration > > It recommends to use genStrAsCharArray when in production. > > This can be set in web.xml but not when using JspC from the command line. > > trimSpaces is there... but not genStrAsCharArray. > > Its in the source but it just doesn't have a command line option. > > 1... does it make sense for me to just recompile my 5.5.4 production > server with this enabled? Whats the performance gain? > > 2. Can we make this an option in JspC moving forward? I don't see why > it can't be a command line switch. > > I verified that this is still the case in 5.5.9 btw. The command line version of jspc has been kind of deprecated for a while now; we recommend using Ant. Otherwise, adding code to set the flag is relatively simple. -- x Rémy Maucherat Developer & Consultant JBoss Group (Europe) SàRL x - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
java.lang.NoClassDefFoundError:javax/servlet/http/HttpServlet
Hi All, I just installed the tomcat 5.5.9 and then I add my program to upload a file in my server. I set everything ok from html to my servlet code and I didn't add any jar or third party file in the library. But, when I execute my program, sometimes the tomcat find the HttpServlet and my program works ok and then the file(only < 400bytes) uploaded to my server. But most of my attempt the tomcat didn't find the HttpServlet "see error below". It's a kind a weird behavior the way the tomcat works. any idea? Thanks, John javax.servlet.ServletException: Error allocating a servlet instance org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:407) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) java.lang.Thread.run(Thread.java:595) root cause java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClass(ClassLoader.java:620) java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) java.net.URLClassLoader.defineClass(URLClassLoader.java:260) java.net.URLClassLoader.access$100(URLClassLoader.java:56) java.net.URLClassLoader$1.run(URLClassLoader.java:195) java.security.AccessController.doPrivileged(Native Method) java.net.URLClassLoader.findClass(URLClassLoader.java:188) java.lang.ClassLoader.loadClass(ClassLoader.java:306) sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) java.lang.ClassLoader.loadClass(ClassLoader.java:251) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1247) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1181) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:407) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) java.lang.Thread.run(Thread.java:595) - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Jasper generating garbage? new String() in generated code?
This is another smaller issue. yields: _jspx_th_c_set_0.setValue(new String("bar")); If this is a constant string why does it need to continually call new String("bar") here? This is just going to waste CPU and cause more garbage to be generated which the GC will eventually have to reclaim (slowing down page throughput). Of course it could be claimed that modern VMs would optimize this away but I just did a quick benchmark and using a constant string was 3x faster... This included GC time. So all and all it might yield to faster JSP time for pages that uses static strings in JSP vars. Kevin -- Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. See irc.freenode.net #rojo if you want to chat. Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html Kevin A. Burton, Location - San Francisco, CA AIM/YIM - sfburtonator, Web - http://peerfear.org/ GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
On 5/28/05, Kevin Burton <[EMAIL PROTECTED]> wrote: > Remy Maucherat wrote: > > >It will obviously use more CPU and make more API calls. However, it > >does not allocate any objects, but instead will reuse per page objects > >(which is very fast). So overall, it sounds weird to me that the > >bottleneck would be on tag invocation. > > > >In the end, it's hard to beat a Java "if" with a generic high level > >construct ;) I don't understand how anyone could be surprised by that. > > > > > I think people are suprised because we don't realize that JSP is using > such a high level overhead internally. People see the semantics of c:if > and c:set and so forth and assume they're analogs for Java "if" > semantics and assume they would perform at the same level. > > Its more obvious to you guys because you're usually delving into Tomcat > at that level where I haven't done so in a long time (especially into > Jasper generated source)l. > > Kevin > Ironically, that is the appeal and downside of JSTL. looks pretty innocent, until one realizes how many lines Jasper2 generates to setup the tag. Jasper2 does a much better job than jasper1 in tomcat 4.0.x. If I remember correctly, jasper2 was first released with jasper 4.1.x. The initial version of jasper2 fixed some major performance issues like deeply nested try/catch and methods exceeding java's line limit. to be fair, the great thing about JSP tags and the tag API is it makes it easy for tags to operate with each other. it makes is pretty easy to mix and match JSTL with other tag libraries. the tag plugin API in jasper2 is a great way to take if, when, foreach and convert those to pure java. good luck peter - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
genStrAsCharArray not available in JspC and performance increase?
So on: http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jasper-howto.html#Production%20Configuration It recommends to use genStrAsCharArray when in production. This can be set in web.xml but not when using JspC from the command line. trimSpaces is there... but not genStrAsCharArray. Its in the source but it just doesn't have a command line option. 1... does it make sense for me to just recompile my 5.5.4 production server with this enabled? Whats the performance gain? 2. Can we make this an option in JspC moving forward? I don't see why it can't be a command line switch. I verified that this is still the case in 5.5.9 btw. Kevin -- Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. See irc.freenode.net #rojo if you want to chat. Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html Kevin A. Burton, Location - San Francisco, CA AIM/YIM - sfburtonator, Web - http://peerfear.org/ GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
Remy Maucherat wrote: For production configuration for Jasper, see: http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jasper-howto.html#Production%20Configuration Do you know offhand if genStrAsCharArray has to be passed to jspc? I didn't notice this as one of the command line options in 5.5.x... We have it set in our web.xml but something says that won't matter since we're precompiling our webapps. Kevin -- Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. See irc.freenode.net #rojo if you want to chat. Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html Kevin A. Burton, Location - San Francisco, CA AIM/YIM - sfburtonator, Web - http://peerfear.org/ GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
TC and RMI ClassLoader issue
Hi all. I'm having problems with ClassLoader. I have a RMI client that calls a RMI server. What I keep getting as an error is a ClassCastException. This is the code: Object obj = Naming.lookup(url); search = (SearchRMI) obj; And the exception is: java.lang.ClassCastException at com.qspi.client.search.SearchClientRMI.setHost(SearchClientRMI.java:49) at com.qspi.client.search.SearchClientRMI.(SearchClientRMI.java:33) at com.qspi.client.search.SearchClientFactory.getRMIClient(SearchClientFactory.java:87) at com.qspi.client.search.SearchClientFactory.getSearchClient(SearchClientFactory.java:38) at org.apache.jsp.search_jsp._jspService(search_jsp.java:68) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) ... The client code works flawlessly from a JUnit test. What I have determined is that the object returned by "Naming.lookup(...)" is of a RMI ClassLoader. The returned object is a stub, which implements the SearchRMI, but if it is a different ClassLoader, I guess it cannot cast. I'm not sure why that isn't failing in JUint, but it is failing in Tomcat 5.0.x. I'm going to test it on some other installations I have, but I'd like a good explanation on ClassLoaders, if someone can enlighten me. How do others do this? Are there any tutorials for RMI in Servlets? Nix. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
Remy Maucherat wrote: It will obviously use more CPU and make more API calls. However, it does not allocate any objects, but instead will reuse per page objects (which is very fast). So overall, it sounds weird to me that the bottleneck would be on tag invocation. In the end, it's hard to beat a Java "if" with a generic high level construct ;) I don't understand how anyone could be surprised by that. I think people are suprised because we don't realize that JSP is using such a high level overhead internally. People see the semantics of c:if and c:set and so forth and assume they're analogs for Java "if" semantics and assume they would perform at the same level. Its more obvious to you guys because you're usually delving into Tomcat at that level where I haven't done so in a long time (especially into Jasper generated source)l. Kevin -- Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. See irc.freenode.net #rojo if you want to chat. Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html Kevin A. Burton, Location - San Francisco, CA AIM/YIM - sfburtonator, Web - http://peerfear.org/ GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
Peter Lin wrote: Back in 2002, I wrote several pages using JSP + java and JSP + JSTL to measure the actual cost of from a performance perspective. The performance difference isn't noticeable if a page has less than 50 tags. With 200+ tags, the performance difference does range from 2-5x slower for JSTL. It's worse when you use XML with JSTL. It's also one of the reasons I like to use JSTL + XML to benchmark. It really gives the VM a workout. Awesome! This is great validation. At least I know I'm not hallucinating :) The issue is that we have certainly more than 200+ tags... which I'm not exactly happy about. The other big performance hit was our use of custom .tag files? I was able to get a chunk of code form 900ms down to 150ms by replacing the use of a custom.tag into a jspf include. Could this be that custom tags aren't using the tag pool? My profiling showed that a bunch of methods here seemed to be based around creation. If necessary I can build up a test case and then profile it. Kevin -- Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. See irc.freenode.net #rojo if you want to chat. Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html Kevin A. Burton, Location - San Francisco, CA AIM/YIM - sfburtonator, Web - http://peerfear.org/ GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
Remy Maucherat wrote: For production configuration for Jasper, see: http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jasper-howto.html#Production%20Configuration Cool... we have those set but I didn't see *genStrAsCharArray * **The interesting thing is that jprofiler clearly shows a big performance hit when development is set to "true" btw. I'll try to play with the above setting... thanks. Kevin -- Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. See irc.freenode.net #rojo if you want to chat. Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html Kevin A. Burton, Location - San Francisco, CA AIM/YIM - sfburtonator, Web - http://peerfear.org/ GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
Peng Tuck Kwok wrote: Just to check are your precompiling the jsp page? Yes... we're precompiling them before we deploy. I'd recommend most people do that if they have the time. Kevin -- Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. See irc.freenode.net #rojo if you want to chat. Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html Kevin A. Burton, Location - San Francisco, CA AIM/YIM - sfburtonator, Web - http://peerfear.org/ GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
Dakota Jack wrote: You have to be and are comparing apples and oranges, Kevin, Perhaps... but my point was that JSP 2.0 doesn't HAVE to be this slow! :) because JSP *is* Java. DOH! It cannot run slower than what it is. No.. it could run slower... I'm sure the Tomcat developers will find a way ;) You probably are comparing just running a Java method like setFoo(String foo) { this.foo = foo; } where the parameter foo has the value "bar". But, this is really misleading. The "simple" code you write with in fact is just as complex as what you see and have provided in your email. So, if you want to compare, you have to do all that the code you see as *ugly* does. No ... of course not! For example a JSP 1.x scriptlet would NOT be anywhere near as slow! If you don't want to do all that, don't. But, that is not a problem with JSP and JSP is not a dog if used properly. Ha... so what's properly? Don't use c:set? Don't use c:if ?... That's all I have to say about that. OK forest :) Kevin -- Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. See irc.freenode.net #rojo if you want to chat. Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html Kevin A. Burton, Location - San Francisco, CA AIM/YIM - sfburtonator, Web - http://peerfear.org/ GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
eToken & servlets
hi i have a remote server (linux) that contains servlets wich i want to use to interact with an USB Aladdin eToken that the user connect in his local machine (windows) to sing XML documents. in the server i put (jdk1.5.0_03/jre/lib/security/java.security file): security.provider.7=sun.security.pkcs11.SunPKCS11/usr/local/jakarta-tomcat/webapps/pkcs11.cnf and the pkcs11.cnf contains: name = AladdinEToken library = /usr/local/jakarta-tomcat/webapps/libpkcs11.so libpkcs11.so i took it from the opensc-0.9.6 instllation and i copied it in that location. when i execute this code in the server: String configName = "/usr/local/jakarta-tomcat/webapps/pkcs11.cnf"; Provider p = new sun.security.pkcs11.SunPKCS11(configName); i get the following error: java.security.ProviderException: Initialization failed at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:175) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:76) at Prueba3.doGet(Prueba3.java:46) < Provider p = new sun.security.pkcs11.SunPKCS11(configName); Caused by: java.io.IOException at sun.security.pkcs11.wrapper.PKCS11.connect(Native Method) at sun.security.pkcs11.wrapper.PKCS11.(PKCS11.java:125) at sun.security.pkcs11.wrapper.PKCS11.getInstance(PKCS11.java:138) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:125) ... 37 more if i made that works, would it work with this code? KeyStore ks = KeyStore.getInstance("PKCS11"); String pin = "XX"; ks.load(null,pin.toCharArray()); since i locally in windows i have no problem this aplication is directed only to windows users am i in a good way? if i'm not, how can i implement it? thank you beforehand -- "Nada es imposible, hasta que se demuestre lo contrario" - yo
Re: Bug?: JspCompilationContext.createCompiler(JspCompilationContext.java:220)
I answered my own question. I was not including an important .jar file in the CLASSPATH. At 08:49 PM 5/27/2005, you wrote: I am trying to embed tomcat in an application. I am using Sun Java 1.5 and Tomcat 5.5.9. During the tomcat startup, I receive the following error: SEVERE: Servlet.service() for servlet jsp threw exception java.lang.NullPointerException at org.apache.jasper.JspCompilationContext.createCompiler(JspCompilationContext.java:220) I looked at the JspCompilationContext.java code and found the block where the NullPointerException occurs: /** * Create a "Compiler" object based on some init param data. This * is not done yet. Right now we're just hardcoding the actual * compilers that are created. */ public Compiler createCompiler() throws JasperException { if (jspCompiler != null ) { return jspCompiler; } jspCompiler = null; if (options.getCompiler() == null) { jspCompiler = createCompiler("org.apache.jasper.compiler.JDTCompiler"); if (jspCompiler == null) { jspCompiler = createCompiler("org.apache.jasper.compiler.AntCompiler"); } } else { jspCompiler = createCompiler("org.apache.jasper.compiler.AntCompiler"); if (jspCompiler == null) { jspCompiler = createCompiler("org.apache.jasper.compiler.JDTCompiler"); } } jspCompiler.init(this, jsw); return jspCompiler; } private static Compiler createCompiler(String className) { Compiler compiler = null; try { compiler = (Compiler) Class.forName(className).newInstance(); } catch (Throwable t) { // Log ? // FIXME: log } return compiler; } I was somewhat concerned by the comments within the block. I thought I would ask if there is an open bug in this area before I continued picking apart my own code. Is this a bug in Tomcat? If so, is there a work-around? If not, how should I proceed? Thank you in advance, Mark - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Apache Integration
Hi, which connector are you using? I guess you're using apache to handle port 80 and you want it to relay jsp and servlets over to the tomcat, but serve other content than jsp/servlets by the apache? You should use mod_jk, newest version probably 1.2.13. My experience is that you shouldn't have to worry about connecting tomcat5 or tomcat4 to apache2, the main part here is to configure mod_jk correctly. I'd say that the documentation on http://jakarta.apache.org/tomcat/tomcat-4.1-doc/config/jk.html should be sufficient, but I can otherwise agree on that a complete guide would be beneficial for everyone. BR. Arnar On Fri, 2005-05-27 at 11:08 -0400, [EMAIL PROTECTED] wrote: > I'm trying to setup an Apache 2.X server to relay JSP's to a Tomcat 5.5 > server. > > > > So far, the information I've found is fragmented and out of date. It concerns > Tomcat 3.2 and the libraries used by this « hot-to » are deprecated. For > example, it says to install the mod_jserv module, which is not suitable for > Apache 2. The best document I've found so far is « Tomcat - A minimalist > user's guide ». > > > > I will have to proceed to an installation on a production server. I cannot > fail this installation and it has to succeed the first time. > > > > Is there anyone who came upon a complete guide on how to proceed ?? > > > > Does anyone ever installed those two versions together and has valuable > advice ? > > > > > > > > Luc Boudreau > > Université du Québec > > Canada >
NTLM authentication using jCIFS over JK1.2.10 & IIS fails
I am currently using TC 5.0.28 & http1.1-connector and JCIFS for authentication in a webapp. Authentication is done completely within the webapp without using TC methods and only when necessary. This is working quite well except for few users, who are accessing over squid proxy, which suppresses the ntlm auth headers. Only to overcome this and for these users I added access via https/443 using IIS (W2K-Server) and JK2.0.4, furthermore using jCIFS for authentication. This is running ok but unfortunately JK2.0.4 has this file upload bug. Therefore I wanted to upgrade to JK1.2.10 (and thereby TC 5.5.9). But I cannot get the ntlm authentication running over JK1.2.10/IIS. IE shows the login box, though it should silently authenticate. It seems that IIS/JK interferes with the authentication headers/process. I have configured "jakarta" within IIS to not use basic or integrated windows auth. In the mailing lists I have not found anything (of course except using IIS builtin authentication). I have found a description with also a jCIFS/JK problem, http://lists.samba.org/archive/jcifs/2003-July/002359.html but no solution. Also I did not found any jk configuration parameters, which seem to apply to this. Primarily I do not want to activate authentication within IIS. I want to leave it to the webapp & jCIFS in order to avoid two different auth methods. The tomcat version does not seam to matter. Summary: requests running via TC + http1.1 + jCIFS authenticating: OK TC + jk2.0.4/IIS + noauthenticating: OK TC + jk2.0.4/IIS + jCIFS authenticating: OK TC + jk1.2.10/IIS + noauthenticating: OK TC + jk1.2.10/IIS + JCIFS authenticating: NOT OK Anyone an idea whats the difference between jk2.0.4 and jk1.2.10 causing this behaviour ? Have I overlooked something? Is this a bug within JK1.2.10? Regards Karl-Heinz ___ Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier anmelden: http://mail.yahoo.de - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
I agree with this. There really is *not* a lot of code in what Kevin showed us, because the page code has to be there whether you have one or 500 invocations, tags, on the page. This just makes it look large because all the setup is attributed to one measely little tag. On 5/28/05, Remy Maucherat <[EMAIL PROTECTED]> wrote: > On 5/28/05, Peter Lin <[EMAIL PROTECTED]> wrote: > > as you see already, using JSTL means a single line of code gets > > converted to several lines of JSTL api calls. once you look at how > > many classes are involved in executing JSTL, it's pretty clear it's > > using much more memory and causing more GC. The performance you see is > > the result of JSTL using more memory. > > It will obviously use more CPU and make more API calls. However, it > does not allocate any objects, but instead will reuse per page objects > (which is very fast). So overall, it sounds weird to me that the > bottleneck would be on tag invocation. > > In the end, it's hard to beat a Java "if" with a generic high level > construct ;) I don't understand how anyone could be surprised by that. > > > Back in 2002, I wrote several pages using JSP + java and JSP + JSTL to > > measure the actual cost of from a performance perspective. The > > performance difference isn't noticeable if a page has less than 50 > > tags. With 200+ tags, the performance difference does range from 2-5x > > slower for JSTL. It's worse when you use XML with JSTL. It's also one > > of the reasons I like to use JSTL + XML to benchmark. It really gives > > the VM a workout. > > > > have you tried running JRockit 5? I did some tests recently and > > JRockit's memory management might give you a 2x improvement in > > performance. That's assuming you can use jdk5 > > Right, the code for invoking tags seems to be a good candidate to be > optimized by a competent JIT. > > -- > x > Rémy Maucherat > Developer & Consultant > JBoss Group (Europe) SàRL > x > > - > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- "You can lead a horse to water but you cannot make it float on its back." ~Dakota Jack~ - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
correction to my previous email. On 5/28/05, Remy Maucherat <[EMAIL PROTECTED]> wrote: > On 5/28/05, Peter Lin <[EMAIL PROTECTED]> wrote: > > as you see already, using JSTL means a single line of code gets > > converted to several lines of JSTL api calls. once you look at how > > many classes are involved in executing JSTL, it's pretty clear it's > > using much more memory and causing more GC. The performance you see is > > the result of JSTL using more memory. > > It will obviously use more CPU and make more API calls. However, it > does not allocate any objects, but instead will reuse per page objects > (which is very fast). So overall, it sounds weird to me that the > bottleneck would be on tag invocation. > > In the end, it's hard to beat a Java "if" with a generic high level > construct ;) I don't understand how anyone could be surprised by that. > I should note that the difference was greater in Jasper 1. The latest jasper has improved over the original jasper, which is what I used to compare JSTL vs Java. Remy's response reminded me of the differences, so my statement may not be true for the latest jasper and would only apply to the original jasper2. That version didn't have the tag plugin or all the recent stuff in tomcat 5.5.x. > > Back in 2002, I wrote several pages using JSP + java and JSP + JSTL to > > measure the actual cost of from a performance perspective. The > > performance difference isn't noticeable if a page has less than 50 > > tags. With 200+ tags, the performance difference does range from 2-5x > > slower for JSTL. It's worse when you use XML with JSTL. It's also one > > of the reasons I like to use JSTL + XML to benchmark. It really gives > > the VM a workout. > > > > have you tried running JRockit 5? I did some tests recently and > > JRockit's memory management might give you a 2x improvement in > > performance. That's assuming you can use jdk5 > > Right, the code for invoking tags seems to be a good candidate to be > optimized by a competent JIT. > Don't know if anyone cares, but Resin's fastJSTL basically compiles to java. Or atleast it used to when JSTL 1.0 was originally released. Maybe it's just me, but I've come to expect tags to run slower and make a butt load of more API calls. One tip that might help is to increase the heap in tomcat. Before our application went into production, I ran 12 different heap configurations and ran a suite of JMeter stress tests to see which is optimal. good luck. peter lin - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
On 5/28/05, Peter Lin <[EMAIL PROTECTED]> wrote: > as you see already, using JSTL means a single line of code gets > converted to several lines of JSTL api calls. once you look at how > many classes are involved in executing JSTL, it's pretty clear it's > using much more memory and causing more GC. The performance you see is > the result of JSTL using more memory. It will obviously use more CPU and make more API calls. However, it does not allocate any objects, but instead will reuse per page objects (which is very fast). So overall, it sounds weird to me that the bottleneck would be on tag invocation. In the end, it's hard to beat a Java "if" with a generic high level construct ;) I don't understand how anyone could be surprised by that. > Back in 2002, I wrote several pages using JSP + java and JSP + JSTL to > measure the actual cost of from a performance perspective. The > performance difference isn't noticeable if a page has less than 50 > tags. With 200+ tags, the performance difference does range from 2-5x > slower for JSTL. It's worse when you use XML with JSTL. It's also one > of the reasons I like to use JSTL + XML to benchmark. It really gives > the VM a workout. > > have you tried running JRockit 5? I did some tests recently and > JRockit's memory management might give you a 2x improvement in > performance. That's assuming you can use jdk5 Right, the code for invoking tags seems to be a good candidate to be optimized by a competent JIT. -- x Rémy Maucherat Developer & Consultant JBoss Group (Europe) SàRL x - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
I would advise using the tag plugins to change tags to pure java. JSP tags are considerably slower than pure JSP + java, but many people find that combination bad on maintenance. When remy and I worked on the book back in 2002, I did quite a bit of comparison between pure java and JSTL. as you see already, using JSTL means a single line of code gets converted to several lines of JSTL api calls. once you look at how many classes are involved in executing JSTL, it's pretty clear it's using much more memory and causing more GC. The performance you see is the result of JSTL using more memory. Back in 2002, I wrote several pages using JSP + java and JSP + JSTL to measure the actual cost of from a performance perspective. The performance difference isn't noticeable if a page has less than 50 tags. With 200+ tags, the performance difference does range from 2-5x slower for JSTL. It's worse when you use XML with JSTL. It's also one of the reasons I like to use JSTL + XML to benchmark. It really gives the VM a workout. have you tried running JRockit 5? I did some tests recently and JRockit's memory management might give you a 2x improvement in performance. That's assuming you can use jdk5 peter On 5/28/05, Kevin Burton <[EMAIL PROTECTED]> wrote: > I've been tuning our application trying to get the maximum performance > out if the system as possible. > > I've been throwing the system at jprofiler and allowing it to tell me > where to optimized. > > In short Tomcat is slower than our DB, filesystem,. network and all > other systems by about 4x. > > I've been able to shave some page load time off by some but not enough. > > The problem I'm starting to see is that we just have a large number of > c:set and c:if constructs (and so forth) within loops. These loops then > get executed 5 times and next thing you know it you have 50k taglib calls. > > The problem comes when you look at the source: > > Let's say you start with: > > > > > This nice little elegant piece of code gets expanded to: > > > private boolean _jspx_meth_c_set_0(PageContext _jspx_page_context) > > throws Throwable { > > PageContext pageContext = _jspx_page_context; > > JspWriter out = _jspx_page_context.getOut(); > > // c:set > > org.apache.taglibs.standard.tag.rt.core.SetTag _jspx_th_c_set_0 = > > (org.apache.taglibs.standard.tag.rt.core.SetTag) > > _jspx_tagPool_c_set_var_value_nobody.get(org.apache.taglibs.standard.tag.rt.core.SetTag.class); > > _jspx_th_c_set_0.setPageContext(_jspx_page_context); > > _jspx_th_c_set_0.setParent(null); > > _jspx_th_c_set_0.setVar("foo"); > > _jspx_th_c_set_0.setValue(new String("bar")); > > int _jspx_eval_c_set_0 = _jspx_th_c_set_0.doStartTag(); > > if (_jspx_th_c_set_0.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return true; > > _jspx_tagPool_c_set_var_value_nobody.reuse(_jspx_th_c_set_0); > > return false; > > } > > Which explains why JSP alone is so amazingly slow! > > > I did a comparison of the page performance here and it was 15x slower than > just using Java. So the same "set" operation in Java was 15x faster. > > ... so in short ... does anyone have any way to speed this up? > > The other thing I noticed is that EL is evaluated at runtime (which has to be > parsed) and sometimes uses reflections. Can anyone shed any more light on > this and hopefully provide some performance optimization suggestions? > > Kevin > > -- > > > Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. > See irc.freenode.net #rojo if you want to chat. > > Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html > >Kevin A. Burton, Location - San Francisco, CA > AIM/YIM - sfburtonator, Web - http://peerfear.org/ > GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 > > > - > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
[Addendum] Re: Tomcat and RMI client - setup (ClasCastException)
Bill Barker wrote: "Nikola Milutinovic" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] - setup catalina.policy - run it with "-security" option I'm on Windows XP, how do I enable security mode for TC? That's the idea. And, as a bonus, it works the same on Linux, Solaris, OS/X, . OK. I've realised that TC should handle security and now it works - on 5.0.19, imbeded in JBuilder. Well, I meant ot say it partially works. This is what I have set: -Djava.security.manager -Djava.security.policy=.../conf/catalina.policy -Djava.rmi.server.codebase=http://localhost:8080/MyApp/classes/ All seams to work except, I get a class cast exception when I cast this: Object obj = Naming.lookup( "//localhost/Search" ); SearchRMI search = (SearchRMI) obj; The funny thing is, when I inspect the result from the JBuilder, it shows that obj is of a class SearchImpl_Stub, which implements SearchRMI interface. I suspect I'm being hit with some RMI classloader issue, so my next question is: Has anyone done this? And what am I doing wrong? Nix. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Beginner Load Balancing w/ apache
Hi , Im hoping someone can give me some pretty detailed instructions on how to load balance 2 tomcat servers with 1 apache web server in front. I wanted to use mod_jk. First question, is , is this the best way to load balance? Second question. Where do i start. Im having trouble finding clear instrcution on how to get mod_jk working with apache. Can anyone help? I know tomcat pretty well, but am new to load balancing with apache, so the more detail the better.. thanks -B
Re: The amazingly slow performance of JSP (profiler results)
On 5/28/05, Kevin Burton <[EMAIL PROTECTED]> wrote: > I've been tuning our application trying to get the maximum performance > out if the system as possible. > > I've been throwing the system at jprofiler and allowing it to tell me > where to optimized. > > In short Tomcat is slower than our DB, filesystem,. network and all > other systems by about 4x. > > I've been able to shave some page load time off by some but not enough. > > The problem I'm starting to see is that we just have a large number of > c:set and c:if constructs (and so forth) within loops. These loops then > get executed 5 times and next thing you know it you have 50k taglib calls. > > The problem comes when you look at the source: > > Let's say you start with: > > > > > This nice little elegant piece of code gets expanded to: > > > private boolean _jspx_meth_c_set_0(PageContext _jspx_page_context) > > throws Throwable { > > PageContext pageContext = _jspx_page_context; > > JspWriter out = _jspx_page_context.getOut(); > > // c:set > > org.apache.taglibs.standard.tag.rt.core.SetTag _jspx_th_c_set_0 = > > (org.apache.taglibs.standard.tag.rt.core.SetTag) > > _jspx_tagPool_c_set_var_value_nobody.get(org.apache.taglibs.standard.tag.rt.core.SetTag.class); > > _jspx_th_c_set_0.setPageContext(_jspx_page_context); > > _jspx_th_c_set_0.setParent(null); > > _jspx_th_c_set_0.setVar("foo"); > > _jspx_th_c_set_0.setValue(new String("bar")); > > int _jspx_eval_c_set_0 = _jspx_th_c_set_0.doStartTag(); > > if (_jspx_th_c_set_0.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return true; > > _jspx_tagPool_c_set_var_value_nobody.reuse(_jspx_th_c_set_0); > > return false; > > } > > Which explains why JSP alone is so amazingly slow! > > > I did a comparison of the page performance here and it was 15x slower than > just using Java. So the same "set" operation in Java was 15x faster. > > ... so in short ... does anyone have any way to speed this up? > > The other thing I noticed is that EL is evaluated at runtime (which has to be > parsed) and sometimes uses reflections. Can anyone shed any more light on > this and hopefully provide some performance optimization suggestions? You already posted on this subject. Can you provide any hard data that a tag invocation is actually slow this time ? Guesses don't really do it, and profilers are often not very accurate. I'm asking because while the code is indeed quite verbose, it does not make it slow (all operations in the code that is cut & pasted are very cheap). The JIT is supposed to take care of this kind of code very well. For production configuration for Jasper, see: http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jasper-howto.html#Production%20Configuration We have a facility in Jasper called tag plugins, which allows replacing a tag invocation (which cannot be any simpler and still comply to the specification) by equivalent Java code (so your c:if is traslated to a regular Java "if"). Support for JSTL is very incomplete, but you can use that to optimize the few tags that you think need it. Kin-Man asserted that overall the performance improvement was small - 10% at most. See package org.apache.jasper.tagplugins.jstl (which has already an impl for "if" which could help you out). Feel free to sumit more JSTL tag plugins if you find it works well. EL will have to remain interpreted at runtime, but has a cache. I have not evaluated this performance area yet, however. Other xSP technologies interpret a lot of things at runtime, and most don't even rely on compilation (which will likely tend to make them a little slower, I assume), and the overhead is usually not in the xSP engine, so I don't see why it would be a major issue here (as long as the impl is not too stupid, of course). -- x Rémy Maucherat Developer & Consultant JBoss Group (Europe) SàRL x - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Auto-Deployment Problems (Real Version)
Just a few suggestions. Check the logs. Turn up debugging if nothing shows. It sounds like something has a "lock" on a file and Tomcat can't remove it. If this is the case your next move is to look at your app. Are you creating any threads or objects that are not getting cleaned up by the destroy method of the servlets? You may have to use a profiler or some tool to "see" what is hanging. Also look for windows file lock in the archives as there may be some help there. Just some ideas to try. Doug - Original Message - From: "Kory L" <[EMAIL PROTECTED]> To: Sent: Friday, May 27, 2005 1:38 PM Subject: Auto-Deployment Problems (Real Version) Hello, I've been trying to deploy my application into Tomcat and can get it to work just fine. However, as I make additional changes to the classes within my WAR, re-deploying them causes Tomcat to delete virtually every file within the webapps directory. Here's the flow of what's happening: 1) Deploy myapp.war into Tomcat's webapp directory. 2) Start up Tomcat. Tomcat sees the myapp.war file and explodes the WAR into the "myapp" directory under webapps. 3) I make changes to the code. 4) After creating a new myapp.war, I use my deployment process to deploy the application using the Tomcat Ant Tasks or simply by copying the file into the directory. ANT TASK: path="/${app.name}" war="${build.dir}/${app.name}.war" update="true"/> 5) Tomcat sees this new myapp.war and promptly deletes everything in the "webapps/myapp" directory, except for /WEB-INF/lib/axis.jar. Of course, this causes my application to die horribly, and only a removal of the "webapps/myapp" directory and another (re-)deployment (along with a restart of apache) will fix the situation. Does anyone know why this is happening? If it makes a difference, this is running on a windows box. Thanks, Kory - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
Whether he is precompiling or not, Peng, and I know that is important, he is still comparing applies and oranges. Further, he is comparing the setup for any and all uses of with pojo code that he does not give the same infrastructure accounting, apparently. The whole question fails to see the parameters of the test situation. On 5/28/05, Peng Tuck Kwok <[EMAIL PROTECTED]> wrote: > Just to check are your precompiling the jsp page? > > On 5/28/05, Kevin Burton <[EMAIL PROTECTED]> wrote: > > I've been tuning our application trying to get the maximum performance > > out if the system as possible. > > > > I've been throwing the system at jprofiler and allowing it to tell me > > where to optimized. > > > > In short Tomcat is slower than our DB, filesystem,. network and all > > other systems by about 4x. > > > > I've been able to shave some page load time off by some but not enough. > > > > The problem I'm starting to see is that we just have a large number of > > c:set and c:if constructs (and so forth) within loops. These loops then > > get executed 5 times and next thing you know it you have 50k taglib calls. > > > > The problem comes when you look at the source: > > > > Let's say you start with: > > > > > > > > > This nice little elegant piece of code gets expanded to: > > > > > private boolean _jspx_meth_c_set_0(PageContext _jspx_page_context) > > > throws Throwable { > > > PageContext pageContext = _jspx_page_context; > > > JspWriter out = _jspx_page_context.getOut(); > > > // c:set > > > org.apache.taglibs.standard.tag.rt.core.SetTag _jspx_th_c_set_0 = > > > (org.apache.taglibs.standard.tag.rt.core.SetTag) > > > _jspx_tagPool_c_set_var_value_nobody.get(org.apache.taglibs.standard.tag.rt.core.SetTag.class); > > > _jspx_th_c_set_0.setPageContext(_jspx_page_context); > > > _jspx_th_c_set_0.setParent(null); > > > _jspx_th_c_set_0.setVar("foo"); > > > _jspx_th_c_set_0.setValue(new String("bar")); > > > int _jspx_eval_c_set_0 = _jspx_th_c_set_0.doStartTag(); > > > if (_jspx_th_c_set_0.doEndTag() == > > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > > return true; > > > _jspx_tagPool_c_set_var_value_nobody.reuse(_jspx_th_c_set_0); > > > return false; > > > } > > > > Which explains why JSP alone is so amazingly slow! > > > > > > I did a comparison of the page performance here and it was 15x slower than > > just using Java. So the same "set" operation in Java was 15x faster. > > > > ... so in short ... does anyone have any way to speed this up? > > > > The other thing I noticed is that EL is evaluated at runtime (which has to > > be parsed) and sometimes uses reflections. Can anyone shed any more light > > on this and hopefully provide some performance optimization suggestions? > > > > Kevin > > > > -- > > > > > > Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. > > See irc.freenode.net #rojo if you want to chat. > > > > Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html > > > >Kevin A. Burton, Location - San Francisco, CA > > AIM/YIM - sfburtonator, Web - http://peerfear.org/ > > GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 > > > > > > - > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > - > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- "You can lead a horse to water but you cannot make it float on its back." ~Dakota Jack~ - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Cross-site scripting vulnerability
XSS issues have been reported in: - the servlet 2.3 examples (including snoop.jsp) - the manager servlet - the servlet 2.4 examples (affects TC5 only) All of these have been fixed in CVS. Fixes for these are included in Tomcat 5.5.7 onwards. Tomcat 4.1.31 still has the following XSS issues - snoop.jsp in examples - the manager servlet The workarounds until the next 4.1 release are: - don't deploy the examples on a production server - close your browser after using the manager application or disable javascript support in your browser If your tool has identified any further XSS issues, please report them to [EMAIL PROTECTED] Mark Narses Barona wrote: Our security tool produces the following warning against Tomcat 4.1.29 : [HTTP/8080/TCP] Server is an enabling vector for cross-site scripting exposure in clients [trace-1]. More... I seached the mailing list and found several references to cross-site scripting. Based on the information, I am lead to believe that the problem is not with the product, but with the examples or some other non-critical piece of code. I have removed the jakarta-tomcat-4.1.29/webapps/examples directory and its' content, but the problem persists. Is there some other file/directory that needs to be removed to fix this problem? I noticed one reference to a SnoopServlet, but can't find any file by that name. Narses Barona - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: cant post to wiki and security
. . wrote: 1 of 3 I wanted to include an install doc for tomcat 5.5.9 on solaris 9 with jdk1.5.0 Post it to the wiki 2 of 3 I also have a question: How do you create a login for webdav servlet so that no one besides your access list can log into the webdav folder and read it You secure it in web.xml, the same way you secure access to any other resource. 3 0f 3 WHy is wiki read only? Because you have to create a profile and logon before you can edit any pages. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: The amazingly slow performance of JSP (profiler results)
Just to check are your precompiling the jsp page? On 5/28/05, Kevin Burton <[EMAIL PROTECTED]> wrote: > I've been tuning our application trying to get the maximum performance > out if the system as possible. > > I've been throwing the system at jprofiler and allowing it to tell me > where to optimized. > > In short Tomcat is slower than our DB, filesystem,. network and all > other systems by about 4x. > > I've been able to shave some page load time off by some but not enough. > > The problem I'm starting to see is that we just have a large number of > c:set and c:if constructs (and so forth) within loops. These loops then > get executed 5 times and next thing you know it you have 50k taglib calls. > > The problem comes when you look at the source: > > Let's say you start with: > > > > > This nice little elegant piece of code gets expanded to: > > > private boolean _jspx_meth_c_set_0(PageContext _jspx_page_context) > > throws Throwable { > > PageContext pageContext = _jspx_page_context; > > JspWriter out = _jspx_page_context.getOut(); > > // c:set > > org.apache.taglibs.standard.tag.rt.core.SetTag _jspx_th_c_set_0 = > > (org.apache.taglibs.standard.tag.rt.core.SetTag) > > _jspx_tagPool_c_set_var_value_nobody.get(org.apache.taglibs.standard.tag.rt.core.SetTag.class); > > _jspx_th_c_set_0.setPageContext(_jspx_page_context); > > _jspx_th_c_set_0.setParent(null); > > _jspx_th_c_set_0.setVar("foo"); > > _jspx_th_c_set_0.setValue(new String("bar")); > > int _jspx_eval_c_set_0 = _jspx_th_c_set_0.doStartTag(); > > if (_jspx_th_c_set_0.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return true; > > _jspx_tagPool_c_set_var_value_nobody.reuse(_jspx_th_c_set_0); > > return false; > > } > > Which explains why JSP alone is so amazingly slow! > > > I did a comparison of the page performance here and it was 15x slower than > just using Java. So the same "set" operation in Java was 15x faster. > > ... so in short ... does anyone have any way to speed this up? > > The other thing I noticed is that EL is evaluated at runtime (which has to be > parsed) and sometimes uses reflections. Can anyone shed any more light on > this and hopefully provide some performance optimization suggestions? > > Kevin > > -- > > > Use Rojo (RSS/Atom aggregator)! - visit http://rojo.com. > See irc.freenode.net #rojo if you want to chat. > > Rojo is Hiring! - http://www.rojonetworks.com/JobsAtRojo.html > >Kevin A. Burton, Location - San Francisco, CA > AIM/YIM - sfburtonator, Web - http://peerfear.org/ > GPG fingerprint: 5FB2 F3E2 760E 70A8 6174 D393 E84D 8D04 99F1 4412 > > > - > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]