从Web存档执行命令

时间:2013-11-19 01:57:23

标签: java spring quartz-scheduler

我通过Quartz和Spring在我的WAR文件中包含了一个预定作业。如果计划的作业未命中,我必须显式执行方法Class_A.Method_A()。

为了执行该方法,我计划在Class_A下创建一个静态方法main(),以便我可以执行jar -cp $ CLASSPATH Class_A。但是,该类在WAR文件中,我该怎么办?

另外,WAR文件有自己的数据源和log4j配置,方法Method_A进行数据库访问和日志记录,如果我在命令提示符下调用它,是否有冲突?

如果通过comamnd提示调用它不是一个好习惯,那么更好的方法是什么?请帮忙。

1 个答案:

答案 0 :(得分:1)

你为什么要尝试执行'jar -cp'。这将是一个单独的jvm执行,因此您将无法直接访问运行Web应用程序的jvm中的资源(这意味着Web应用程序在jvm的内存空间中生成了对象)。 [这是关于冲突的问题的答案/

请提及运行Web应用程序的应用程序服务器。

查看您对系统管理员的评论(尽管我也会提到这一点,不管这一点如何)。您是否听说过ServiceMBeans,您可以试试它们。

您的场景是一个非常普遍的场景,人们需要访问在JVM中运行的特定类(更好地说是类的实例)。你当然需要与应用程序一起加载的东西。

您可以编写一个Service MBean来运行Web应用程序(内部)。这意味着你正在暴露行动。然后,您可以编写一个Java客户端来与MBean交互并调用其公开的方法。

如果您的应用程序服务器提供访问MBean的身份验证。

其他选项是JMS实现。设置JMSQueue,其侦听器将执行与Web应用程序类交互的操作。显然,监听器将加载侧Web应用程序。 EJB实现允许您通过简单的ejb xml或注释加载监听器。

然后你编写一个单独的java代码,它可以向JMSQueue发送消息命令。 所有应用程序服务器都提供身份验证选项。