Получить имя экземпляра в ColdFusion 10

Как получить имя экземпляра ColdFusion (например, "cfusion") в ColdFusion 10?

До 10 вы могли сделать это, используя java-объект jrun:

<cfobject action="create" type="java" class="jrunx.kernel.JRun" name="jr">

#jr.getServerName()#

Но поскольку Jrun был заменен Tomcat, мне нужно найти новый способ получения имени экземпляра.

Я знаю, что это можно сделать с помощью административного API, но у меня это не работает из-за проблем с безопасностью.


person Jan Brünemann    schedule 11.04.2012    source источник
comment
Для чего тебе это?   -  person Dale Fraser    schedule 11.04.2012
comment
Определение того, какой экземпляр обслуживает ваш запрос. У нас есть несколько экземпляров, обслуживающих одно и то же приложение за балансировщиком нагрузки. Я хочу знать, какой экземпляр CF обрабатывает мой запрос, потому что это может быть instance01, instance02 или instance03.   -  person Jan Brünemann    schedule 11.04.2012
comment
Ян, мне любопытно, почему вы говорите, что есть проблемы с безопасностью, которые заставляют вас использовать Admin API для решения этой проблемы, как это также показал Марчин. Это готовое решение для CF10, поскольку, как вы говорите, вы больше не можете полагаться на объект JRun. Я мог бы понять, если бы вы думали, что все методы Amin API требуют входа в систему (с методом входа в файл administrator.cfc в Admin API), но, как видно из примера Марчина, это не один из этих методов. Это должно работать для всех. Мне действительно искренне любопытно, что может заставить это не работать для вас.   -  person charlie arehart    schedule 01.07.2012


Ответы (3)


посмотрите в области сервера. В server.coldfusion.rootdir есть значение. В CF10 это каталог экземпляра. Например, для экземпляра cfusion на моем Mac это значение равно /Applications/ColdFusion10/cfusion. Вы можете взять последний каталог namd в пути, и это имя экземпляра. Не совсем элегантно, но может дать вам то, что вам нужно.

person Sean Coyne    schedule 11.04.2012
comment
Кажется, это работает. Это не последний каталог в многосерверной настройке, но он есть: C:\CF\servers\instance01\cfusion-ear\cfusion-war\WEB-INF\cfusion - person Jan Brünemann; 11.04.2012
comment
интересно. может быть Mac против ПК - person Sean Coyne; 11.04.2012
comment
Моя локальная автономная установка Windows такова: C:\ColdFusion10\cfusion и C:\ColdFusion10\secondInstance Таким образом, это похоже на автономную или многосерверную вещь. - person Jan Brünemann; 11.04.2012
comment
Что ж, CF 10 не имеет такой же многосерверной настройки, как CF9 и предыдущие версии. У него есть установка сервера и установка WAR/EAR. Ваша лицензия определяет, можете ли вы настроить несколько экземпляров при установке с использованием метода установки сервера. Рад, что у вас все же заработало. - person Sean Coyne; 11.04.2012

В Admin API в CF10 есть компонент «runtime». Вы можете получить имя экземпляра с помощью этого фрагмента кода:

var runtime = createObject("component", "CFIDE.adminapi.runtime");
instance = runtime.getInstanceName();

Это должно вернуть то же значение, что и getServerName(), используемое в компоненте jrunx.kernel.JRun.

person Marcin    schedule 22.05.2012

Это должно работать:

<cfset inetAddressObj = createObject("java", "java.net.InetAddress") />
<cfset machineName = inetAddressObj.localhost.getCanonicalHostName() />
person Brian    schedule 11.04.2012
comment
Увы, это возвращает имя машины, но у меня есть несколько экземпляров, работающих на одной и той же машине. Мне нужно имя экземпляра CF. Но спасибо за ответ! - person Jan Brünemann; 11.04.2012
comment
Это не имя экземпляра — и этот код работает в любой версии, чтобы получить понятное имя машины, на которой он находится. - person Mark A Kruger; 11.04.2012