Java Forum / General / July 2006
create a new windows (xp) service that runs a jar file
JPractitioner - 05 Jul 2006 10:33 GMT Hello guys,
Does anyone has experience/know how to create a new windows (xp) service that runs a jar file? This issue rises as i need to hide the most of the java implementation in this project before it goes live.
So the idea is, to have control on the exceution of the jar from windows windows service console (which the users can define the startup type i.e. manual, automatic, disabled and the running life cycle i.e. start, stop, pause, resume, restart...).
so any leads to solving this will be appreciated.
Thanks in advance. Have a nice day!
dsjoblom@abo.fi - 05 Jul 2006 15:41 GMT > Hello guys, > [quoted text clipped - 10 lines] > > Thanks in advance. Have a nice day! I imagine you would create it like any other windows service. See http://support.microsoft.com/kb/q137890/
Regards, Daniel Sjöblom
JPractitioner - 20 Jul 2006 11:41 GMT Hi Daniel, I followed your way. I just dont know how to start with java service wrapper. realgagnon might have some idea on this that he can share with us?
So back to the topic, I managed to add a new service on my pc and it shows in my services applet. But the service cannot run a jar file, it throws error that says the service has been stopped because it is inactive. Actually the program is active. It listens to client's requests once started. It takes some configuration value from a few files.
Anyway, i figured out that, windows might expect an exe instead of jar to execute. So i tried to convert the jar to exe. I did that and the exe can run. Following that, I edit my registry.. pointing the value data to the exe i made.
I try again, this time i can see my program's console for a while and then my program throws error saying that it cannot get the file as if the file was not even there.
This is weird since i can run the program perfectley with the jar and the exe but when it involves windows service to run the exe, the file not found error slap me right on my face.
So, dsjoblom.. /other readers, do u have any idea why this happened and how i can solve this?
Thinking of other alternatives, I will just copy a shortcut to my startup folder, but this wont do very well since someone (administrator in my case) has to log on before the system can run. The administrator account will have to log on forever... or I might have to consider another user account dedicated to this thing hmmmm......
ok guys, thanks.
> > Hello guys, > > [quoted text clipped - 16 lines] > Regards, > Daniel Sjöblom JPractitioner - 20 Jul 2006 11:46 GMT guys, when i meant "files".. they are the configuration files that feed the configuration value such as remote address and so on...
> Hi Daniel, I followed your way. > I just dont know how to start with java service wrapper. realgagnon [quoted text clipped - 51 lines] > > Regards, > > Daniel Sjöblom bowman - 20 Jul 2006 14:50 GMT > I try again, this time i can see my program's console for a while and > then my program throws error saying that it cannot get the file as if > the file was not even there. Where is it looking for the file? Services inherit from the SCManager and often act as if the cwd is %WINDIR%\system32. I am not familiar with the Java wrapper and don't know what tweaking it might do as the process is spun up by the SCManager. If you are using a relative path, try an absolute.
As a service is started, The SCManager expects feedback from the new thread on a timely basis saying "I'm still trying to get it together", "I'm good to go", and so forth and assumes it is not running if the reply isn't received, but the wrapper should be taking care of this housekeeping.
JPractitioner - 20 Jul 2006 16:28 GMT Hi bowman, After i read your comment, i realized that those file were refered relatively. So i changed them to an absolute path. and it <b>WORKS!!!!!</b>
thanks man for teaching me this.
however, some xml files were also out of reach.. and the error said that the xml cant be found in c:\windows\system32
so i place the xml files there, and its working.
I have one more question.. why is that when i stop the service, only srvany.exe being killed.. but my app still alive? and also if i kill my app, the srvany.exe still alive.. why is it like this?
Again, thanks a lot bowman, the tips u gave is the key that i will use to learn more about windows.
Thanks, Makmur.
> > I try again, this time i can see my program's console for a while and > > then my program throws error saying that it cannot get the file as if [quoted text clipped - 14 lines] > http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups > ----= East and West-Coast Server Farms - Total Privacy via Encryption =---- bowman - 21 Jul 2006 05:16 GMT > I have one more question.. why is that when i stop the service, only > srvany.exe being killed.. but my app still alive? and also if i kill my > app, the srvany.exe still alive.. why is it like this? I don't use srvany so I am not positive, but I do not think srvany implements the stop event. In C/C++, you add code to the application. The SCManager calls that as main(), which sets up the dispatcher, usually ServiceMain() by convention. That threads off the real application, and also registers a callback with the SCManager.
When the dispatch thread receives a stop event from the SCManager, it reports back that it is stopping the application, does something to make that happen, reports when it is stopped. I believe srvany spins up the application, and after that it's on its own. It is meant to be a quick and dirty way to make something into a service when you don't have source.
It isn't necessary, but I usually play a few games in the code to get the process's cwd back to where it really is so I don't clutter up %WINDIR%\system32, but afaik srvany doesn't do this. Also, if things are set up so the application will drop a core if things go bad, that usually is in system32, too.
You can do a lot of interesting things with services in C, but I have no idea how you would do it in Java, except maybe JNI magic.
Steve Sobol - 21 Jul 2006 08:20 GMT > You can do a lot of interesting things with services in C, but I have no > idea how you would do it in Java, except maybe JNI magic. http://wrapper.tanukisoftware.org
and there are a couple other similar products.
 Signature Steve Sobol, Professional Geek ** Java/VB/VC/PHP/Perl ** Linux/*BSD/Windows Apple Valley, California PGP:0xE3AE35ED
It's all fun and games until someone starts a bonfire in the living room.
bowman - 21 Jul 2006 15:23 GMT > http://wrapper.tanukisoftware.org Looks pretty handy, especially the third method. Often an application running as a service should do some atexit cleanup and shutdown gracefully rather than get chopped off at the knees with a ^C.
JPractitioner - 21 Jul 2006 08:54 GMT i see.. so srvany is not the best way eh. bowman, seems like u are really into windows programming. I had some very basic knowledge with C/C++. I suppose to call ServiceMain(), i will have to include some header files, probably C headers. Can u tell me whats the header file i will have to use? Yeah i will use JNI with C headers. By the way, converting the JAR to EXE involves JNI. So i'll use the the headers appropriately with JNI to explore deeper on controlling native threads.
Before this, I also tried to make the srvany to run a batch file that will call the jar file. Just wont work. Windows services only run exe files i guess.
Thanks for your comments.
> > I have one more question.. why is that when i stop the service, only > > srvany.exe being killed.. but my app still alive? and also if i kill my [quoted text clipped - 24 lines] > http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups > ----= East and West-Coast Server Farms - Total Privacy via Encryption =---- bowman - 21 Jul 2006 15:16 GMT > I suppose to call ServiceMain(), i > will have to include some header files, probably C headers. Can u tell > me whats the header file i will have to use? It is declared in Winsvc.h, but you would probably have to start with Windows.h which may cause problems. I don't suppose you have DevStudio and the MSDN docs. It documents the StartServiceCtrlDispatcher, RegisterServiceCtrlHandler, SetServiceStatus, and all the other hoops you have to jump through. Lacking that, there should be an example someplace on the 'net; it's pretty much boilerplate code.
JPractitioner - 21 Jul 2006 17:57 GMT Thanks a lot bowman =)
> > I suppose to call ServiceMain(), i > > will have to include some header files, probably C headers. Can u tell [quoted text clipped - 10 lines] > http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups > ----= East and West-Coast Server Farms - Total Privacy via Encryption =---- Real Gagnon - 05 Jul 2006 17:35 GMT > Does anyone has experience/know how to create a new windows (xp) > service that runs a jar file? This issue rises as i need to hide the > most of the java implementation in this project before it goes live. Use the "Java Service Wrapper"
http://wrapper.tanukisoftware.org/doc/english/introduction.html#service
Bye.
 Signature Real Gagnon from Quebec, Canada * Looking for Java or PB code examples ? Visit Real's How-to * http://www.rgagnon.com/howto.html
JPractitioner - 07 Jul 2006 14:44 GMT thx to the both of u. i really appreciate.. good luck and all the best!
> > Does anyone has experience/know how to create a new windows (xp) > > service that runs a jar file? This issue rises as i need to hide the [quoted text clipped - 9 lines] > * Looking for Java or PB code examples ? Visit Real's How-to > * http://www.rgagnon.com/howto.html Luc The Perverse - 20 Jul 2006 14:57 GMT > Hello guys, > [quoted text clipped - 10 lines] > > Thanks in advance. Have a nice day! If you really need to run a Java program as a Windows Service you might want to natively compile it.
I know excelsior Jet professional has a windows service native compilation option.
(I think Jet is the only byte code to windows code converter that is still around and up to date.) There is a GNU byte code to Linux binary compiler.
-- LTP
:) JPractitioner - 20 Jul 2006 16:30 GMT Thanks Luc, I'll take a look of this software,,
> I know excelsior Jet professional has a windows service native compilation > option.
Free MagazinesGet these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...
|
|
|