You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Horacio de Oro <ho...@trimaxcba.com> on 2004/07/16 19:45:27 UTC

Re: File.mkdirs() don't work if started with jsvc

Hi again!

I was trying File.mkdirs() on Tomcat 5.0.25 on Debian Woody, and I can 
say File.mkdirs() don't work if Tomcat is started with jsvc.

(I've to say that this happens ONLY on Debian Woody... Debian Sarge and
Debian Sid works ok).

I've made a simple servlet (since Tomcat can't compile JSP):

protected void doGet(HttpServletRequest request,
     HttpServletResponse response) throws ServletException,
     IOException {

     response.setContentType("text/html");
     PrintWriter out = response.getWriter();

     out.println("<html>");
     out.println("<head>");
     out.println("<title>Servlet</title>");
     out.println("</head>");

     try {

         String fileName = "/tmp/test/" +
                     System.currentTimeMillis() +
                     "/test/afile.txt";

         out.println("File name: " + fileName + "<br>");
         File file = new File(fileName);
         boolean ok = file.mkdirs();

         if(ok)
             out.println("OK<br>");
         else
             out.println("FAIL without exception!<br>");

     } catch(Exception e) {
         out.println("FAIL with exception!<br>");
         out.println("<pre>");

         StackTraceElement el[] = e.getStackTrace();
         out.println(e.getMessage());

         for(int i=0; i<el.length; i++) {
             out.print("    ");
             out.println(el[i].toString());
         }
         out.println("</pre>");
     }

     out.println("<body>");
     out.println("</body>");
     out.println("</html>");
     out.close();
}

If I start Tomcat with "startup.sh", I get:

============================================================
File name: /tmp/test/1089999282783/test/afile.txt
OK
============================================================

If I start Tomcat with "jsvc", I get:

============================================================
File name: /tmp/test/1089999639863/test/afile.txt
FAIL without exception!
============================================================

I'll post whis message on tomcat-user and commons-user, because maybe 
this could be a jsvc related problem

Thanks in advance!

Horacio

FYI: # java -version
java version "1.4.2_05"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)
Java HotSpot(TM) Client VM (build 1.4.2_05-b04, mixed mode)

PS: here is my original post:

Horacio de Oro wrote:
> Hi! What a subject!
> 
> I've trying to make work starting up Tomcat with jsvc.
> On Debian unstable, this works ok.
> On Debian stable (woody), I could startup Tomcat, but when I try to 
> access to a JSP file, I get the classic exception:
> 
> 2004-07-12 02:03:58 StandardWrapperValve[jsp]: Servlet.service() for 
> servlet jsp threw exception
> java.io.FileNotFoundException: 
> /home/horacio/tomcat-pruebas-startup/jakarta-tomcat-5.0.25/work/Catalina/localhost/prueba/org/apache/jsp/test_jsp.java 
> 
>         at java.io.FileOutputStream.open(Native Method)
>         at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
>         at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
>         at 
> org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:188)
> 
> This isn't a permission problems, I've checked them a hundred times, 
> I've excecute 'chown -R USER.USER jakarta-tomcat-dir' many times too.
> 
> I've follow the instructions on Tomcat FAQ, and I've tryed
> http://jakarta.apache.org/tomcat/faq/misc.html#commonsLoggingLog4j
> http://marc.theaimsgroup.com/?l=tomcat-user&m=108330970225012&w=2
> http://marc.theaimsgroup.com/?l=tomcat-user&m=108578233003073&w=2
> 
> and couldn't make it work on Debian stable (woody).
> 
> I was looking at 'generateJava()' on file 
> org.apache.jasper.compiler.Compiler.java (line 188), this is what make 
> the exception:
> 
> try {
>   osw = new OutputStreamWriter(     // <- LINE 188
>    new FileOutputStream(javaFileName), javaEncoding);
> 
> } catch (UnsupportedEncodingException ex) {
> errDispatcher.jspError("jsp.error.needAlternateJavaEncoding",
>         javaEncoding);
> }
> 
> So, I make a little java program using FileOutputStream.
> 
>     public static void main(String[] args) throws Exception {
>         FileOutputStream fos = new 
> FileOutputStream("/tmp/dir/that/doesnt/exist/test.txt");
>         byte test[] = new byte[1024];
>         fos.write(test);
>         fos.close();
>     }
> 
> Since "/tmp/dir/that/doesnt/exist" doesn't existe, I get the exact same 
> exception:
> 
> java.io.FileNotFoundException:
>         at java.io.FileOutputStream.open(Native Method)
>         at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
>         at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
> 
> 
> 
> And then, I've tried to make the directories that Tomcat needs to make 
> the temporary .java, so I do:
> 
> mkdir -p 
> /home/horacio/tomcat-pruebas-startup/jakarta-tomcat-5.0.25/work/Catalina/localhost/prueba/org/apache/jsp 
> 
> 
> and then, reloaded the page, and this work!!!!!
> 
> So, the only problem is that Tomcat doesn't make the proper directory 
> structure where it should put the generated .java...
> 
> So:
>  - If I run Tomcat from "startup.sh"       -> WORKS
>  - If I run Tomcat from "jsvc" on UNSTABLE -> WORKS
>  - If I run Tomcat from "jsvc" on STABLE   -> DOESN'T WORKS
> 
> ON DEBIAN UNSTABLE:
> java version "1.4.2_04"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
> Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)
> 
> ON DEBIAN STABLE:
> java version "1.4.2"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28)
> Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode)
> 
> ALSO ON DEBIAN STABLE:
> java version "1.4.2_04"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
> Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)
> 
> Tomcat 5.0.25
> 
> Is this a bug?
> How can I make work Tomcat on Debian stable with jsvc?
> 
> Thanks in advance!
> 
> Horacio de Oro
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: File.mkdirs() don't work if started with jsvc

