Essas sao algumas solucoes para rodar um servidor Java
como servico do NT:
http://www.sys-con.com/java/archives/0601/nanda/index.html
http://www.eworksmart.com/jnt/
http://www.kcmultimedia.com/javaserv/
http://ise.fdns.net/products.html
Alexandre Rodrigues Gomes wrote:
>
> Para quem perguntou sobre serviços no NT.
> Tive muiiiiiiiitos problemas pra consegui fazer as coisas funcionarem.
>
>
>
>
> Bug Id 4323062
>
> Votes 587
>
> Synopsis Any Windows NT Service embedding Java VM aborts, when user
> logs out from Windows
>
> Category java:runtime
>
> Reported Against kestrel-rc2, kestrel-rc1, kestrel-rc3, 1.2.2, 1.3
>
> Release Fixed
>
> State In progress, bug
>
> Related Bugs 4358808
> <http://developer.java.sun.com/developer/bugParade/bugs/4358808.html>
>
> Submit Date Mar 17, 2000
>
> Description
> IHAC with a NT Service program which starts a Java program. The java
>
> program is a simple program with a server socket waiting to accept socket
>
> connections. The program is installed and everything works fine until the
> user
>
> decides to log off. Since the Java program is installed through the NT
> Service,
>
>
>
> the program should continue to work even when the user logs out of the
>
> system. But on the contrary, the program goes into an unstable state and
> the
>
> program hangs. I have enclosed the stack trace which I managed to capture
> by
>
> making the NT Service interact with the desktop, so we get to see the
> console.
>
>
>
> This problem does not occur with JDK1.1.x. This happens only for JDK1.2 and
>
> greater versions. The Java thread dump and testcase TestNTSvc.tar.Z is
>
> in the attachments.
>
>
>
>
>
> Follow these instructions to reproduce the problems:
>
> SOURCE MODIFICATION
>
>
>
> 1)In the clienttest.java file edit line 16:
>
> s = new Socket("sworks.eng.sun.com",7990);
>
> with your test system's host address. Save and recompile.
>
>
>
>
>
> INSTRUCTIONS FOR INSTALLING SERVICE ON WINDOW NT 4.0
>
>
>
> 1. Extract the contents of the zip file to say C:\
>
> 2. Assuming this, you would now have a directory C:\testntsvc
>
> 3. Create an "System Variable" TEST_ROOT in Environment tab of the System
>
> Properties from the "Control Panel" Settings
>
> and set C:\testntsvc
>
> to
>
> TEST_ROOT.
>
> 4. Append C:\testntsvc to your classpath settings in control panel and also
>
> make sure your CLASSPATH is a "System Variable".
>
> 5. Go to DOS command prompt and go to the directory c:\testntsvc
>
> 6. Type TestNTSvc -install to install the NTService.
>
> 7. Now go to your control panel settings and click on the "Services"
>
> icon to see if the NT Service "TestNTSvc" is installed.
>
> 8. If it has not been installed please contact me at xxxxx@xxxxx
>
> or 650 526 3336.
>
> 9. If it has been installed, then select the "TestNTSvc"
>
> in the services window, click on the button "Startup" and set
>
> the "StartUp Type" to Manual(from Automatic).
>
> Also check the checkbox for "Allow Service to interact with the Desktop".
>
> 10. Now click on OK Button and close the control panel settings.
>
> 11. Now ensure that you have installed JDK1.1.6, JDK1.1.7b and Java2 on your
>
> NT Workstation.
>
> 12. Open the file "cmdscripts.cfg" file in C:\testntsvc, and update your
>
> directory path for the various jre vms. You can comment all the lines
>
> except the line which you intend to invoke a particular JVM, so for example
>
> you intend to run jre1.2.2, then the following would be the text in the
>
> file cmdscripts.cfg file:
>
>
>
>
>
> adm=d:/jdk1.2.2/jre/bin/java -mx256m -DTEST_ROOT=%TEST_ROOT% testserver
>
> #adm=f:/jdk1.1.7b/bin/java -mx256m -classpath %classpath%;f:/testntsvc
>
> -DTEST_ROOT=%TEST_ROOT% testserver
>
> #adm=f:/jdk1.1.7b/bin/jre -mx256m -cp f:/testntsvc -DTEST_ROOT=%TEST_ROOT%
>
> testserver
>
> adm=f:/jdk1.1.6/bin/jre -cp f:/testntsvc -DTEST_ROOT=%TEST_ROOT% testserver
>
> #adm=f:/jdk1.1.6/bin/java -classpath %classpath%;f:/testntsvc
>
> -DTEST_ROOT=%TEST_ROOT% testserver
>
>
>
> 13. Save the file and close it.
>
> 14. Reboot your workstation so that the classpath and the new "System
>
> variables" comes into effect.
>
> 15. After booting go to the control panel.
>
> 16. Go to the services panel in control panel and
>
> start the NT Service "TestNTSvc". You should now see the Java console
>
> for d:/jdk1.2.2/bin/jre with the statement "Getting Connected" being printed
>
> in the console.
>
>
>
> 17. Run the Java test program testclient.java on the command prompt,
>
> by typing in at the command prompt c:\testntsvc>java testclient
>
> 18. The program works and exits normally after printing the statements
>
> "Creating a Socket", "Created the client Socket" on the console. This
>
> is what a remote client system would see when accessing the Server service.
>
>
>
> 19. Now try logging off the NT Workstation and you will see in the Java
> console
>
> that the JVM dumps a Java thread trace and the service hangs
> unresponsive
>
> when you log back in.
>
>
>
>
>
>
>
>
>
>
>
>
>
> java version "1.3.0rc2"
>
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0rc2-Y)
>
> Java HotSpot(TM) Client VM (build 1.3.0rc2-Y, mixed mode)
>
>
>
>
>
> I'm writing NT-service by JDK1.3 (and some C codes).
>
>
>
> 1.NT-service start by manual. (check "System Account")
>
> 2.logoff
>
>
>
> ...then, NT-service(running JVM in service) stop process.
>
>
>
> I hope, cancel shutdown JVM.
>
> (Review ID: 103003)
>
>
>
>
>
>
>
>
>
>
>
> java version "1.3.0rc1"
>
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0rc1-T)
>
> Java HotSpot(TM) Client VM (build 1.3.0rc1-S, mixed mode)
>
>
>
> Using ServiceInstaller 1.1 (http://www.kcmultimedia.com/smaster) install a
>
> simple Java app as a service that outputs some trivial data to a file every
>
> 10 seconds.
>
>
>
> Here's the simple demo service:
>
>
>
> import java.io.*;
>
> import java.util.*;
>
>
>
>
>
> public class Test2
>
> {
>
> public static void main(String[] args)
>
> {
>
>
>
> Date now;
>
> PrintWriter out;
>
>
>
> try{
>
>
>
>
>
>
>
> while(true){
>
>
>
> now = new Date();
>
> out = new PrintWriter(new FileWriter("test2.out",true),
> true);
>
> out.println(now.toString());
>
> out.close();
>
>
>
> Thread.sleep(10000);
>
>
>
> }
>
>
>
> }catch(Exception e){
>
>
>
> System.out.println(e.toString());
>
>
>
> }
>
> }
>
> }
>
>
>
> Start the service from the Control Panel|Services Applet, and check the
>
> contents of the file test2.out, which should append a line showing the
>
> date and time each 10 sec.
>
>
>
> Log off, and log back in.
>
>
>
> Although NT thinks the service is still running, it is not. You will see
>
> that lines are no longer appended to the file.
>
>
>
> This seems to only occur with JDK 1.3 RC1. Under JDK 1.2.2, the test app
>
> keeps running thru the login/logout
>
> (Review ID: 102993)
>
>
>
>
>
> webbug bgiel nostromog
> Workaround
> The workaround is to create a new thread in the parent process to read the
>
> pipe.
>
> In this way, the pipe between the parent and child process will not get
>
> overflowed. The application will not hang any more. Also if the return value
>
> from read is -1, the read thread may be dismissed to retain resources.
>
>
>
> xxxxx@xxxxx 2000-06-02
> Evaluation
> It seems that this is not a bug.
>
>
>
> In 1.1.x, runtime.exec create a new process which is a detached process, so
> the
>
> child process will not accept signals (like ctrl+break) from the console of
> the
>
> parent process. That's why in 1.1.x, there's no thread dump.
>
>
>
> In 1.2.2, runtime.exec create a new attached process, the child process can
>
> still accept the signal from the console of the parent process, it's stderr
> is
>
> linked to the parent's pipe. After it received the signal, it sent out
> thread
>
> dump to stderr which redirects to the pipe, as the pipe has a limited
> capacity,
>
> another thread needs to read from the pipe to keep it going, otherwise,
>
> the child process appears hang.
>
>
>
>
>
> xxxxx@xxxxx 2000-04-18
>
>
>
> ------------------------------------------------------------
>
>
>
> The evaluation above is incorrect; a corrected one follows. A solution
>
> exists for this problem; please see the end of this evaluation for it.
>
>
>
> The problem was caused by the addition of the shutdown hook mechanism
>
> to 1.3. Shutdown hooks, compared to the System.runFinalizersOnExit()
>
> mechanism, have stronger guarantees regarding when they are run; for
>
> example, if the VM is terminated by a Ctrl-C, finalizers will not be
>
> executed via runFinalizersOnExit, but shutdown hooks will be run.
>
>
>
> On Win32, shutdown hooks are implemented by adding a console control
>
> handler (see the documentation for SetConsoleCtrlHandler) which, upon
>
> seeing a condition like a Control-C or a "user logoff event", raises
>
> the termination condition in the VM. This causes the shutdown hooks to
>
> be run.
>
>
>
> Both the shutdown hook mechanism and the Ctrl-Break stack dump require
>
> signal-like information. 1.2 implemented the Ctrl-Break stack dump
>
> using the POSIX "signal" call on Win32. It turns out (as was noted in
>
> the 1.3 VM code by xxxxx@xxxxx that this mechanism translates all
>
> console events except Ctrl-C into SIGBREAK, which is not sufficient
>
> granularity to support both Ctrl-Break and shutdown hooks. This is why
>
> the console control handler was added in 1.3.
>
>
>
> When the VM's console handler receives the CTRL_LOGOFF_EVENT, it
>
> informs the rest of the VM of pending termination (thereby causing
>
> shutdown hooks to be run) and returns TRUE. According to the MSDN
>
> documentation, a return value of TRUE for this event will cause the
>
> popup window for process termination to be displayed. It seems that
>
> this return value was chosen because the VM is still doing work
>
> (running the shutdown hooks asynchronously) after the
>
> CTRL_LOGOFF_EVENT is received, and the author thought that returning
>
> false would cause the VM to be terminated by the OS while doing this
>
> work (as is stated in the MSDN documentation: the system's default
>
> handler terminates the process).
>
>
>
> The MSDN documentation is not specific about the relationship between
>
> services and the CTRL_LOGOFF_EVENT. Conceptually, a service runs in
>
> the background and should not be associated with any particular user's
>
> login session, so one might expect that a service should not be
>
> notified of logoff events. However, Win32 does send these events to
>
> services. Interestingly, the default console handler for services
>
> differs from the default for ordinary console processes; services
>
> continue to run after their default handler executes. This is what
>
> allows ordinary programs (which either do not install a console
>
> handler, or which return FALSE in their console handler for
>
> CTRL_LOGOFF_EVENT) to work with, for example, ServiceInstaller.
>
> However, it does not seem that there is a way for a process to query
>
> whether it is running as a service. If there were, the correct
>
> behavior for the VM upon receiving the CTRL_LOGOFF_EVENT if it were
>
> running as a service would be to skip running the shutdown hooks, not
>
> signal the termination condition to the rest of the VM, and return
>
> FALSE. Otherwise, the two possible workarounds are either to provide
>
> another command line option to java.exe ("running as a service on
>
> Windows NT") or to somehow intercept the CTRL_LOGOFF_EVENTs at the
>
> service wrapper level.
>
>
>
> --
>
>
>
> Since the time this bug was filed, its original submitter (who is the
>
> author of ServiceInstaller) has released a revised piece of software,
>
> called JavaServ, which solves this problem elegantly by using the JNI
>
> Invocation API to create a Java VM and installing a console control
>
> handler afterwards which intercepts the CTRL_LOGOFF_EVENT and prevents
>
> it from being passed to the VM. It also contains other useful features
>
> like allowing pure Java programs to receive service control events.
>
> JavaServ may be downloaded from
>
>
>
> http://www.kcmultimedia.com/javaserv/
>
>
>
> The comments on the JDC also contain the source code to a similar
>
> program.
>
>
>
> xxxxx@xxxxx 2000-08-30
> Your Comments & Work-arounds
> (These are NOT written by Sun!)
> Include a link with my name & email
>
>
>
> Wed Apr 12 04:02:54 PDT 2000
> jsommer <mailto:[EMAIL PROTECTED]>
>
>
> This is a HotSpot problem, not a jdk 1.3 problem - the
>
> problem also occurs with HotSpot-2.0/jdk 1.2.2
>
> Fri Apr 21 00:29:58 PDT 2000
> gageot <mailto:[EMAIL PROTECTED]>
>
> Not a bug ?????
>
> So how do you have a Java server application on NT ?
>
> Fri Apr 21 11:27:23 PDT 2000
> javageorge <mailto:[EMAIL PROTECTED]>
>
> This is a bug!! I can run my Java application as an NT
>
> Service using JDK 1.2.2, but can NOT run it with JDK 1.3
>
> RC3. Nor can I get it to work when running with Java
>
> HotSpot, regardless of which VM I use. My only solution is
>
> to run with JDK 1.2.2 without Hotspot ( too slow.... ).
>
>
>
> I have downloaded several programs that create NT Services
>
> for Java apps, and see the this same behavior, regardless of
>
> which one I use. I also see this behavior when I create the
>
> NT Service using Microsoft's srvany.exe.
>
>
>
> You would think it would be in Sun's best interest to make
>
> it VERY easy to create an NT Service for a Java Application.
>
> Don't they want Java Applications to proliferate on NT?? I
>
> had hoped that Sun would have provided such a tool, but this
>
> is not the case...
>
>
>
> Instead, here's the tools I've tried in addition to srvany:
>
> http://www.kcmultimedia.com/smaster/
>
> http://www.formida.com.au/firedaemon
>
>
>
> This has been a major headache for us and I really hope this
>
> is fixed before JDK 1.3 is officially released!!
>
> Thu May 04 02:06:23 PDT 2000
> nostromog <mailto:[EMAIL PROTECTED]>
>
> It keeps going on with rc3. Using Mike Jennings framework, services
>
> DO WORK with 1.2.2 Hotspot, but they don't work with any 1.3 prerelease.
>
> Tue May 09 11:03:21 PDT 2000
> bryanvv <mailto:[EMAIL PROTECTED]>
>
> Looks like this is still a problem with the released version
>
> of 1.3 on NT. It causes JRun or JWS (or, presumably, any
>
> Java-based web or application server) to crash on logout,
>
> meaning 1.3 is unuseable on the server for us.
>
> Tue May 09 11:36:21 PDT 2000
> mjennings <mailto:[EMAIL PROTECTED]>
>
> The evaluation assumes a separate process is created by
>
> the JVM. This bug occurs when the NT service is a SINGLE
>
> process that uses the JVM.
>
>
>
> Something in the hotspot JVM kills the process when the user
>
> logs out. Other services (like MS personal web server) keep
>
> running when user logs out.
>
>
>
> Either the process using the JVM crashes, or shuts down
>
> nicely when the user logs off.
>
> Sat May 13 15:30:14 PDT 2000
> thobitz <mailto:[EMAIL PROTECTED]>
>
> The reason for this behaviour probably is the setting "Allow Service to
> interact with the Desktop". This is
>
> wrong.
>
>
>
> A service which has this switch set receives the WM_QUERYENDSESSION on which
> each Windows
>
> application is expected to terminate. Furthermore, it can be manipulated by
> the user who logged in.
>
> Mon May 15 19:16:27 PDT 2000
> SF019JP <mailto:[EMAIL PROTECTED]>
>
> JavaVM stops when works as WindowsNT service at the same time that
>
> a user does log-off. I investigated the cause by referring to SCSL.
>
>
>
> JavaVM(JRE1.3) utilizes SetConsoleCtrlHandler() function in Windows
>
> NT and collects some events. When a user does log-off, CTRL_LOGOFF_EVENT
>
> event occurs. As a result JavaVM(JVM.DLL) receives a CTRL_LOGOFF_EVENT
>
> event and has stopped.
>
>
>
> I used JNI and evaded this problem by seizing CTRL_LOGOFF_EVENT event
>
> by force. I pray for this problem being solved formally.
>
> Tue May 16 13:31:49 PDT 2000
> ken_h_chin <mailto:[EMAIL PROTECTED]>
>
> I'm using JDK 1.3 on Windows NT and have experienced the
>
> same problem. Logging off the user also kills rmiregistry,
>
> which I run as a service using ServiceMaster.
>
>
>
> If SUN is serious about supporting server side Java on the
>
> Windows NT platform, this problem has to be fixed. The
>
> performance improvement of 1.3 is great, but we cannot use
>
> it if we can't log off the user without killing our
>
> applications.
>
>
>
> We choose Java on Win NT as our development platform
>
> because it allowed us to have the flexibility to choose
>
> more scalable platforms (ie SUN) in the future, while
>
> taking advantage of the lower start up costs of the PC
>
> platform. Making server side Java unusable on Win NT will
>
> make this a less attractive option.
>
> Tue May 16 14:14:02 PDT 2000
> Tue May 16 14:20:59 PDT 2000
> srinin <mailto:[EMAIL PROTECTED]>
>
> We use ServiceMaster to wrap our Java applications as
>
> services on NT. With JDK1.2.2, the services continued to
>
> work even after the user logged out. In JDK 1.3, the
>
> services stop as soon as the user logs out. This is a huge
>
> problem for us in our production environment, as we want
>
> our server side java applications to restart automatically
>
> after a power failure or reboot.
>
>
>
> We can not migrate to JDK 1.3 until this bug is fixed or a
>
> workaround is provided.
>
> Tue May 16 17:14:34 PDT 2000
> tsugane
>
> same problem happen with java2-sdk1.3.0 on win2000
>
> and winNT4.0.
>
> application is JRUN2.2.3 and Jakarta-tomcat-NT-service1.1.
>
> Tue May 30 06:56:47 PDT 2000
> djcraz_e <mailto:[EMAIL PROTECTED]>
>
> This is a serious bug!!! I cannot advise my company to use the JDK 1.3 if
> this kind of know bug is allowed to
>
> remain! It will seriously hamper our web development process to have to code
> our services around having a
>
> user logged on at all times!
>
> Tue May 30 06:59:16 PDT 2000
> BobW1
>
> This problem needs to be resolved. Our web server was
>
> shutdown about a dozen times (affecting about 8 developers
>
> each time) before we discovered that HotSpot was causing
>
> our web server (IIS) to go down. IIS was going down since
>
> our servlet engine was using 1.3 and was tied into IIS.
>
> We've now gone back to classic JVM 1.2.2 to prevent our web
>
> server from going down.
>
> Fri Jun 02 19:20:49 PDT 2000
> briano <mailto:[EMAIL PROTECTED]>
>
> This is not a bug in the VM, but the service wrapper. The service wrapper
> that I wrote (specifically for
>
> Java2) doesn't have any problem with JDK1.3 when the user logs out. Even for
> JDK1.2 I had to
>
> provide my own handler with SetConsoleCtrlHandler in order to keep the
> service running when logging out.
>
> The key difference may be that I also had to call AllocConsole in order for
> the handler to get properly
>
> registered.
>
> Wed Jun 07 03:29:40 PDT 2000
> huykman <mailto:[EMAIL PROTECTED]>
>
> I would say this is a bug, it doesn't matter in what part
>
> of java it occures. To take java 1.3 seriously on NT, it
>
> should work at least as good as 1.2 versions.
>
> I've tried jdk 1.3 on TomCat 3.1 & Jrun 3.0 and both gave
>
> the same problem.
>
> Mon Jun 12 11:19:32 PDT 2000
> briano <mailto:[EMAIL PROTECTED]>
>
> I've been getting a bunch of questions from people regarding my Java service
> wrapper. Although I developed
>
> it for my company and it is proprietary, I can still offer pointers. I
> developed it last year for JDK1.2, but it
>
> works just fine with JDK1.3 without any modifications. Unlike some other
> service wrappers that spawn off
>
> another process, this one creates a JVM in the same process using the
> invocation API. I install my console
>
> event handler immediately after I've created the JVM, in order for it to be
> called first. Now, I didn't have any
>
> luck at this (under JDK1.2 even) until I added a call to AllocConsole at the
> beginning of the service's start
>
> callback. I think this is the magic step in order to make this work
> reliably. Calling AllocConsole does not
>
> produce a visible console window unless the service is set to interact with
> the desktop. Here's a skeleton
>
> version of my console event handler:
>
>
>
> // Console event handler routine.
>
> BOOL handlerRoutine(DWORD dwCtrlType) {
>
> switch (dwCtrlType) {
>
>
>
> case CTRL_C_EVENT:
>
> case CTRL_CLOSE_EVENT:
>
> case CTRL_SHUTDOWN_EVENT:
>
> // Call method to stop service
>
> ...
>
> return TRUE;
>
>
>
> case CTRL_LOGOFF_EVENT:
>
> // Ignore logoff events.
>
> return TRUE;
>
> }
>
>
>
> // Let parent handler (the VM) take care of anything else.
>
> return FALSE;
>
> }
>
> Tue Jun 13 07:50:05 PDT 2000
> bgiel <mailto:[EMAIL PROTECTED]>
>
> Thanks for posting the above. Unfortunately, the workaround cannot be
> implemented with canned wrappers
>
> like SRVANY and others that generically install services including, but not
> limited to, Java. The problem
>
> persists when JDK 1.3's java.exe is spawned by the service wrapper (rather
> than using JNI invocation.) I
>
> believe this needs to be addressed by JavaSoft so that the JDK 1.3 runtime
> responds to a logoff in the same
>
> manner as JDK 1.2.2.
>
> Tue Jun 13 15:30:32 PDT 2000
> briano <mailto:[EMAIL PROTECTED]>
>
> JDK1.2.2 didn't actually respond correctly to the logoff event or close
> event. Instead of stopping the
>
> process, these would cause a thread dump to be printed to error out just
> like with ctrl-break. If JDK1.3
>
> ignored the logoff event completely, then when a user running a client app
> logs out from windows, the VM
>
> might not shut down gracefully and the Java exit hooks won't get invoked.
> I'm not sure if the VM could tell
>
> whether it was being run as a service or not. If its running as a service,
> the logoff event can be ignored,
>
> but it cannot be ignored otherwise.
>
> Wed Jun 14 05:00:23 PDT 2000
> pillon <mailto:[EMAIL PROTECTED]>
>
> A solution is to write a genric launcher class in java.
>
> The launcher will just overide 'handlerRoutine' with JNI
>
> and then call your main class with the proper parameters.
>
>
>
> To execute 'com.company.server.Main arg1 arg 2' as a sevice
>
> you'll execute 'Launcher com.company.server.Main arg1 arg
>
> 2' instead.
>
>
>
> This can be used with virtually any service wrapper.
>
> Thu Jun 15 02:17:09 PDT 2000
> ArionYu <mailto:[EMAIL PROTECTED]>
>
> I agree that application run by the clients should be stopped after logout,
> if not specified purposely (eg
>
> install as service).
>
>
>
> If JavaSoft can kindly develop a NT service wrapper for Java application, I
> think the problem would be
>
> solved. At least the JavaSoft developers won't need to have JVM support most
> (if not all) wrappers.
>
> Thu Jun 15 18:36:20 PDT 2000
> gdaswani
>
> Anybody know when this will be fixed?
>
> Fri Jun 16 13:20:13 PDT 2000
> nywarrior <mailto:[EMAIL PROTECTED]>
>
> This is a bug!! I had the same problem installing a java
>
> based service with invoker.exe, and had to revert back to
>
> jre1.2.2. This problem seemed to be introduced in jre1.3.
>
> Everything works fine for me using jre1.2.2.
>
> Thu Jun 22 23:57:25 PDT 2000
> pgaston
>
> take a look at
>
> http://www.kcmultimedia.com/javaserv/
>
> for working JNI service wrapper
>
> Mon Jun 26 08:50:17 PDT 2000
> glabelle <mailto:[EMAIL PROTECTED]>
>
> We picked up an excellent NT Service package at
> http://jsrvany.sourceforge.net . It includes C++ source
>
> for the service installer and runtime wrapper, and nice Java classes which
> make it easy to implement
>
> handlers for the NT Service events, including "stop"/"pause"/"continue",
> which was lacking in most of the
>
> other packages we evaluated.
>
>
>
> The jsrvany package doesn't solve the the JDK 1.3 bug, but I think it's an
> excellent base on which to
>
> experiment with briano's SetConsoleCtrlHandler() / AllocConsole() solution.
>
> Mon Jun 26 19:04:13 PDT 2000
> subc <mailto:[EMAIL PROTECTED]>
>
> It's like "Hotel California"... you can check in BUT can't check out. We
> just found
>
> it the hard way... in PRODUCTION... while doing a $3 Billion Dollar Trade in
> Java...
>
> thanks to JavaSoft for making me look like a moron in front of my users!!!
>
> Few more bugs like this... the users will force us back to doing Demo
> programs in JDK 1.1.0!!!
>
> Not even a patch release!!! I got a better idea... why don't you CLOSE this
> bug - like you
>
> do with all other critical ones!!! Mark it un-reproducible with NT Service
> Pack 9.8.7.6.5.4.3.2.1.
>
> Wed Jun 28 22:34:44 PDT 2000
> develcon <mailto:[EMAIL PROTECTED]>
>
> I know it is humiliating to chase MS with the NT/2k Server "service" mess,
> but your customers really need
>
> robust support to provide competitive Java(tm) applications. In my opinion
> if you don't support "service's"
>
> then you don't support Windows.
>
>
>
> Please deliver a complete solution (included with the JDK), and fix this bug
> too.
>
> Fri Jul 07 13:10:20 PDT 2000
> adepue <mailto:[EMAIL PROTECTED]>
>
> In case anyone is interested, I have recently posted a free
>
> utility that allows you to run your Java app as an NT
>
> service. It shields the JVM from the NT logoff event (by
>
> running the JVM in the service process and handling the
>
> related events) AND (optionally) allows you to specify a
>
> method in your Java code to perform graceful shutdowns when
>
> the service is stopped. Check out
>
> http://www.eworksmart.com/jnt
>
> Sat Jul 08 10:33:52 PDT 2000
> dynaware <mailto:[EMAIL PROTECTED]>
>
> I just patched my Java Service Launcher with the above described
> AllocConsole, SetCosnsolCtrlHAndler
>
> approch. It's available at www.roeschter.com.
>
> Moreover I want to point out that there is also a solution for all those
> using off the shelf service launchers.
>
> It's feasable to recompile the java.exe from SUN's sources with a small
> patch which catches the
>
> LOGOFF event.
>
> This can be achieved by installing the ControlHandler after the JVM has been
> initialized but before
>
> the main() method is called.
>
>
>
> For details please contact me at [EMAIL PROTECTED]
>
> or look into for the source of my JSL (specifically java.c)
>
> at www.roeschter.com
>
> Sun Jul 09 04:49:33 PDT 2000
> macpeep
>
> Ok, this bug has enough votes.. They get the point.. Please
>
> vote for this bug instead: (4314208)
>
> http://developer.java.sun.com/developer/bugParade/bugs/43142
>
> 08.html
>
>
>
> That bug is a serious screen distortion for several widgets
>
> on Java 1.3 on Win32 on some hardware setups. It makes 1.3
>
> apps with GUI's totally unfeasible since they won't work on
>
> many very common systems.
>
> Wed Jul 19 08:29:09 PDT 2000
> k30a2e7 <mailto:[EMAIL PROTECTED]>
>
> Why not just add a "-Xservice" command line option that will make the JVM
> not respond to the
>
> CTRL_LOGOFF_EVENT? This should be really easy to implement, and would take
> care of this bug for good...
>
> Sat Jul 22 20:22:34 PDT 2000
> druble
>
> Fix ASAP please!
>
> Wed Jul 26 14:27:35 PDT 2000
> xxh1 <mailto:[EMAIL PROTECTED]>
>
> As of July 25 javaserv doesn't handle this, though it claims to.
>
> I modified javaserv source using jsl source code as a model and
>
> ended up with a working solution. I passed on jsl because it
>
> appeared to rely on the service monitoring a socket. I may
>
> reevaluate my decision. Anyway -- key point is that you'll
>
> just get frustrated if you use javaserv out of the box -- modify
>
> it as per jsl!
>
> Thu Jul 27 14:30:39 PDT 2000
> the_hendrys <mailto:[EMAIL PROTECTED]>
>
> This is a Bug!! Our process works fine using 1.2.2, but when using 1.3, a
> log-out kills the process.
>
> Fri Jul 28 14:54:39 PDT 2000
> b.c
>
> This is indeed a pretty nasty bug.
>
> I hope Sun gets with it and fixes it as there
>
> are a LOT of people who need to be able
>
> to have services running when a user merely logs out.
>
> Fri Jul 28 17:45:39 PDT 2000
> westly <mailto:[EMAIL PROTECTED]>
>
> We use ServiceMaster to wrap our Java applications as
>
> services on NT. With JDK1.2.2, the services continued to
>
> work even after the user logged out. In JDK 1.3, the
>
> services stop as soon as the user logs out. This is a huge
>
> problem for us in our production environment, as we want
>
> our server side java applications to restart automatically
>
> after a power failure or reboot.
>
>
>
> We can not migrate to JDK 1.3 until this bug is fixed or a
>
> workaround is provided.
>
>
>
> Thu Aug 03 05:27:53 PDT 2000
> buiret <mailto:[EMAIL PROTECTED]>
>
> I also say that this is a bug: I use RunExecSvce from WinWinsoft and it
> works well with JRE 1.2 but not
>
> at all with JRE 1.3.
>
> I took me a long time to identify the problem !
>
> Tue Aug 08 11:41:03 PDT 2000
> kenchen <mailto:[EMAIL PROTECTED]>
>
> This is a HotSpot bug! It happens when you use JDK with
>
> HotSpot. JDK 1.3 comes with HotSpot by default. I tried
>
> different combinations with JDK 1.2.2, 1.3 with/without
>
> HotSpot on ServletExec 3.0 and the only combination work is
>
> JDK 1.2.2 Classic. Others kill IIS when a user logs out.
>
> Tue Aug 08 16:53:45 PDT 2000
> kurt <mailto:[EMAIL PROTECTED]>
>
> This problem also manifests itself when the JVM is started
>
> by the JNI Invokation API (JNI_CreateJavaVM()) instead of
>
> the service doing CreateProcess on java.exe. This is with
>
> JDK 1.3 on Windows 2000.
>
>
>
> In this case, a thread is creating the JVM and calling into
>
> a static Java method that is designed to not return. When
>
> the user logs out, that thread is destroyed without
>
> returning from the static Java method.
>
> Tue Aug 29 05:58:09 PDT 2000
> Anja.Niebler <mailto:[EMAIL PROTECTED]>
>
> Here is the complete c code of a NT-Service starter, that
>
> stays, if it got an LOGOFF-Event.
>
> And additionaly a excample of a java class.
>
> The most important part is to LEAVE the main method of the
>
> java-class, so that a CtrlHandler can be installed after
>
> calling the main method of the java-class.
>
> ///////////////////////////////////////////////////////////
>
> // Program, that starts the java virtual machine and
>
> handles console events by itself
>
> // This program can be used for starting an NTService with
>
> JDK 1.3.0
>
>
>
> // includes
>
> #include <jni.h>
>
> #include <windows.h>
>
> #include <string.h>
>
>
>
> // typedefs
>
> typedef jint (*P_JNI_GetDefaultJavaVMInitArgs)(void *args);
>
> typedef jint (*P_JNI_CreateJavaVM)(JavaVM **pvm, JNIEnv **
>
> penv, void *args);
>
>
>
>
>
>
>
> /***********************************************************
>
> *****************
>
> Usage of the program.
>
> ************************************************************
>
> ****************/
>
> void printInfo()
>
> {
>
> printf("no parameter found.\n");
>
> printf("Usage: \n");
>
> printf("Parameters are.\n");
>
> printf("arg[1] : jvm library e.g.
>
> c:\\jdk\\jre\\bin\\classic\\jvm.dll \n");
>
> printf("arg[2] : classpath
>
> e.g. c:\\myclasses\\myproject.jar \n");
>
> printf("arg[3] : lib-path
>
> e.g c:\\mylibs \n");
>
> printf("arg[4] : java-class-file e.g. MyMain
>
> \n");
>
> printf("arg[5]ff: additional parameters for main-
>
> method in MyMain.class\n");
>
> }
>
> /***********************************************************
>
> *****************
>
> static globals.
>
> ************************************************************
>
> ****************/
>
> static HMODULE hLib
>
> = NULL;
>
> static JavaVM *jvm
>
> = NULL;
>
> static JNIEnv *env
>
> = NULL;
>
> static JavaVMInitArgs vm_args;
>
> static jclass clsMain
>
> = NULL;
>
> static jclass clsString
>
> = NULL;
>
> static jmethodID midMain
>
> = 0;
>
> static JavaVMOption options[20];
>
>
>
> /***********************************************************
>
> *****************
>
> Invoke JVM and call of the static main method of the
>
> given javaclass
>
> ************************************************************
>
> ****************/
>
> int __cdecl invokeJVM(int argc, char* argv[])
>
> {
>
> P_JNI_GetDefaultJavaVMInitArgs
>
> pfnGetDefaultJavaVMInitArgs = NULL;
>
> P_JNI_CreateJavaVM
>
> pfnCreateJavaVM =
>
> NULL;
>
> jint
>
> res
>
> = -1;
>
> jstring
>
> jsTemp;
>
> jarray
>
> stringArray;
>
>
>
> char
>
> clsOptions[255];
>
> char
>
> libOptions[255];
>
> char
>
> jvmLibrary[255];
>
> char
>
> czTemp[100];
>
> int
>
> i;
>
>
>
> // Load JVM library (jvm.dll)
>
> strcpy (jvmLibrary, argv[1]);
>
> hLib = LoadLibrary(jvmLibrary);
>
> if(hLib == NULL)
>
> {
>
> printf ("Cannot load library %s",
>
> jvmLibrary);
>
> return 0;
>
> }
>
>
>
> // ClassPath
>
> strcpy (clsOptions, "-Djava.class.path=");
>
> strcat (clsOptions, argv[2]);
>
> // LibPath
>
> strcpy (libOptions, "-Djava.library.path=");
>
> strcat (libOptions, argv[3]);
>
>
>
> // JDK 1.3.0 Options
>
> options[0].optionString = clsOptions;
>
> options[1].optionString = libOptions;
>
>
>
> vm_args.version = JNI_VERSION_1_2;
>
> vm_args.options = options;
>
> vm_args.nOptions = 2;
>
> vm_args.ignoreUnrecognized = TRUE;
>
>
>
> // Create JavaVM
>
> pfnCreateJavaVM = (P_JNI_CreateJavaVM)
>
> GetProcAddress(hLib, "JNI_CreateJavaVM");
>
> if(pfnCreateJavaVM != NULL)
>
> {
>
> res = (*pfnCreateJavaVM)
>
> (&jvm,&env,&vm_args);
>
> if (res < 0)
>
> {
>
> printf("Error! Cannot create Java
>
> VM");
>
> return 0;
>
> }
>
> }
>
> else
>
> {
>
> printf("Error! Cannot create Java VM,
>
> function pointer = null");
>
> return 0;
>
> }
>
>
>
> // FindClass argv[4]
>
> clsMain = (*env)->FindClass(env, argv[4]);
>
> if (clsMain == 0)
>
> {
>
> printf("Cannot find Class %s", argv[4]);
>
> return 0;
>
> }
>
>
>
> // FindClass String
>
> clsString = (*env)->FindClass
>
> (env, "java/lang/String");
>
> if (clsString == 0)
>
> {
>
> printf("Cannot find Class String");
>
> return 0;
>
> }
>
>
>
> // get methodId of Main.main
>
> midMain = (*env)->GetStaticMethodID(env,
>
> clsMain, "main", "([Ljava/lang/String;)V");
>
> if (midMain == 0)
>
> {
>
> printf("Cannot find Method %s.main", argv
>
> [4]);
>
> return 0;
>
> }
>
>
>
> // prepare the StringArray for the main-method of
>
> the java class
>
> strcpy (czTemp, argv[0]);
>
> jsTemp = (*env)->NewStringUTF (env, czTemp);
>
> if (argc>5)
>
> stringArray = (*env)->NewObjectArray(env,
>
> argc-5, clsString, jsTemp);
>
> else
>
> stringArray = (*env)->NewObjectArray(env,
>
> 0, clsString, jsTemp);
>
> if (stringArray == 0)
>
> {
>
> printf("Cannot create String Array");
>
> return 0;
>
> }
>
>
>
> for (i=5; i<argc; i++)
>
> {
>
> strcpy (czTemp, argv[i]);
>
> jsTemp = (*env)->NewStringUTF (env, czTemp);
>
> (*env)->SetObjectArrayElement(env,
>
> stringArray, i-5, jsTemp);
>
> }
>
>
>
> // call Main.main
>
> // remark: Ensure, that the main method of the java-
>
> class returns.
>
> // If the java-class is a server application, the
>
> application should start
>
> // as an own thread.
>
> (*env)->CallStaticVoidMethod(env, clsMain, midMain,
>
> stringArray);
>
>
>
> return 1;
>
> }
>
>
>
> // Console event handler routine.
>
> // returns true, if the event will be handled by this
>
> routine
>
> // returns false, if the parent handler is responsible for
>
> the event
>
> BOOL WINAPI CtrlHandler(DWORD fdwCtrlType)
>
> {
>
> switch (fdwCtrlType)
>
> {
>
> case CTRL_C_EVENT:
>
> {
>
> // for future releases...
>
> // call here a exit methode
>
> of the Java-class
>
> printf("got Ctrl C\n");
>
> return FALSE;
>
> break;
>
> };
>
> case CTRL_CLOSE_EVENT:
>
> {
>
> printf("got CloseEvent\n");
>
> return TRUE;
>
> break;
>
> };
>
> case CTRL_SHUTDOWN_EVENT:
>
> {
>
> printf("got
>
> ShutdownEvent\n");
>
> return TRUE;
>
> break;
>
> };
>
>
>
> // react on this event to install a service
>
> on WinNT-Server with JDK 1.3.0
>
> case CTRL_LOGOFF_EVENT:
>
> {
>
> printf("got
>
> ShutdownEvent\n");
>
> return TRUE;
>
> break;
>
> };
>
> }
>
> return FALSE;
>
> }
>
>
>
> int __cdecl main(int argc, char* argv[])
>
> {
>
> int res=0;
>
> BOOL fSuccess;
>
> HANDLE hServerStopEvent = NULL;
>
>
>
> if (argc<5)
>
> {
>
> printInfo();
>
> return 0;
>
> }
>
>
>
> // Create a Stop Event
>
> hServerStopEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
>
>
>
> // start java virtual machine
>
> printf("Starting VM...");
>
> res = invokeJVM(argc, argv);
>
> if (res!=0)
>
> {
>
> printf("VM started...");
>
> }
>
> else
>
> {
>
> printf("cannot start VM !");
>
> return 0;
>
> }
>
>
>
> // install the CtrlHandler
>
> fSuccess = SetConsoleCtrlHandler((PHANDLER_ROUTINE)
>
> CtrlHandler, TRUE); // add to
>
> list
>
> if (! fSuccess)
>
> {
>
> printf("Could not set control handler");
>
> return 0;
>
> }
>
> else
>
> {
>
> printf("set control handler");
>
> }
>
>
>
> //wait
>
> WaitForSingleObject(hServerStopEvent,INFINITE);
>
> return 0;
>
> }
>
>
>
>
>
> /**
>
> * Class T, excample for starting an NT Service
>
> */
>
> class T
>
> {
>
> public static void main( String[] args )
>
> {
>
> // Most important: start an own thread
>
> Thread t= new Thread()
>
> {
>
> public void run()
>
> {
>
> while (true)
>
> {
>
> System.out.print("in Thread...\n");
>
> try
>
> {
>
> sleep(1000);
>
> }
>
> catch (Exception e)
>
> {
>
> e.printStackTrace();
>
> }
>
> }
>
> }
>
> };
>
> t.start();
>
> System.out.print(args[0]);
>
> // then exit the main method
>
> };
>
> };
>
>
>
> Thu Sep 14 13:49:53 PDT 2000
> ebony_prince2 <mailto:[EMAIL PROTECTED]>
>
> How do I get back my virtual machine?
>
> Mon Sep 18 06:43:30 PDT 2000
> javafarabi <mailto:[EMAIL PROTECTED]>
>
> Problem browsing applet in environment Mac Netscape, you
>
> have have reponse. plis sending your message======>
>
> Message error
>
> 8/25/2000 @ 15:54:53
>
> An exception occurred:
>
> java.lang.ClassNotFoundException: com.hostfront.HFEmulator
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_ROOT.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.doLoadCode
>
> (JMAppletViewerOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.setState
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.JMViewerEvent.post
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.AVDispatcherThread.run
>
> (JMAppletViewerOld.java)
>
> 9/11/2000 @ 13:27:23
>
> An exception occurred:
>
> java.lang.ClassNotFoundException: com.hostfront.HFEmulator
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_ROOT.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.doLoadCode
>
> (JMAppletViewerOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.setState
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.JMViewerEvent.post
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.AVDispatcherThread.run
>
> (JMAppletViewerOld.java)
>
> 9/11/2000 @ 13:28:18
>
> An exception occurred:
>
> java.lang.ClassNotFoundException: com.hostfront.HFEmulator
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_ROOT.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.doLoadCode
>
> (JMAppletViewerOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.setState
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.JMViewerEvent.post
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.AVDispatcherThread.run
>
> (JMAppletViewerOld.java)
>
> 9/12/2000 @ 11:30:45
>
> An exception occurred:
>
> java.lang.ClassNotFoundException: com.hostfront.HFEmulator
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_ROOT.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.doLoadCode
>
> (JMAppletViewerOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.setState
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.JMViewerEvent.post
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.AVDispatcherThread.run
>
> (JMAppletViewerOld.java)
>
>
>
>
>
> [EMAIL PROTECTED]
>
> Mon Sep 18 06:46:45 PDT 2000
> javafarabi <mailto:[EMAIL PROTECTED]>
>
> Problem browsing applet in environment Mac Netscape, you
>
> have have reponse. plis sending your message======>
>
> Message error
>
> 9/16/2000 @ 15:54:53
>
> An exception occurred:
>
> java.lang.ClassNotFoundException: com.hostfront.HFEmulator
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_ROOT.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.doLoadCode
>
> (JMAppletViewerOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.setState
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.JMViewerEvent.post
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.AVDispatcherThread.run
>
> (JMAppletViewerOld.java)
>
> 9/11/2000 @ 13:27:23
>
> An exception occurred:
>
> java.lang.ClassNotFoundException: com.hostfront.HFEmulator
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_ROOT.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.doLoadCode
>
> (JMAppletViewerOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.setState
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.JMViewerEvent.post
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.AVDispatcherThread.run
>
> (JMAppletViewerOld.java)
>
> 9/11/2000 @ 13:28:18
>
> An exception occurred:
>
> java.lang.ClassNotFoundException: com.hostfront.HFEmulator
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_ROOT.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.doLoadCode
>
> (JMAppletViewerOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.setState
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.JMViewerEvent.post
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.AVDispatcherThread.run
>
> (JMAppletViewerOld.java)
>
> 9/12/2000 @ 11:30:45
>
> An exception occurred:
>
> java.lang.ClassNotFoundException: com.hostfront.HFEmulator
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_IMPL.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletClassLoader_ROOT.loadClass
>
> (JMAppletClassLoaderOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.doLoadCode
>
> (JMAppletViewerOld.java)
>
> at
>
> com.apple.mrj.JManager.JMAppletViewer_OLD.setState
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.JMViewerEvent.post
>
> (JMAppletViewerOld.java)
>
> at com.apple.mrj.JManager.AVDispatcherThread.run
>
> (JMAppletViewerOld.java)
>
>
>
>
>
> [EMAIL PROTECTED]
>
>
>
>
>
> <http://developer.java.sun.com/servlet/PrintPageServlet> Print Button
> [ This page was updated: 21-Sep-2000 ]
> By Alê!
>
> ------------------------------------------------------------------------
>
>
> ------------------------------------------------------------------------
>
> ------------------------------ LISTA SOUJAVA ----------------------------
> http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
> dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> regras da lista: http://www.soujava.org.br/regras.htm
> para sair da lista: envie email para [EMAIL PROTECTED]
> -------------------------------------------------------------------------
>
> printbutton.gif
>
> Content-Type:
>
> image/gif
> Content-Encoding:
>
> base64
>
>
> ------------------------------------------------------------------------
> attachment.txt
>
> Content-Type:
>
> text/plain
> Content-Encoding:
>
> Quoted-printable
--
Eduardo Issao Ito <[EMAIL PROTECTED]>
Integration Technologies Ltda. <http://www.integrationtech.com.br>
Rua Marina Saddi Haidar, 176
04650-050 / Sao Paulo / SP / Brasil
Phone: +55 11 5522-4848 x311
Fax: +55 11 5524-1125
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------