프로젝트 용으로 Apache CXF를 평가 중이므로 몇 가지 시도를 해보기 위해 작은 데모 애플리케이션을 작성했습니다. CXF 사용자 가이드에 따라, 필자의 애플리케이션을 신속하게 실행할 수있었습니다.Apache CXF가 프리미티브를 객체 유형으로 변환하지 못하게하는 방법은 무엇입니까?
테스트하고 싶은 한 가지는 CXF가 다양한 프리미티브를 반환하는 메서드를 얼마나 잘 처리 할 수 있었는지입니다. 그래서 나는 방금 '임의의 숫자로 채워진 지정된 길이의 배열을 반환하는'float[] getRandFloats(int count)
'메서드를 정의했습니다. java2wsdl
에 의해 생성 된 WSDL을 보면, 메서드가 올바르게 반환 유형 float[]
을 나타내는 것을 볼 수 있습니다. 클라이언트 측을 살펴보면, 나는 또한 궁극적으로 float[]
을받는 것을 알 수 있습니다.
배열의 요소 수가 늘어남에 따라 클라이언트 성능이 저하되는 것으로 나타났습니다. 클라이언트 측에서 프로파일 러를 실행하고 리턴 된 배열의 모든 요소에 대해 Float
오브젝트가 작성되었음을 확인했습니다. CXF가 응답을 파싱하는 동안 JAXB를 호출 할 때 이것이 발생하는 것 같습니다.
수백만 개의 부동 소수점을 돌려 보낼 가능성이있는 응용 프로그램에서 사용하기 위해 CXF를 평가 중이므로이 개체 생성이 매우 바람직하지 않습니다. CXF를 사용하려면이 객체 생성을 방지하는 방법을 찾아야합니다. 문서와 메일 링리스트를 살펴 보았지만이 문제를 해결할 방법이 없었습니다.
누구나 CXF를 사용하여 비슷한 문제가 발생 했습니까? 그렇다면 어떻게이 문제를 해결 했습니까?
JVM이 상당히 개선되었지만 불필요한 개체 생성이 여전히 "무료"가 아니라는 데 동의합니다. 적어도이 문제를 내가 경험 한 성능 저하의 원인으로 간주하고 싶습니다. CXF가 완벽하게 받아 들여질 수있는 이런 종류의 사용을 위해 설계되지 않았을 가능성이 있습니다. 사용을 배제하기 전에 CXF에 대한 지식이 많은 사람이 주제에 무게를 달기를 바랍니다. –
무료는 아니지만 JVM은 필요할 때 처음으로 새로운 객체를 생성 한 다음 필요에 따라 객체를 다시 생성합니다. 원하는 경우이 객체를 원인으로 간주하면 호출을 여러 번 실행하고 시간이 걸릴지 확인합니다 때마다 또는 상황이 개선되는 경우 동일합니다. – skaffman