我正在研究(幾乎)香草Java EE 6堆棧(EJB,JPA,JSF等)的應用程序。我們正在Glassfish 3上託管我們的應用程序,現在我們的持久相關代碼是100%純JPA。正在使用適用於驗證JPA實現的Java斷言
不幸的是,我們應用程序的一部分必須在Oracle 10g數據庫中使用存儲過程。爲了調用這個存儲過程,我們決定使用EclipseLink(與Glassfish捆綁在一起的JPA實現)。
由於我們的代碼的(小)部分現在依賴於EclipseLink,我想知道如何驗證這種依賴關係。依賴關係未與應用程序一起打包,但假定可在我們的部署平臺(即Glassfish)上使用。
在我看來,我們的選擇是:
- 不要做任何事,就讓它失敗。我認爲這個解決方案是次優的,因爲它從未明確表示我們的代碼假定存在EclipseLink。
在if語句中檢查EclipseLink並拋出一個特定的異常。
if (!JpaHelper.isEclipseLink(entityManager)) { throw new InvalidJpaImplementationException(); }
添加斷言,檢查EclipseLink並讓它在失敗時拋出異常。
assert JpaHelper.isEclipseLink(entityManager)) : "Blah!";
會斷言(選項3)是一個有效的解決方案嗎?你想要另一種解決方案嗎?哪一個,爲什麼?
爲什麼你的存儲過程依賴於EclipseLink?你不能找到一個可移植的實現嗎?向我們展示一些代碼... – perissf 2012-03-23 08:55:55
JPA不支持調用存儲過程。你會如何建議我們可以使這更便攜?可以在其他應用程序服務器上部署EclipseLink,因此我只想在代碼中明確地表示這種依賴關係(除了在文檔中提及它)。 – 2012-03-23 09:00:46
JPA 2。1將支持存儲過程(最終時),並且DataNucleus JPA已經提供了此機制(與規範相匹配)。很明顯,你現在可以像現在這樣編寫自己的變體,並在可用時將其交換到JPA2.1機制 – DataNucleus 2012-03-23 11:29:27