Проблемы при переходе с кода, связанного с JRun, на Tomcat - ColdFusion 8 на ColdFusion 2016
Мы пытаемся перейти с ColdFusion 8 на ColdFusion 2016 и у нас возникли проблемы с переносом некоторых пользовательских Java-сервисов, которые давно были созданы кем-то другим. Чтобы облегчить загрузку / запуск / общение ColdFusion со Службами, они были написаны на Java и использовали JRun в качестве зависимости.
Я верю jrunx.kernel.ServiceMBean
Интерфейс сначала расширяется для определения любых вызовов функций, которые ColdFusion будет иметь доступ для вызова (т. е. доступ к API из ColdFusion->Java).
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, управление различными потоками и т. Д.), А также реализует сервис-ориентированные методы. для таких вещей, как start()
а также stop()
когда ColdFusion запускает / останавливает службу, которая предположительно ServiceMBean
или же ServiceAdapter
требуют.
/**
* 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 Service для ServiceMBean
а также ServiceAdapter
) быть совместимым с аналогичными сервисами 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-подключение к сторонней службе. Он также прослушивает входящие запросы от шлюза, а затем вызывает ColdFusion, чтобы что-то сделать с данными.