0

我们正在尝试从 ColdFusion 8 更新到 ColdFusion 2016,并且在迁移一些很久以前由其他人构建的自定义 Java 服务时遇到了一些问题。为了促进 ColdFusion 启动/运行/与服务对话,它们是用 Java 编写的,并使用 JRun 作为依赖项。

我相信jrunx.kernel.ServiceMBean首先扩展接口以定义 ColdFusion 将有权调用的任何函数调用(即来自 ColdFusion->Java 的 API 访问)。

public interface MyMBean
  extends ServiceMBean {

    /**
     * Adds a Request object to the RequestList
     */
    public boolean addRequest(String destination, String body, etc.);

    // etc.
}

然后,通过扩展jrunx.kernel.ServiceAdapter和实现MyMBean上面的接口来实现这个接口java.lang.Runnable。我相信这就是 ColdFusion 可以运行/与之对话的“使代码成为服务”,然后继续实现自定义代码(包括上面定义的 API 调用、各种线程管理等),以及实现面向服务的方法对于诸如ColdFusion 何时启动/停止可能或需要的服务之start()类的事情。stop()ServiceMBeanServiceAdapter

/**
 * Main class
 */
public class MyService extends ServiceAdapter
    implements MyMBean, Runnable {

    // Declare various custom member variables

    /**
     * Invoked as soon as this class is called
     */
    public void init() { ... }

    /**
     * Invoked when this service is started
     */
    public void start() { ... }

    /**
     * Invoked when this service is stopped
     */
    public void stop() { ... } 

    /**
     * Run the service
     */
    public void run() { ... }

    // Custom functions, etc.
}

编译后,将MyPackage.jar文件放入C:\ColdFusion8\runtime\lib\其中,然后注册C:\ColdFusion8\runtime\servers\coldfusion\SERVER-INF\jrun.xml以告诉 ColdFusion 启动服务。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jrun-server PUBLIC "-//Macromedia, Inc.//DTD jrun-server 4.0//EN" "http://jrun.macromedia.com/dtds/jrun-server.dtd">
<jrun-server>

    <!-- Various ColdFusion Core Services -->
    <!-- ...etc --->

    <!-- Register MyService --->
    <service class="jrunx.MyPackage.MyService" name="MyService">
        <attribute name="bindToJNDI">true</attribute>
        <attribute name="activeHandlerThreads">25</attribute>
        <attribute name="maxHandlerThreads">1000</attribute>
        <attribute name="minHandlerThreads">20</attribute>
        <attribute name="threadWaitTimeout">180</attribute>
        <attribute name="timeout">600</attribute>
    </service>

</jrun-server>

为了让 ColdFusion 能够“调用上述实现所公开的 API 调用” ServiceMBean,我们将使用简单的代码,例如:

<cfset scheduler = initContext.lookup("jrun:service/SchedulerService")> 
<cfset schedulerRoot = XmlParse(scheduler.getServerStatus())>

我们的理解是,虽然 ColdFusion 8 基于 JRun,但它已被 Tomcat 取代,因此我们期望我们需要更新 Java 代码(即 和 的 JRun 服务接口声明ServiceMBeanServiceAdapter以兼容等效的 Tomcat 服务。最后,我们需要找到一种新方法将其注册到 ColdFusion 2016(我怀疑是在 Tomcat 中C:\ColdFusion2016\cfusion\runtime\conf\servers.xml还是C:\ColdFusion2016\cfusion\runtime\conf\web.xml?)。

如果相关,上面有 3 个抽象为“MyService”的实现: 1. “DirectoryWatcherService” - 监视文件夹以查找文件,然后调用 ColdFusion 对其进行处理 2. “SchedulerService” - 监视数据库以获取通过预定的日期/时间,然后调用 ColdFusion 对其进行处理 3. “GatewayService” - 允许 ColdFusion 向其发送消息,以通过持久 TCP 连接传递到第 3 方服务。它还侦听来自网关的入站请求,然后调用 ColdFusion 对数据进行处理。

4

0 回答 0