It's perfectly easy to write code which runs as a process to read a continuous
pipe, or to write it to be invoked fresh every time. No special knowledge is
needed in either case (the former in Perl boils down to "while (<STDIN>)")

I think you'll get better advice if you post more details about what you're
trying to achieve. Also, this isn't really the forum to ask this question, since
its not about configuring and using Tomcat.

That said, I'm guessing you're trying to take a log file feed from Apache and
then post it back - first of all, be careful of creating an infinite loop! It
sounds like an awkward way to do things. If you want to take log data for a Java
web application and make it available via another servlet, it's better to use a
mechanism other than HTTP to talk back to yourself; e.g. open a separate i/o
stream in Tomcat and create a separate log process which will speak to it via a
pipe stream or TCP/IP. One sneaky way to do this might be to start a JVM running
your own logging program, and have it fork a thread to run Tomcat's main() on
startup. Thus you end up with the logger and Tomcat in the same JVM, and the act
of Apache fork()ing the logger sets up the pipe you need.

Depending on what you're trying to do, it may be easier just to subclass all
your servlets off a common base class which logs servlet activity completely
within the JVM.

One thing you definitely *don't* want to do is start a JVM for every request -
JVM's have a pretty high startup overhead, at least a couple of seconds of CPU.
If you want to create a small program or script that runs very frequently, Perl
is a good choice, but the best way is to use a statically compiled language with
minimal startup overhead such as C.

Cheers
Dave

tim leung wrote:

> My problem is I must use unix pipe.
> e.g. command1 xxxx | command2 xxxx
>
> where command1 is some unix command.
> where command2 is "java PipeReader"
>
> that is output of command1 sent to input of java
> application -- PipeReader.
>
> why I must use pipe?
> because I am using apache web server.  apache server
> will do logging to a text file.  instead of log to
> text file. I can also log to a pipe :
>
>   // apache server log to a pipe instead of log file
>   e.g. CustomLog "|java -classpath /opt pipe" common
>
> I pipe the log's (byte sent) / sessionID .... etc...
> to the application and the application will HTTP POST
> the log back to servlet for further processing.
>
> the suggestion of unix pipe to a running process
> (daemon) is what I really want to do but i dont' think
> there is a way to do it.  inorder to pipe the
> command1's Output to java app PipeReader's Input
> (stdin).  I must invoke a new JVM process inorder to
> do pipe.  right?
>
> any one can help me out?
> thanks.
>
> --- Ross Dyson <[EMAIL PROTECTED]> wrote:
> > The JVM is loaded just ONCE not once pre request.
> >
> > This is WHY java back-ends have better performance
> > and are scalable.
> >
> > -----Original Message-----
> > From: tim leung [mailto:[EMAIL PROTECTED]]
> > Sent: Sunday, 6 May 2001 4:39 AM
> > To: [EMAIL PROTECTED]
> > Subject: JAVA vs. PERL startup time + memory
> >
> >
> > Hi,
> > I am thinking of write an unix app that will get
> > data
> > from a pipe  e.g.  |       and then will do a HTTP
> > POST to some server.
> >
> > e.g.  command1 xxxx  |  java PipeReader    -- OR --
> > e.g.  command1 xxxx |  perl PipeReader
> >
> > Assume I need to invoke the JVM process or PERL
> > process very frequently ( 5 times / sec ) --> ( 300
> > times / min )
> >
> > I know that Java's startup time is slow. and it
> > allocation a block of per-defined memory when it
> > starts up.  like 2MB. although it may only
> > use 300KB.  so. I think start a JVM process is SLOW
> > and need lots of
> > memory.
> >
> > I am not very familiar with PERL. I wonder if I
> > invoke
> > 300 PERL process / min, is it faster and use less
> > memory than invoke 300 JVM process / min?
> >
> > Both will do the same thing.--> each time it's'
> > invoked, it will do a HTTP POST of some data get
> > from
> > the pipe ( stdin ) and then System.exit().
> >
> > thanks.
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Yahoo! Auctions - buy the things you want at great
> > prices
> > http://auctions.yahoo.com/
>
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Auctions - buy the things you want at great prices
> http://auctions.yahoo.com/

Reply via email to