2012-08-28 56 views
0

我有一個websphere 6.1集羣環境,它由兩個節點組成,每個節點有兩個appservers。讓我們把NodeA including Server1(2809) & Server2(2810)NodeB including Server3(2811) & Server4(2812)。同時,我創建了一個JNDI local_db的集羣範圍數據源。如何通過websphere ORB調用獲取數據庫連接?

現在,我想在Java客戶端通過從上述環境ORB調用數據庫的連接。 Java代碼的特定部分是這樣的:

 Hashtable env = new Hashtable(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory"); 
     env.put(Context.PROVIDER_URL,"iiop://localhost:2809"); 

     javax.sql.DataSource ds = (DataSource)initialContext.lookup("local_db"); 

     Connection cn = ds.getConnection(); 
  1. 如果上面的Java客戶端的代碼被執行,將數據庫連接檢索所有應用程序服務器的四個連接池之間的請求後續負載均衡規則?另外,如果我的java客戶端成功地獲得了一個數據庫連接,然後運行一個大的SQL查詢並返回很大的結果,那麼對於內存空間的佔用情況,WAS應用服務器應該注意些什麼?只有服務器1由於上面使用的端口2809或返回數據庫連接的目標服務器?

  2. 順便說一句,如果我把該PROVIDER_URL 2組服務器的成員,如iiop://localhost:2809, localhost:2810,這是否意味着負載平衡或故障轉移?

    請幫忙解釋一下,並糾正我,如果我理解錯誤!

感謝

回答

1

讓我先從容易的,然後繼續休息

  1. 有兩個提供的網址意味着故障轉移。如果無法連接到第一個命名服務器,它將連接到第二個命名服務器並繼續,直到該列表結束。請注意,故障切換是用於連接到命名服務器(而不是資源本身)

查找是在您連接的服務器上完成的。 local_db表示該服務器上的數據源(及其連接池)。你將會和server1一起工作(當你連接到NS時),並且將從該服務器上託管的數據源獲得連接。

你將永遠不會從其他服務器的任何連接。換句話說,沒有負載平衡(一個請求使用來自server1的連接,另一個使用來自服務器2的連接等)。我相信這就是你在上面的問題中通過負載均衡的意思。

HTH

+0

感謝您的回覆@Manglu正如你所說,無負載均衡這裏的數據庫連接retreiving。那麼對於EJB資源請求呢?如果我要查找該EJB資源,那麼會發生負載平衡嗎?看來WLM將會處理這個問題,但我不確定。 – wing2ofsky

+0

WLM感知客戶端做到了這一點。 Java客戶端(和容器)是良好的WLM感知客戶端。 EJB調用返回的存根包含有關所有託管EJB的服務器的相關信息。當客戶端調用EJB時​​,它使用該信息爲您執行WLM。 – Manglu

+0

查看本文,以更好地理解EJB調用如何在WebSphere環境中工作 - http://www.ibm.com/developerworks/websphere/techjournal/0807_pape/0807_pape.html – Manglu

0

DataSource既不是遠程的,也不序列化的。因此,如果從服務器查找local_db,它會返回客戶端用來與相同配置的服務器上的一個創建一個新DataSource實例javax.naming.Reference。這也意味着一旦執行查找,JDBC方法就不會向WebSphere服務器發送請求。