Java 后台/守护进程/服务跨平台最佳实践

27

我正在寻找运行在后台的Java桌面程序的最佳方式(守护进程/服务?),并能够在多个平台(特别是Windows、Mac OS和Linux [Ubuntu])上运行。

所谓“最佳方式”,我希望能够达到以下目标:

  1. 需要最少量的平台特定代码。
  2. 不要求用户进行任何一般计算机用户无法或不会完成的操作。
  3. 不会占用过多系统资源。

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

如何继续前进?


它是什么——桌面程序还是守护进程/服务?它实际上不能两者兼备。 - Alnitak
3
理想情况下,该程序主要应以守护进程/服务的形式运行,单击状态栏中的图标将显示一个窗口,用于更改设置、停止守护进程/服务等。目前,该应用仅为一个 Swing 桌面应用程序。 - Jack
7个回答

16

你可以使用Apache Commons daemon代码在Windows上作为服务或在Linux上作为守护进程来运行Java应用程序。

结构

守护进程由两部分组成。一部分用C语言编写,用于与操作系统交互;另一部分用Java语言编写,提供了守护进程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()

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

7
你可以使用 SystemTray 类,并像在默认平台中安装其他应用程序一样安装你的应用程序。
对于 Windows,它可以是一个在启动时运行的定期任务。 对于 Linux 和 OSX,我不知道(除了 crontab 工具可能过于技术性之外),但我很确定它们都有一种轻松完成同样任务的方法。
不幸的是(截至今天),苹果还没有完成 1.6 版本的移植。
它不会是一个真正的守护进程,而只是像 Google 桌面那样的应用程序。
我听说 Quartz 是一个不错的选择,但我从未使用过。

1
如果您不需要免费的解决方案,可以使用Advanced Installer(www.advancedinstaller.com),它可以从您的JAR文件制作Windows服务和MacOS安装程序等等。

0

Apache Directory Daemon 项目听起来是实现跨平台的最佳方式(Java 包装器在 POSIX 上使用 JSVC,在 Windows 下使用 procrun)。


0

请查看JDIC,Java桌面集成组件项目。它支持桌面集成,例如使用跨平台API的系统托盘(或等效物)。

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


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服务

浏览该存档以获取其他平台的信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接