2011-11-18 39 views
6

如果可能,如何配置ColdFusion 9的ORM以使用多個DSN?如何爲多個會話範圍DSN配置ColdFusion的ORM?

可以在會話範圍而不是應用程序範圍的上下文中設置數據源嗎?

或者如何在CF9中配置Hibernate使用多個DSN?


看起來我應該更具體的... 我正在尋找一個解決方案,允許指定基於會話一個DSN。

這裏是場景。我們有一個定製的應用程序,它使用多個從子域中確定的DSN。因此,訪問http://abc.domain.com的用戶將使用abc DSN,因爲訪問xyz.domain.com的用戶將使用xyz DSN。 DSN的名稱在創建會話時確定,並作爲會話變量存儲。

我想要做這樣的事情:

//Artists.cfc

component persistent="true" datasource="#session.dsn#" 
{ 
property name="artistid" generator="increment"; 
property firstname; 
property lastname; 
property address; 
property city; 
property state; 
} 

//的Application.cfc

component output="false" { 
THIS.name = "MultipleDsnORMTest"; 
THIS.applicationTimeout = createTimeSpan(0, 0, 0, 0); 
THIS.clientManagement = false; 
THIS.datasource = ""; // Leaving black ==> "No data source specified." 
         // Setting to cfbookclub ==> "ORM is not 
         // configured for the current application." 
         // Setting to cfartgallery works but doesn't 
         // demonstrate use multiple DSNs 
THIS.loginStorage = "cookie"; 
THIS.sessionManagement = true; 
THIS.sessionTimeout = createTimeSpan(0, 0, 0, 0); 

THIS.ormenabled = true; 
THIS.ormsettings = {}; 
} 

回答

1

雖然它是可以配置的ColdFusion 9到使用多個數據源與應用範圍ORM,這是不可能配置的ColdFusion 9的ORM與內多個DSN的工作會話範圍。

+0

那麼,你是否必須在'Artists.cfc'中保留'datasource =「xyz」'hardcoded(xyz)?或者找到了一種讓它動態的方法? – Sergii

+0

@Sergii由於對多個數據源的限制,我沒有和CF ORM一起工作太多。儘管我希望它不是真的,但我相信答案是數據源必須是硬編碼的。希望有人會糾正我,如果我錯了。我認爲硬編碼是不好的編程實踐,所以我真的希望我錯了。 – Micah

1

具有ColdFusion 9.0.1更新中引入,您可以使用multiple data sources with ORM。每個組件一次一個。使用對象中的「datasource」屬性來指定應該使用哪個數據庫。

<cfcomponent displayname="firstObject" datasource="dbOne"> 
    <cffunction> 
     ... 
    </cffunction> 

    ... 
</cfcomponent> 

component datasource = 'dbOne'{ 
    ... 
} 
+0

無法在Application.cfc級別定義默認值,這意味着如果您從其他位置引用數據,則只需添加數據源屬性即可? –

+0

如果您省略對象/組件中的datasource屬性,則將使用application.cfc中定義的默認數據源 –

+0

您將Application.cfc級別數據源設置爲什麼? – Micah