Posted by Morus Walter <mo...@tanto.de>.
Horacio de Oro writes:
> Tomcat started with jsvc:
> 
> fileName = "/tmp/test/something" => DOESN'T WORKS
> fileName = "/tmp/onedir" => THIS WORKS!!!
> 
> So, the problem is: Tomcat started with jsvc on Debian Woody:
>   - File.mkdirs() WORKS if it should make ONE directory.
>   - File.mkdirs() DOESN'T WORKS if it should make MORE THAN ONE directory.
> 
If you ask me, this is a java problem not a tomcat problem.

I did another test: I extended the daemon sample 'SimpleDaemon' to
create directories /tmp/bla/fasel and /tmp/blub using mkdirs
(just after the line 
	System.err.println("SimpleDaemon: started acceptor loop");
I added
	new File("/tmp/bla/fasel").mkdirs();
        new File("/tmp/blub").mkdirs();
)
/tmp/bla/fasel is not created /tmp/blub is.

So tomcat doesn't seem to be involved in the failure.
IMO the bug is either in java itself or in daemon.
And it must be some weird interaction with system libraries (pthread, libc)
since it occurs only on some systems.

After some further search I decided to look at javas and jsvc libraries
and the only difference is, java uses libpthread, jsvc doesn't.

If one changes that (that is adds -lpthread to the linking of jsvc in
daemon-1.0/src/native/unix/native/Makefile (that's autogenerated, but
I didn't want to search through the autoconf/automake stuff for the correct
place)
jsvc: jsvc-unix.o libservice.a
        $(LDCMD) $(LDFLAGS) jsvc-unix.o libservice.a -lpthread -o ../jsvc
instead of
jsvc: jsvc-unix.o libservice.a
        $(LDCMD) $(LDFLAGS) jsvc-unix.o libservice.a -o ../jsvc

the problem disapears. :-)

So the origin of the problem is somewhere in the details of debian woodys 
libc/libpthread.

I filed a bug report for commons daemon.
http://issues.apache.org/bugzilla/show_bug.cgi?id=30177

Morus

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: File.mkdirs() don't work if started with jsvc

Posted by Horacio de Oro <ho...@trimaxcba.com>.
QM wrote:
> On Fri, Jul 16, 2004 at 02:45:27PM -0300, Horacio de Oro wrote:
> : I was trying File.mkdirs() on Tomcat 5.0.25 on Debian Woody, and I can 
> : say File.mkdirs() don't work if Tomcat is started with jsvc.
> 
> Step 1: perms issue?
> 

I'm sure it isn't a permissions problem... All the users have write 
access to "/tmp"... That's because I choose /tmp. And everytime I made 
the tests, I checked that no /tmp/test directory exist.

And I start tomcat with the SAME user, whenever using "startup.sh" or 
"jsvc".

> 
> :         String fileName = "/tmp/test/" +
> :                     System.currentTimeMillis() +
> :                     "/test/afile.txt";
> : 
> 
> Step 2: I don't recall, offhand, whether mkdir() will create a full path
> of directories, filling in nonexistent ones as you go.
> 

 From http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html#mkdirs()

(...)
Creates the directory named by this abstract pathname, including any 
necessary but nonexistent parent directories. Note that if this 
operation fails it may have succeeded in creating some of the necessary 
parent directories.
(...)

> What about
> 
> 	fileName = "/tmp/test/"
> 
> ?
> 

Tomcat started with jsvc:

fileName = "/tmp/test/something" => DOESN'T WORKS
fileName = "/tmp/onedir" => THIS WORKS!!!

So, the problem is: Tomcat started with jsvc on Debian Woody:
  - File.mkdirs() WORKS if it should make ONE directory.
  - File.mkdirs() DOESN'T WORKS if it should make MORE THAN ONE directory.

Thanks for your response!

Horacio

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: File.mkdirs() don't work if started with jsvc

Posted by QM <qm...@brandxdev.net>.
On Fri, Jul 16, 2004 at 02:45:27PM -0300, Horacio de Oro wrote:
: I was trying File.mkdirs() on Tomcat 5.0.25 on Debian Woody, and I can 
: say File.mkdirs() don't work if Tomcat is started with jsvc.

Step 1: perms issue?


:         String fileName = "/tmp/test/" +
:                     System.currentTimeMillis() +
:                     "/test/afile.txt";
: 

Step 2: I don't recall, offhand, whether mkdir() will create a full path
of directories, filling in nonexistent ones as you go.

What about

	fileName = "/tmp/test/"

?


-QM


-- 

software  -- http://www.brandxdev.net
tech news -- http://www.RoarNetworX.com


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org