KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > webman > stager > SiteReceiverLauncher


1 package webman.stager;
2
3 import java.io.*;
4
5 /**
6  * Diese Klasse ist ein Wrapper für den SiteReceiver in der Art, dass hierüber der SiteReceiver
7  * als neuer, unabhängiger Prozess gestartet wird und dessen System.out-Ausgaben durch den Wrapper
8  * ausgegeben werden. Sobald der SiteReceiver aber "End of HTTP output" schreibt, beendet sich der
9  * Wrapper, der SiteReceiver aber läuft weiter. Dieses Vorgehen erlaubt es, das CGI, welches den
10  * SiteReceiverLauncher startet, zu beenden, bevor der eigentliche SiteReceiver beendet ist. Das
11  * ist wiederum nötig, damit der ServerStarter auf der SenderSeite den InputStream zum CGI erhält,
12  * denn der wird solange nicht zurückgegeben, wie das CGI noch nicht beendet ist. Dadurch kommt es
13  * aber zu Problemen im zeitlichen Ablauf des Sendens und Empfangens, die schließlich dazu führen
14  * können, dass das CGI ein zweites Mal augerufen wird, vielleicht weil der erste Aufruf so lange
15  * dauert (genau genommen dauert es solange, den InputStream zu kriegen, weil ja der SiteReceiver
16  * erst beendet sein muss. Wenn z.B. der SiteReceiver eine große Site udpaten muss, er also lange
17  * braucht vom Start bis zum Ende, kann in der Verbindung zum CGI eine Exception geworfen werden,
18  * die zu einem neuen Verbindungsversuch führt, was einen weiteren SiteReceiver startet, wodurch
19  * sich 2 SiteReceiver überlagern, was zu Inkonsitenzen führt!)
20  * @author $Author: torsten $
21  * @version $Revision: 1.1 $
22  */

23 public class SiteReceiverLauncher
24 {
25     /**
26      * startet SiteReceiver und beendet sich selbst nachdem SiteReceiver "end of http output" gesendet hat
27      * schreibt dessen Ausgaben nach stdout
28      * @param args Kommandozeilenparameter wie beim SiteReceiver
29      */

30     public static void main(String JavaDoc[] args)
31     {
32         try
33         {
34             //Aufrufparameter einfach durchgereicht; nur "java webman.stager.SiteReceiver" wird davor gesetzt
35
String JavaDoc javaHome = System.getProperty("java.home");
36             String JavaDoc javaProg = javaHome + File.separator + "bin" + File.separator + "java";
37             String JavaDoc javaClasspath = System.getProperty("java.class.path");
38             String JavaDoc[] newArgs = new String JavaDoc[args.length + 4];
39             newArgs[0] = javaProg;
40             newArgs[1] ="-classpath";
41             newArgs[2] = javaClasspath;
42             newArgs[3] = "webman.stager.SiteReceiver";
43             for ( int x=0; x<args.length; x++ ) newArgs[x+4] = args[x];
44             //Jetzt geht's los
45
Process JavaDoc proc = Runtime.getRuntime().exec(newArgs);
46             BufferedReader inReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
47             //BufferedReader errReader = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
48
String JavaDoc line;
49             while ((line = inReader.readLine()) != null)
50             {
51                 System.out.println(line);
52                 System.out.flush();
53                 if ( line.indexOf("end of http output") > -1 ) //Das ist das Ende!
54
{//muss baer noch an den ServerStarter gesandt werden, sonst denkt der, dass der SiteReceiver nicht funzt!!
55
System.exit(0);
56                 }
57             }
58         }
59         catch (Exception JavaDoc e)
60         {
61             e.printStackTrace();
62         }
63     }
64 }
Popular Tags