2012-08-14 5 views
1

Apache Karaf 컨테이너에 두 개의 OSGi 번들이 배포되었습니다. 그들은 A와 B라고 말할 수 있습니다. A 번들은 모든 데이터베이스 엔티티와 퍼시스턴스 로직을 포함하는 메인 번들입니다. B OSGi 번들은 A의 메소드를 사용하여 일부 데이터를 데이터베이스에 저장하는 응용 프로그램입니다. 또한 번들 B에는 CXF 웹 서비스 엔드 포인트가 있습니다. 지속성은 OpenJPA에 의해 처리됩니다.OSGi 번들 간의 OpenJPA 지속성

번들의 메소드 A는 엔티티 관리자의 persist 메소드를 래핑합니다. 번들 B에는 번들 A에 정의 된 매개 변수로 객체를 가져 와서 데이터를 유지하는 메소드가 있습니다. 번들 B에서이 메서드를 호출하면 모두 정상입니다. 데이터는 예상대로 데이터베이스에 유지됩니다.

문제는 내가 스프링 빈으로 노출 및 I가 필요로하는 기업을 찾기 위해 find 문이 포함 된 번들 A로부터 객체에 OSGi 참조가되는 B 번들의 CXF 엔드 포인트 구현 클래스의 엔티티를 업데이트 할 것입니다 최신 정보.

find 메서드를 호출하면 엔티티가 올바르게 반환되지만 일부 새 값을 설정하면 트랜잭션이 커밋되지 않고 데이터가 데이터베이스에 나타나지 않습니다.

내가 알고 있듯이 OpenJPA 기능 중 하나는 객체에 대한 지속성을 호출 할 때 나중에 일부 새 데이터를 설정할 수 있으며 필요한 트랜잭션이 해당 엔티티를 업데이트하는 것입니다. 제 경우에는 효과가없는 것 같습니다. 나는 org.springframework.transaction.annotation.Transactional 어노테이션으로 CXF 엔드 포인트 구현 클래스에 주석을 달았다. 그러나 이것은 잘 작동하지 않습니다.

어쩌면 누군가가 문제가 될 수 있습니다. CXF 엔드 포인트에 내 엔티티를 업데이트하는 쿼리를 작성해야합니까?

+0

이 질문은 매우 어렵습니다. 어쩌면 예제 코드 나 다이어그램을 보여줄 수 있습니까? –

답변

0

이 경우에는 봄에서 청사진으로 전환하는 것이 좋습니다. 카라프에서 사용하는 aries 청사진 (예 :)을 보면 번들 A에서 DAO를 검색 할 수 있으며 번들 B에서 "변경 방법"을 호출하면 번들에 첨부 된 트랜잭션 관리자가 유지합니다 A.