2011-08-23 100 views
1

我只花了一個半小時的調試一些新的代碼,不破,因爲我忘了檢查我的日誌這個可怕的消息(又來了!):有沒有什麼辦法來強制執行EE配置RuntimeUnenhancedClasses

WARN openjpa.Enhance - Creating subclass for ... 

我在OpenEJB 3.2快照構建,Java 1.6.0_25和Eclipse Helios中運行OpenJPA 2.1.0。我的實體使用ant PCEnhancerTask進行了增強。

我的META-INF/openjpa.xml包含

<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" /> 
<property name="openjpa.DynamicEnhancementAgent" value="false" /> 

反正是有這個EE配置有OpenJPA的執行RuntimeUnenhancedClasses選擇,因爲它在SE的配置呢?

嫌疑人我的'真正的'問題源於Eclipse svn更新,有時會觸及我的JPA實體源,從而導致生成覆蓋我的增強類。

令人沮喪的是,我多長時間從IDE運行一個單元測試,以某種奇怪的方式失敗,並且當我需要做的就是運行增強器時,我會遍歷代碼尋找問題。

回答

0

<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" /> META-INF/persistence.xml。

看起來我們正在調試級別上記錄這個動作(可能它應該是信息級別),但OpenEJB會將它設置爲OpenJPA 1.x中的默認屬性,以便與OpenEJB 3.1一起使用的應用程序。 x/OpenJPA 1.x在3.2.x中仍然可以不加修改地工作。如果該屬性已經設置在persistence.xml中,它將永遠不會被覆蓋,因此將其設置爲您想要的效果。

接受有關如何在未來某個時間將他人保存在同一條船上的建議。看起來要麼在openjpa.xml文件中查看並查看已設置的屬性,要麼在info上發出日誌消息將會這樣做 - 或者兩者兼而有之。

+0

這適用於OpenJPA日誌錯誤。不知道爲什麼它沒有上週使用@Rick的建議... – JimO

+0

至於記錄動作,OpenJPA已經記錄了WARN,這只是我的(很多?)日誌在測試過程中被使用過,這就是爲什麼我錯過了它。我已經優化了我的解決方法,以驗證每個JPA實體實現了PersistenceCapable,所以問題在我身後,但爲了幫助人們從JPA遷移到EJB/JPA,我建議遵守openjpa.xml條目。 – JimO

0

這聽起來像是無論什麼原因,你的財產沒有在容器中運行時被拿起。

我有一些可能的解決方案:

  1. 嘗試在META-INF/persistence.xml中設置你的屬性。我假設你在openjpa.xml文件中擁有這些屬性是有原因的,但它可以幫助我們找出真正的問題所在。

  2. Set -Dopenjpa.RuntimeUnenhancedClasses = false作爲JVM屬性。這將適用於給定JVM的所有PU。

  3. 移至OpenJPA版本> = 2.0.0。 RuntimeUnenhancedClasses被關閉爲該版本中的默認行爲。

+0

感謝您的提示。其他屬性肯定是從openjpa.xml中挑選出來的,但是我遵循了你的建議,並在jvm和persistence.xml中設置了仍然產生子類的實體。我認爲,類轉換是JPA規範(9.5/9.5.1)的一個要求,恕我直言,沒有提供者我用它做'對'(對我來說)。我已經實現的解決方案是在引導容器之前構建每個實體,並確保它們是org.apache.openjpa.enhance.PersistenceCapable的實例 – JimO

相關問題