java background / daemon / service跨平台最佳实践

时间:2008-11-28 19:38:36

标签: java cross-platform desktop-application daemon

我正在寻找让我的桌面java程序在大多数平台(Windows,Mac OS,Linux [特别是Ubuntu])中在后台(守护程序/服务?)运行的最佳方法。

以“最佳方式”,我希望找到一种方式:

  1. 需要最少数量的特定于平台的代码。
  2. 不要求用户做一般计算机用户不能/不会做的任何事情
  3. 不是资源猪。
  4. 我理解我的要求可能不切实际,但我希望在这种情况下有某种“最佳做法”。

    如何前进?

7 个答案:

答案 0 :(得分:15)

您可以使用Apache Commons daemon code将Java应用程序作为服务(Windows)或守护程序(Linux)运行。

结构

守护进程由2部分组成。一个用C语言编写,用于创建操作系统的接口,另一个用Java编写,提供Daemon API。

平台

支持Win32和UNIX类平台。对于Win32平台,请使用procrun。对于像UNIX这样的平台,请使用jsvc。

Java代码

您必须编写一个实现以下方法的类(MyClass):

* void load(String[] arguments): Here open the configuration files, create the trace file, create the ServerSockets, the Threads
* void start(): Start the Thread, accept incoming connections
* void stop(): Inform the Thread to live the run(), close the ServerSockets
* void destroy(): Destroy any object created in init()

答案 1 :(得分:9)

您可以使用Java Service Wrapper将任何Java程序转换为服务/守护程序。它由多个OSS项目使用,并作为Nexus Maven Repository Manager的一部分提供,因此可以作为开箱即用的服务安装。要使用它,作者,您只需要创建一个配置文件,然后运行一个简单的批处理文件在Windows上创建服务或将init脚本复制到Linux上的正确运行级别。

答案 2 :(得分:7)

您可以使用SystemTray课程并在默认平台中安装其他任何应用程序。

对于Windows,它可能是在启动时运行的计划任务。 对于Linux和OSX,我不知道(除了crontab,它在某种程度上太技术了)但我很确定他们都有办法轻松地做同样的事情。

不幸的是(截至今天)Apple尚未完成1.6端口。

它不会是真正的恶魔,而是像谷歌桌面这样的应用程序。

我听说Quartz是个不错的选择。但我从来没有用过它。

答案 3 :(得分:1)

如果您不需要免费解决方案,您可以使用Advanced Installer(www.advancedinstaller.com),它可以从您的JAR中获得win-service以及MacOS安装程序等等。

答案 4 :(得分:0)

查看JDIC, Java Desktop Integration Components项目。它支持桌面集成,如系统托盘(或等效)与跨平台API。

其他人提到了Quartz,它是一个企业作业调度程序。它可以是轻量级的,具体取决于计划的作业,但它没有任何本质上面向桌面的功能。相反,它的许多功能都依赖于像关系数据库这样的企业支持。如果您的应用程序主要是调度任务,那么无头的Quartz服务执行作业,桌面客户端与服务交互是合理的方法。

答案 5 :(得分:0)

Apache Directory Daemon项目听起来像是最好的跨平台方式(使用POSIX下的JSVC Java封装器和windows下的procrun)。

答案 6 :(得分:0)

人们有时很难找到prunsrv.exe和/或prunmgr.exe(procrun的组件),它在apache网站上没有很好的记录,通常它可以在档案中找到(注意。他们说procrun是tomcat5。 exe)的

对于Windows,你可以在这里找到它: http://archive.apache.org/dist/commons/daemon/binaries/windows/commons-daemon-1.0.7-bin-windows.zip(包含32位和64位版本)

你根本不需要实现守护进程接口也不需要下载它,prunsrv可用于将任何应用程序转换为Windows服务

浏览其他平台的存档