I'm sorry, I didn't realize you were going to argue with me and criticize my
reply.  I thought you were asking for an opinion.

First, Ajp13Connector is not the recommended connector to use for 4.1.18.
CoyoteConnector is the recommended connector.

Second, the compatibility problems between Ajp13Connector and JMX are
well-known, at least on this list.  Since you seem so adept at searching the
list, I'm sure you would have seen this.

Third, we have several production sites right now with 4.1.18, Apache 2, and
mod_jk.  We have a couple dozen more with Apache 1.3, mod_jserv, and Tomcat
3.x.  All are under fairly heavy load, approx. 100,000 page views per day
during the week.  The apps are all heavily graphic-intensive, that is, lots
of file I/O, lots of RAM, lots of CPU.  We don't have any problems with
mod_jserv or mod_jk.  Uptime is in the many months timeframe, each and every
site and webapp is monitored for availability every 60 seconds, 24/7 and
there have been no alerts that weren't initiated by us for maintenance...I
consider that stable.  You may not.  You may have problems, I can only reply
to your questions with comments and opinions based on my personal
experience.  If you don't like that, my advice is to refrain from posting
the question in the first place, or, if you must post, clearly state in your
post the parameters within which you will consider a reply to be "valid"
such as "I want your opinion, but only if you agree with me".

Fourth, you've got some Charset errors in there.  Our apps don't use
anything but standard Western charsets (our apps are all in English except
for a few that are in French), so I am not familiar with those errors.  I
don't think I would blame them on JK, though.

Fifth, I'm not a developer.  I'm a systems administrator.

It's simple: if you don't want to use a connector, THEN DON'T.  Nobody is
twisting your arm, and the use of Apache with Tomcat is NOT REQUIRED.
Arguing about connector stability or problems is a waste of time...they're
open source.  Either pitch in and fix them to your heart's content, help
others to do so, or be quiet.  If you must use Apache with Tomcat for some
reason, there are a number of ways to do this, all of which have been
discussed to death on this list, and if I had to rank them I would rank them
thusly:  1) JK, 2) JK2, 3) mod_proxy/mod_rewrite, 4) external redirection
(ipchains, for example, or some other software).  I doubt anyone will tell
you differently, but I've been wrong plenty of times before and you are
certainly welcome to disagree.

Perhaps others will answer your other questions.  Arguing is a waste of my
time, I apologize for replying in the first place and wasting yours.

John

