2014-03-06 2 views
2

웹 서비스 (CXF로 완료)에서 반환 할 수있는 2500 가지 가능한 Java 클래스가있는 응용 프로그램이 있습니다.
문제는 2500 클래스의 JAXB 컨텍스트를 만드는 데 오랜 시간과 많은 메모리가 필요하지만 대부분의 시나리오에서는 실제로 200 클래스 만 필요하다는 것입니다. 내가 원하는 것은 클래스가 필요할 때까지 모든 코드 생성 작업을 지연시켜 필요한 클래스에만 지연 처리를 수행하는 것을 알고있는 JAXB 컨텍스트입니다.
현재 구현은 지원하지 않지만 확장하고 싶습니다.
누군가가 가능한 후크 또는 좋은 출발점을 알고 있다면 좋을 것입니다.
또 다른 요점은 엔진이 어느정도 확장 될 수 있는지, moxy 또는 metro입니다. 다음과 같이 사전에 감사합니다,
애브너 EclipseLink JAXB (MOXy)JAXB 클래스의 지연 처리

+0

나의 무지 미안하지만 당신은 정적 클래스를 생성하는 (이클립스 웹 서비스 클라이언트 마법사를 사용하여 같은) 또는 dinamically (예 : http://cxf.apache.org/docs/dynamic-clients.html)? – Leo

+1

모든 2500 클래스가 정적으로 (손으로 쓰는) @Leo –

답변

1

당신은 기본 메타 데이터를 초기화 지연을 사용하려면 SESSION_EVENT_LISTENER 속성을 사용할 수 있습니다 :

import java.util.*; 
import javax.xml.bind.JAXBContext; 
import org.eclipse.persistence.descriptors.ClassDescriptor; 
import org.eclipse.persistence.jaxb.JAXBContextProperties; 
import org.eclipse.persistence.oxm.XMLDescriptor; 
import org.eclipse.persistence.sessions.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     Map<String, Object> properties = new HashMap<String, Object>(); 
     properties.put(JAXBContextProperties.SESSION_EVENT_LISTENER, new SessionEventAdapter() { 

      @Override 
      public void preLogin(SessionEvent event) { 
       for(Map.Entry<Class, ClassDescriptor> entry : event.getSession().getProject().getDescriptors().entrySet()) { 
        XMLDescriptor a; 
        ((XMLDescriptor) entry.getValue()).setLazilyInitialized(true); 
       } 
      } 

     }); 
     JAXBContext jc = JAXBContext.newInstance(new Class[] {Root.class}, properties); 
    } 

} 

JAXB 프로 참조 구현이 비슷한 속성을 가지고있는 내가 할 수있는 ' 지금 찾으십시오. 답변 당신이 자신의 메일 링리스트에 질문을 게시 할 수없는 하나의 게시물 경우 :

+1

Blaise. 서버 실행 사이에 전체 JAXB 컨텍스트 데이터를 캐시하고 싶기 때문에 클래스를 전혀 스캔 할 필요가 없습니다. 그런 기능을 Moxy를 위해 개발할 수 있습니까? (나는 그것을 할 생각이지만, 시작하기 전에 가능하다는 것을 알고 싶었습니다.) @Blise Doughan –