2009-10-27 6 views
2

EclipseLink JPA를 Spring dm Server OSGi 환경에서 작동 시키려고하고있다. 봄 엔터프라이즈 번들 저장소에서 다운로드Spring dm Server 1.x에서 EclipseLink JPA를 사용할 때의 Aspectj로드 시간 단축 문제

관련 프레임 워크와 라이브러리는 다음과 같습니다

  • DM 서버 1.0.2.SR02
  • 의 AspectJ 런타임 1.6.3
  • AspectJ를 위버 1.6.3
  • 봄 프레임 워크 2.5.6.A
  • Eclipse 지속성 1.1.0
  • Javax 지속성 API 1.99.0

필자는예제에서와 동일한 구조를 따라 EclipseLink JPA를 설정했습니다. lazy-fetching이 가능할 때까지 (프록시가있는 객체가 필요합니다) 모든 것이 작동합니다.

지연 수신을 사용하도록 설정하면 다음 오류는로드 시간이 제대로 작동하지 않음을 나타냅니다.

---- (가독성 절단)

예외 [EclipseLink가 60 (이클립스 지속성 서비스 - 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 [고객] 디스크립터 : RelationalDescriptor (net.fractech.fds. backoffice.J OB ->


이것은 _persistence_getcustomer_vh() 및 _persistence_setcustomer_vh() 메소드는 자동으로 작업 영역 객체로 직조되지 않았 음을 나타낸다 [DatabaseTable (JOBS)]). 로드 시간 직물이 실제로 작동하는지

질문

1.)는 어떻게 확인합니까; 또한 에이전트와 위버를 짜는 데 사용되는 로딩 시간을 기록하는 방법은 무엇입니까? 디버깅 정보를 출력하도록 스위치를이 위버에게 어떻게 전달합니까? 많은 검색 내가 전달해야하지 않는 것이 밝혀졌다)/>

2. "을"=로드 타임 위버 AspectJ를 짜기 :

은 내가 < 컨텍스트에로드 시간 직물을 시작 가정 dm Server 사용시 jvm에 대한 -javaagent 매개 변수. 이 올바른지?

3.) 다른 번들의 내 도메인 객체가 com.springsource.org.eclipse.persistence; version = "[1.1.0,1.1.0]"을 지정하여 Eclipse 지속성 클래스에 액세스 할 수 있음을 확신합니다. import-scope : = eclipselink 번들에있는 응용 프로그램이며 PAR 내의 모든 응용 프로그램 번들을 포함합니다. Spring dm Server에서 EclipseLink JPA를 활성화하는 데 필요한 다른 구성이 있습니까?

답변

2

비슷한 문제가있었습니다. 먼저 작동하지 않으면 eclipselink.weaving.lazy = false 또는 eclipselink.weaving = false로 설정해보십시오. 나는 후자를 설정해야했다.

내가 당신에게 적용되는지 확인하기 위해 사용하고있는 설정을 참조하려면 내 사이트에 관한 게시물이 있습니다.

1

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

...

<property name="loadTimeWeaver">

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

</property>

춘분 흔들며 Springwaver를 사용하는 것이 좋습니다

</bean>

그런 다음 -javaagent 옵션을 사용할 필요가 없습니다.

JPA 및 EclipseLink의 작업 예제는 여기 http://code.google.com/p/springdm-in-action/ (7 장 참조)에서 확인할 수 있습니다.

0

EquinoxAspectsLoadTimeWeaver를 JPA 컨텍스트 (EclipseLink)에 사용하려고했지만 EquinoxAspectsLoadTimeWeaver bean 선언이 Model 번들과 동일한 번들로 완료되지 않은 경우 모델 클래스를 변환하지 않습니다.

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에서 관리합니다. 예를 들어이 같은 샘플 모델 연락 게으른 모드로 설정 한 경우 : 모델 연락 클래스가 wowen되지 않기 때문에

public class Contact { 

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

는 당신이 게으른 로딩이 적용되지 않습니다 알 수 있습니다.

감사 안젤로는

+0

마틴 Lippert의 Springweaver는 JPA /는 EclipseLink를 관리하는 번들 업데이트되었습니다. http://angelozerr.wordpress.com/2010/04/30/springweaver_step1/ Martin Lippert Springweaver의 문제에 대한 설명을 찾을 수 있으며 해결 방법을 설명하려고 노력했습니다. JPA/Eclipselink의 샘플이 너무 있습니다. 다른 게시물에 설명하겠습니다. 안부 인사 – Angelo