2010-05-03 36 views
0

我們一直使用JCA與WebSphere內部的低級網絡資源進行接口,但我們有要求能夠從外部訪問相同的網絡資源來自Tomcat(即不在託管環境中)。網絡通信和協議佈局非常冗長,所以我們寧願不復制/粘貼數千行代碼(然後必須單獨維護它們)。從非託管環境訪問Java連接器體系結構(JCA)

通過閱讀JCA規範,可以推測某些支持可以在非託管環境(如Tomcat)中執行代碼。不幸的是,我不知道接口應該做什麼或什麼,或者如何從託管環境以外調用它們(規範非常模糊)。

是否有任何實現示例顯示如何修改JCA以便在非託管環境中可用?

謝謝!

回答

1

我們有類似的情況,我們開發了一個連接器來訪問外部WebDav存儲,並希望從獨立應用程序(非託管)使用它。

我確實認爲最簡單的方法是在設計層面解決這個問題,並以連接器的核心邏輯與JCA無關且可以輕鬆重用的方式組織您的代碼。然後,您可以使用JCA特定的代碼將連接器公開給AS。它甚至可能被封裝在兩個jar文件中 - 這至少是我們選擇的解決方案(但我們將它們全部打包成一個.jar文件)。

否則,JCA連接器是 「膠水」 以下三方:

  1. 應用服務器
  2. 的EIS
  3. 應用程序組件。

應該可以通過輕量級實現必需的類來模擬AS,然後直接使用JCA連接器。

AS關於JCA連接器的一項主要工作是管理連接池,並且從我記憶中,您應該實現的相應接口是ConnectionManager

JCA連接器收到對ConnectionManager的引用,但實現是AS特定的。編寫一個提供基本池化(或根本沒有池化)的輕量級實現聽起來是可行的。

我曾經寫過一次sequence diagram of the connection allocation機制。也許你會覺得它很有用。另一個界面是ResourceAdapter,您可以在其中定義啓動/關閉,但這很容易手動調用。

(可能有一點比這更多,它當然取決於你的JCA連接器使用了什麼,例如,如果它使用WorkWorkManager,那麼它變得更復雜嘲笑。但它似乎並不是你的情況。)

否則,我認爲Spring對JCA有一些支持,可能值得看看他們是如何做到的。

從閱讀JCA規範,有 據說一些支持在非託管環境

那麼你可以說你是指對規範的特定部分執行 代碼?

+0

我對規範的引用基於JCA 1.5規範中的各個子部分,如3.4,5.3.8,6.4.2等。感謝您的幫助。不幸的是,它看起來像我們的代碼,它太緊密地纏繞在規範的託管部分的所有錯誤的地方。 – 2010-05-06 21:57:13

相關問題