无法从JRun相关代码迁移到Tomcat - ColdFusion 8到ColdFusion 2016

时间:2018-05-02 18:41:11

标签: java tomcat coldfusion jrun

我们正在尝试从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“调用上面ServiceMBean实现所公开的API调用”,我们将使用简单的代码,例如:

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

我们的理解是,虽然ColdFusion 8基于JRun,但它已被弃用而支持Tomcat,所以我们期望我们需要更新Java代码(即{{1}的JRun服务接口声明}和ServiceMBean)与等效的Tomcat服务兼容。最后,我们需要找到一种新的方式来注册ColdFusion 2016(我怀疑在Tomcat的ServiceAdapterC:\ColdFusion2016\cfusion\runtime\conf\servers.xml中?)。

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

0 个答案:

没有答案