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.createMBeans(ServerLifecycleListener.java:369)
at
org.apache.catalina.mbeans.ServerLifecycleListener.createMBeans(ServerLifecycleListener.java:777)
at
org.apache.catalina.mbeans.ServerLifecycleListener.createMBeans(ServerLifecycleListener.java:751)
at
org.apache.catalina.mbeans.ServerLifecycleListener.createMBeans(ServerLifecycleListener.java:339)
at
org.apache.catalina.mbeans.ServerLifecycleListener.lifecycleEvent(ServerLifecycleListener.java:206)
at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:166)
at org.apache.catalina.core.StandardServer.start(StandardServer.java: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(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.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(CharsetEncoder.java:933)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:529)
at sun.nio.cs.StreamEncoder$CharsetSE.flushLeftoverChar(StreamEncoder.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(ResponseBase.java:483)
at
org.apache.catalina.connector.HttpResponseBase.finishResponse(HttpResponseBase.java:253)
at org.apache.ajp.tomcat4.Ajp13Response.finishResponse(Ajp13Response.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(Ajp13Response.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(Ajp13Response.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]