> -----Original Message-----
> From: Tomasz Nowak [mailto:[EMAIL PROTECTED]
> Sent: Thursday, February 27, 2003 10:28 AM
> To: Tomcat Users List
> Subject: Re: Four questions (about logging, connectors and manager)
> 
> 
> Turner, John <[EMAIL PROTECTED]> wrote:
> >
> > A #2: I don't feel the connectors are complex.  JK is easy to
> > configure, easy to get working (once you understand how it works),
> > and stable.
> 
> Hi, John. Browsing the archive I've remebered you as a very competent
> developer/user, so I'm really very glad you answered my letter :)
> I would like to tell you about mod_jk complexibility and stability
> from my point of view.
> 
> 1. Starting Tomcat 4.1.18 with org.apache.ajp.tomcat4.Ajp13Connector,
>    catalina.out:
> 
> ServerLifecycleListener: createMBeans: MBeanException
> java.lang.Exception: ManagedBean is not found with Ajp13Connector
>         at 
> org.apache.catalina.mbeans.MBeanUtils.createMBean(MBeanUtils.java:224)
>         at 
> org.apache.catalina.mbeans.ServerLifecycleListener.createMBean
> s(ServerLifecycleListener.java:369)
>         at 
> org.apache.catalina.mbeans.ServerLifecycleListener.createMBean
> s(ServerLifecycleListener.java:777)
>         at 
> org.apache.catalina.mbeans.ServerLifecycleListener.createMBean
> s(ServerLifecycleListener.java:751)
>         at 
> org.apache.catalina.mbeans.ServerLifecycleListener.createMBean
> s(ServerLifecycleListener.java:339)
>         at 
> org.apache.catalina.mbeans.ServerLifecycleListener.lifecycleEv
> ent(ServerLifecycleListener.java:206)
>         at 
> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(L
ifecycleSupport.java:166)
>         at 
> org.apache.catalina.core.StandardServer.start(StandardServer.j
ava:2182)
>         at 
> org.apache.catalina.startup.Catalina.start(Catalina.java:512)
>         at 
> org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
>         at 
> org.apache.catalina.startup.Catalina.process(Catalina.java:180)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess
orImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth
odAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:324)
>         at 
> org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
> 
> Tada! Seems they dont like with JMX each other.
> 
> 2. But let's request some simple pages (ROOT/index.jsp couple 
> of times,
>    list webapp in manager, etc). Pages in fact work well, but after
>    only a few requests I find in logs such a mess:
> 
> catalina.out:
> ============
> java.lang.IllegalStateException: Current state = FLUSHED, new 
> state = CODING_END
>         at 
> java.nio.charset.CharsetEncoder.throwIllegalStateException(Cha
rsetEncoder.java:933)
>         at 
> java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:529)
>         at 
> sun.nio.cs.StreamEncoder$CharsetSE.flushLeftoverChar(StreamEnc
> oder.java:356)
>         at 
> sun.nio.cs.StreamEncoder$CharsetSE.implClose(StreamEncoder.java:412)
>         at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:158)
>         at 
> java.io.OutputStreamWriter.close(OutputStreamWriter.java:222)
>         at java.io.PrintWriter.close(PrintWriter.java:137)
>         at 
> org.apache.catalina.connector.ResponseBase.finishResponse(Resp
> onseBase.java:483)
>         at 
> org.apache.catalina.connector.HttpResponseBase.finishResponse(
HttpResponseBase.java:253)
>         at 
> org.apache.ajp.tomcat4.Ajp13Response.finishResponse(Ajp13Respo
> nse.java:191)
>         at 
> org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:464)
>         at 
> org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:551)
>         at java.lang.Thread.run(Thread.java:536)
> (x12 times)
> 
> engine log:
> ===========
> java.net.SocketException: Broken pipe
>         at java.net.SocketOutputStream.socketWrite0(Native Method)
>         at 
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>         at 
> java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>         at org.apache.ajp.Ajp13.send(Ajp13.java:525)
>         at 
> org.apache.ajp.RequestHandler.finish(RequestHandler.java:501)
>         at org.apache.ajp.Ajp13.finish(Ajp13.java:395)
>         at 
> org.apache.ajp.tomcat4.Ajp13Response.finishResponse(Ajp13Respo
> nse.java:196)
>         at 
> org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:464)
>         at 
> org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:551)
>         at java.lang.Thread.run(Thread.java:536)
> (multiple)
> 
> 2003-02-27 16:01:47 Ajp13Processor[8009][1] process: invoke
> java.net.SocketException: Broken pipe
>         at java.net.SocketOutputStream.socketWrite0(Native Method)
>         at 
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>         at 
> java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>         at org.apache.ajp.Ajp13.send(Ajp13.java:525)
>         at 
> org.apache.ajp.RequestHandler.finish(RequestHandler.java:501)
>         at org.apache.ajp.Ajp13.finish(Ajp13.java:395)
>         at 
> org.apache.ajp.tomcat4.Ajp13Response.finishResponse(Ajp13Respo
> nse.java:196)
>         at 
> org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:464)
>         at 
> org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:551)
>         at java.lang.Thread.run(Thread.java:536)
> (multiple)
> 
> 
> 3. Let's see what mod_jk.log says:
> 
> [jk_ajp_common.c (970)]: ERROR sending data to client. 
> Connection aborted or network problems
> [jk_ajp_common.c (681)]: ERROR: can't receive the response 
> message from tomcat, network problems o
> r tomcat is down.
> [jk_ajp_common.c (1050)]: Error reading reply from tomcat. 
> Tomcat is down or network problems.
> [jk_ajp_common.c (1187)]: ERROR: Receiving from tomcat 
> failed, recoverable operation. err=0
> [jk_ajp_common.c (681)]: ERROR: can't receive the response 
> message from tomcat, network problems o
> r tomcat is down.
> [jk_ajp_common.c (1050)]: Error reading reply from tomcat. 
> Tomcat is down or network problems.
> [jk_ajp_common.c (1187)]: ERROR: Receiving from tomcat 
> failed, recoverable operation. err=0
> [jk_ajp_common.c (970)]: ERROR sending data to client. 
> Connection aborted or network problems
> 
> Tomcat is down? Network problems?? Hello!
> That's just a locahost with stable Tomcat instance and few 
> requests to it!
> I even can't imagine how would my logs look in a productive 
> environment.
> 
> So, John, you call all of this as "simple and stable"? :-)
> 
> > If you don't want to use a connector, don't even deal with
> > mod_rewrite or mod_proxy, just run Tomcat on port 80 and be
> > done with it.
> 
> I can't because of at least two reasons:
> - I must have Apache HTTPd on port 80 on this machine
> - I won't run Tomcat as root user
> 
> > Or better yet, run it on 8080 and use iptables/ipchains
> > to redirect 80 to 8080.
> 
> Impossible[*] with name-based virtual hosts (mind I need to
> have Apache HTTP don port 80).
> * Well, almost impossible. There is a possibility of filtering
>   tcp packets in iptables as far as I know. But such solution
>   I would not call a "good practice" for serving web pages.
>  
> -- 
> Tomasz Nowak
> 
> 
> ---------------------------------------------------------------------
> 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]

Reply via email to