我的應用程序中有不同插件的命名完全相同,我希望能夠使用Hibernate正確配置它們。問題是,看起來Hibernate在嘗試查找類時會動態生成一個類的包名稱。通過一個插件,該方案可以工作,但是跨多個插件無法使用。看起來Hibernate在跨多個插件處理Hibernate配置文件時會感到困惑。在動態Eclipse插件中使用Hibernate
這是因爲每個插件都有自己的類加載器嗎?繼續使用現有插件和Hibernate進行工作的最佳方式是什麼?
我的應用程序中有不同插件的命名完全相同,我希望能夠使用Hibernate正確配置它們。問題是,看起來Hibernate在嘗試查找類時會動態生成一個類的包名稱。通過一個插件,該方案可以工作,但是跨多個插件無法使用。看起來Hibernate在跨多個插件處理Hibernate配置文件時會感到困惑。在動態Eclipse插件中使用Hibernate
這是因爲每個插件都有自己的類加載器嗎?繼續使用現有插件和Hibernate進行工作的最佳方式是什麼?
問題是,每個插件都有自己的Classloader,而Hibernate使用Reflection來查找正確的類。
我在家裏有一篇關於這個問題的非常好的文章,但是這篇文章是德文的。我會盡力解釋你需要做什麼。
爲了讓數據結構在多個插件上共享,您必須將其放入插件並啓用名爲buddy-policy的功能。 假設你有一個在啓動時啓動休眠的主應用程序插件,這個插件需要從數據結構插件中「查看」類。要做到這一點主插件設置其好友策略爲「註冊」,並且數據結構插件註冊爲「好友」。不幸的是,你必須直接在清單文件中完成這些工作,至少在3.3版本中,編輯器中沒有辦法做到這一點。
一旦這個好友策略工作,Hibernate也會。
我擡頭看看我的舊應用程序,這裏是我如何做到的。
以下是重要的行:
休眠-插件de.eye4eye.hibernate
Eclipse-BuddyPolicy: registered
數據結構網絡化,插件toolseye.datastructures
Eclipse-RegisterBuddy: de.eye4eye.hibernate
直接把那些線在MANIFEST.MF
兩個插件需要重新導出它們的軟件包,以便在主應用程序或任何你層有在之間可以使用它們。 希望有所幫助。
只是爲了使這個完整。
EclipseLink可以用作Eclipse RCP應用程序中的JPA提供程序,而不是使用Hibernate。 EclipseLink是Oracle的前TopLink,並被選爲JPA 2的參考實現。
RCP的一點是,EclipseLink可用作OSGI-Bundles(org.eclipse.persistence.jpa),並且由於它可以從另一個插件加載類而不需要額外的夥伴策略。
目前我正在玩耍,使用以下項目結構(模型 - 視圖 - 演示者模式)。在括號中的名字指定的關係是不插件(不是所有的都包括在內,只涉及到這個問題的)
在這種情況下,在數據的插件JPA提供能夠加載從模型插件類沒有夥伴-政策。
*注意,因爲這是由DAO的封裝(主要的原因仍然使用它們)
鏈接
非常有幫助,非常感謝! – AlbertoPL 2009-07-03 05:45:51