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

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

通过“最好的方式”,我希望找到一种方式:

  1. 需要少量的平台特定代码。
  2. 不要求用户做一般计算机用户不能/不会做的任何事情
  3. 不是资源匮乏。

我理解我的要求可能不切实际,但我希望这种情况有某种“最佳实践”。

怎么前进?

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

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

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

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

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

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

结构体

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

平台

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

Java代码

您必须编写一个实现以下方法的Class(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() 

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

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

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

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

Apache Directory Daemon项目听起来像是最好的跨平台方式(在POSIX下使用Java包装,在Windows下使用procrun)。

人们有时很难找到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服务

浏览其他平台的存档