我有一個Wicket應用程序,我試圖實現可以遠程更改的單獨配置。無論如何,這是最終的目標。在沒有web.xml的情況下將CayenneRuntime用於web應用程序
我想要做的是通過手動啓動而不是使用web.xml文件來設置Cayenne。我嘗試了一堆不同的東西,但我不確定我完全理解上下文是如何應用於所有線程的。
我已經嘗試在我的應用程序類中創建ServerRuntime。我也嘗試了每個頁面使用的自定義BasePage類。我可以得到它的那種做對的BasePage以下的工作,但它是不一致的:
public class BasePage ....
public static ServerRuntime runtime = new ServerRuntime("cayenne-config.xml");//This is in my BasePage class, but I've also tried this in the Application class
@Override
protected void init() {
BaseContext.bindThreadObjectContext(Application.runtime.getContext());//This is in my BasePage class
}
就像我說的,那樣的作品,但它是不相符的。我一直在
BaseContext.getThreadObjectContext();
錯誤獲取的錯誤是這樣的:我好像
java.lang.IllegalStateException: Current thread has no bound ObjectContext.
無法找到這麼多的信息。我試着做這樣的事情,並使用這些訪問運行時,但沒有任何工作一致。
WebUtil.setCayenneRuntime(this.getServletContext(), runtime);
BaseContext.bindThreadObjectContext(WebUtil.getCayenneRuntime(((Application)getApplication()).getServletContext()).getContext());
任何幫助將不勝感激。
CayenneFilter和線程綁定的ObjectContext只是Cayenne如何被引導的一個例子。如果您正在使用任何類型的依賴注入框架,則可以完全取消該方法,並將ServerRuntime單例創建爲另一個DI管理的服務。然後根據需要創建ObjectContexts(例如,用於讀取的一個共享ObjectContext,以及用於寫入的短生活頁面或方法範圍的ObjectContexts) –
@andrus_a,謝謝。目前我們不使用DI框架,而是我們有興趣介紹,我會繼續使用DataContext.getThreadObjectContext()嗎?我們有很多應用程序使用它,所以這將是一個相當大的改變。我沒有做過很多DI,所以任何資源 – adpro
當然,DI是一個超越短小帖子的大話題,有Spring [Boot]可用,還有bootique。io - 一款基於Google Guice DI的開源項目,我參與其中,可以提供卡宴整合功能。如果需要,DataContext.getThreadObjectContext()API仍然可用。它簡單易用。請記住,它不是唯一的選擇,您可以調整應用程序中的ObjectContext範圍以適應特定的需求。 –