【问题标题】:java background/daemon/service cross platform best practicesjava后台/守护进程/服务跨平台最佳实践
【发布时间】:2010-09-24 12:00:04
【问题描述】:

我正在寻找让我的桌面 java 程序在大多数平台(Windows、Mac OS、Linux [尤其是 Ubuntu])上在后台运行(daemon/service?)的最佳方法。

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

  1. 需要最少数量的平台特定代码。
  2. 不要求用户做任何普通计算机用户不能/不会做的事情
  3. 不要浪费资源。

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

如何前进?

【问题讨论】:

  • 它是一个桌面程序,还是一个守护进程/服务?不可能两者兼而有之。
  • 理想情况下,该程序将主要作为守护程序/服务运行...单击状态栏中的图标将显示一个窗口以更改设置、停止守护程序/服务等。 .目前,该应用只是一个swing桌面应用。

标签: java cross-platform desktop-application daemon


【解决方案1】:

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

结构

守护进程由两部分组成。一种用 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()

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您可以使用SystemTray 类并在默认平台上安装您的应用程序。

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

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

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

      我听说 Quartz 是一个不错的选择。但是我没用过。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              人们有时很难找到 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 位版本)

              你不需要实现daemon接口,也不需要下载它,prunsrv可以用来将任何应用程序变成windows服务

              浏览其他平台的存档

              【讨论】:

                猜你喜欢
                • 2017-07-17
                • 1970-01-01
                • 2020-08-10
                • 1970-01-01
                • 2011-01-20
                • 2010-10-09
                • 2010-11-18
                • 2011-02-09
                • 2015-04-11
                相关资源
                最近更新 更多