2012-04-11 141 views
6

如何在ColdFusion 10中獲取ColdFusion實例的名稱(例如「cfusion」)?在ColdFusion中獲取實例名稱10

前10,你可以通過使用JRUN Java對象這樣做:

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

#jr.getServerName()# 

但由於JRUN已被取代的Tomcat我需要找到讓實例名稱的新方式。

我知道這可以使用管理API來完成,但由於安全問題,這對我不起作用。

+0

你需要什麼? – 2012-04-11 12:15:28

+1

確定哪個實例正在爲您的請求提供服務。我們有多個實例在負載均衡器後面提供同一個應用程序。我想知道哪個CF實例正在處理我的請求,因爲它可以是instance01,instance02或instance03。 – 2012-04-11 12:19:20

+0

一月,我很好奇你爲什麼說有「安全問題」,讓你使用管理API來解決這個問題,正如Marcin也表明的那樣。這是CF10的現成解決方案,因爲如您所說,您不能再依賴JRun對象。 我可以理解,如果您認爲所有Amin API方法都需要登錄(使用管理API中的administrator.cfc的登錄方法),但正如Marcin的示例中所示,這不是其中的一種方法。它應該適用於任何人。 我真的很好奇,什麼使它「不適合你」。 – 2012-06-30 21:59:42

回答

5

看在服務器範圍。 server.coldfusion.rootdir有一個值。在CF10上,這是實例的目錄。因此,對於我Mac上的「cfusion」實例,此值爲/ Applications/ColdFusion10/cfusion。您可以抓取路徑中的最後一個目錄namd,這是實例的名稱。不完全優雅,但可能會讓你得到你需要的東西。

+0

我認爲這會奏效,讓我試試看。 – 2012-04-11 14:04:11

+0

這似乎工作。這不是多服務器設置中的最後一個目錄,而是它的存在:'C:\ CF \ servers \ instance01 \ cfusion-ear \ cfusion-war \ WEB-INF \ cfusion' – 2012-04-11 14:05:35

+0

有趣。可能是一個mac與pc的東西 – 2012-04-11 14:09:18

-5

這應該工作:

<cfset inetAddressObj = createObject("java", "java.net.InetAddress") /> 
<cfset machineName = inetAddressObj.localhost.getCanonicalHostName() /> 
+0

唉,它返回機器的名稱,但我有_same_機器上運行多個實例。我需要CF實例的名稱。但謝謝你的回答! – 2012-04-11 12:42:21

+2

這不是「實例」的名稱 - 並且該代碼可以在任何版本中使用,以獲取所在機器的「友好」名稱。 – 2012-04-11 12:56:55

5

在CF10的管理API中有一個「運行時」組件。您可以使用此代碼片段獲取實例名稱:

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

這將返回相同的值getServerName()jrunx.kernel.JRun組件使用。

+0

+1比抓住rootdir imho的最後一個目錄名更好 – Seybsen 2012-07-13 07:46:52

相關問題