我目前正在研究一個Java應用程序,它應該能夠同時使用不同版本的類(因爲有多租戶支持)。我想知道,有沒有什麼好的方法來管理這個?我的基本方法是有一個接口,可以說汽車,並實現CarV1,CarV2等不同的版本。每個版本都有自己的課程。如何在同一個應用程序中使用不同版本的類?
我認爲,我的方法有點蹊蹺。但是我沒有找到關於這個主題的任何文獻,但我實際上不知道我應該搜索什麼。
我目前正在研究一個Java應用程序,它應該能夠同時使用不同版本的類(因爲有多租戶支持)。我想知道,有沒有什麼好的方法來管理這個?我的基本方法是有一個接口,可以說汽車,並實現CarV1,CarV2等不同的版本。每個版本都有自己的課程。如何在同一個應用程序中使用不同版本的類?
我認爲,我的方法有點蹊蹺。但是我沒有找到關於這個主題的任何文獻,但我實際上不知道我應該搜索什麼。
界面的想法是謹慎的。將它與一個工廠組合起來,該工廠可以根據某些外部輸入生成所需的實現實例, G。租戶ID。如果您不需要在應用程序的相同運行實例中支持多個租戶,那麼您也可以使用JDK中的ServiceLocator
之類的東西,它允許使用基於文件的配置方法。
如果您正在應用程序服務器中運行,請考慮啓動多個實例,每個實例均爲不同的客戶端進行配置。然後服務器將負責分離實例,很好。否則,如果您確實認爲在非Java EE應用程序中同時需要多個實現(在運行時),這是一個棘手的問題。也許你想考慮一下OSGi容器,它提供了具有多個版本的類的功能。但是,像這樣的方法會增加很多複雜性,如果您還不熟悉它。
理論上你可以使用像JBoss這樣的多個類加載器來處理這個問題。
但是:我強烈建議不要自己實施這個。這是一件相當複雜的事情,很容易出錯。如果您正在討論Web應用程序,則可以爲每個租戶創建一個Web應用程序實例。如果您正在開發獨立應用程序,則應檢查每個租戶是否可以運行一個實例。
如果在CDI容器下運行,可以使用限定符注入資源。與生產者方法一起,這可以允許單個應用程序實例通過運行時選擇替代實現來支持多租戶行爲。 –
好點!而不是自己寫工廠,這可能會更好。 –