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:
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
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 ###@###.###
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
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.
Name: rlT66838 Date: 03/29/2000
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")
...then, NT-service(running JVM in service) stop process.
I hope, cancel shutdown JVM.
(Review ID: 103003)
Name: rlT66838 Date: 04/04/2000
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
Here's the simple demo service:
public class Test2
public static void main(String args)
now = new Date();
out = new PrintWriter(new FileWriter("test2.out",true), true);
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)
Name: yyT116575 Date: 11/09/2000
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-C)
Java HotSpot(TM) Client VM (build 1.3.0-C, mixed mode)
I am using JNI 1.2 with JRE 1.3:
Write an NT Service that uses JNI to call the main method of a Java class
(NOTE user.name will be "SYSTEM")
Install & start the service.
NOTE: JRE 1.2 deals with this correctly--when user logs back in the service is
I have thoroughly checked that my code is not exiting--
env->CallStaticVoidMethod(jcl, m_methID, m_jobjArr);
never returns & there exists NO System.exit() in my java class.
(Review ID: 111892)