2009-10-27 61 views
2

我試圖在Spring dm Server OSGi環境中使用EclipseLink JPA。在Spring dm Server 1.x中使用EclipseLink JPA時使用Aspectj加載時編織時遇到問題

從Spring企業捆綁庫下載相關框架和庫包括:

  • DM服務器1.0.2.SR02
  • AspectJ運行1.6.3
  • AspectJ的韋弗1.6.3
  • 春天Framework 2.5.6.A
  • Eclipse Persistence 1.1.0
  • Javax Persistence API 1.99.0

我遵循與設置EclipseLink JPA的PetClinic-1.5.0示例相同的結構。一切工作,直到懶惰提取啓用(這需要代理對象)。

一旦啓用了延遲提取,以下錯誤提示加載時織入功能無法正常工作。

----(截斷可讀性)

異常[的EclipseLink-60](Eclipse持久服務 - 1.1.0.r3634):org.eclipse.persistence.exceptions.DescriptorExcep灰 異常描述:方法[_persistence_setcustomer_vh]或[_persistence_getcustomer_vh]未在對象[net.fractech.fds.backoffice.Job]中定義。 內部異常:java.lang.NoSuchMethodException:net.fractech.fds.backoffice.Job._persistence_getcu stomer_vh() 映射:org.eclipse.persistence.mappings.OneToOneMapping [customer] 描述符:RelationalDescriptor(net.fractech.fds。 backoffice.J OB - > [DatabaseTable(工作)])


這表明_persistence_getcustomer_vh()和_persistence_setcustomer_vh()方法被不自動編織成作業域對象。

問題

1)如何確定是否加載時編織的實際工作;此外,如何記錄織造代理和織布機開始的加載時間?如何將交換機傳遞給此編織器以使其輸出調試信息?

我想我開始加載時織與<背景:「上」/>

2.加載時,韋弗AspectJ的編織=)許多搜索揭示,我並不需要通過-javaagent參數在使用dm服務器時的jvm。它是否正確? 3)我確信我的另一個包中的域對象可以通過聲明com.springsource.org.eclipse.persistence; version =「[1.1.0,1.1.0]」;來訪問eclipse持久化類。 import-scope:=在我的eclipselink bundle中的應用程序,幷包含PAR中的所有應用程序包。 Spring dm Server中是否需要其他配置來啓用EclipseLink JPA?

回答

2

我有類似的問題。首先嚐試設置eclipselink.weaving.lazy = false,否則eclipselink.weaving = false如果不起作用。我必須設置後者。

如果你想參考我正在使用的設置,看看它是否適用於你,我在我的網站上有一篇關於它的文章。

1

這是更好地使用春分擺手Springwaver

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

...

<property name="loadTimeWeaver">

<bean class="org.eclipse.equinox.weaving.springweaver.EquinoxAspectsLoadTimeWeaver"/>

</property>

</bean>

然後您不需要使用-javaagent選項。

您可以在這裏找到使用JPA和EclipseLink的工作示例http://code.google.com/p/springdm-in-action/(請參閱第7章)。

0

我曾嘗試使用EquinoxAspectsLoadTimeWeaver到JPA上下文(與EclipseLink的),但它doen't如果您EquinoxAspectsLoadTimeWeaver bean聲明沒有完成到同捆比模型包變換模型類。

EquinoxAspectsLoadTimeWeaver變換類僅用於聲明EquinoxAspectsLoadTimeWeaver的包中存儲的類。

我試過http://code.google.com/p/springdm-in-action/的示例(請參閱第7章)(感謝此示例Lukasz)。 EquinoxAspectsLoadTimeWeaver的聲明避免出現錯誤

Caused by: java.lang.IllegalStateException: Cannot apply class transformer without LoadTimeWeaver specified 

但是模型類沒有被轉換(編織)。編入EclipseLink管理例如懶惰模式。例如,如果你設置到樣品模型聯繫懶模式是這樣的:

public class Contact { 

... 
    @Column(name="last_name") 
    @Basic(fetch=FetchType.LAZY) 
    private String lastName; 

,你會發現不會應用延遲加載,因爲型號接點類不塑身美體。

問候安傑洛

+0

我已經更新馬丁利珀特Springweaver捆綁管理JPA/EclipseLink的。請參閱http://angelozerr.wordpress.com/2010/04/30/springweaver_step1/ 你會發現Martin Lippert Springweaver的問題的解釋,我試圖解釋我如何修復它。 JPA/Eclipselink的樣本太多了,我會在另一篇文章中解釋。 Regards Angelo – Angelo 2010-04-30 07:17:53

相關問題