2012-09-14 17 views
9

Birden çok iş parçacığında tek bir JAXBContext nesnesini paylaşmanın JAXB kullanan bir uygulamanın CPU kullanımını büyük ölçüde azaltabileceğini okudum. Bunun bir kanıtı here. Şu anda web servisleri geliştirmek için Apache CXF kullanıyoruz. Apache CXF, JAXB'yi varsayılan olarak kullanmak zorundadır.Apache CXF, Yayılmayan bir yapılandırma dosyası üzerinden tek bir JAXBContext kullanmak için nasıl yapılandırılır?

  • this Apache'nin CXF bir konfigürasyon dosyasından JAXBContext tek bir örneği kullanmak üzere konfigüre edilebilir.
  • this uyarınca CXF'ye bir yapılandırma dosyası verebiliriz. Bu yapılandırma dosyası bir Spring yapılandırma dosyasıdır.
  • this'a göre, Apache CXF Yaysız olarak kullanılabilir. Ben Bahar olmadan servlet taşıma kullanan bir kod tabanı bakıyorum beri

Yukarıdaki bilgileri göz önüne alındığında, nasıl Apache CXF bir bahar tabanlı yapılandırma dosyası kullanmadan tek JAXBContext kullanmak yapılandırırım? JAXBContext için, performansı daha da artıracak başka yapılandırma parametreleri var mı?

+0

Sorunuzun cevabını buldunuz mu? – BST

cevap

0

Global JAXBContext tanımına dayalı olarak önerilen çözüm önerisini here deneyebilirsiniz, ancak jax-rs ile iyi oynayacağından emin değilim. bahar olmadan

Daha basit bir çözüm size tomee ile çalışıyorsanız, örneğin openejb-jar.xml dosyasını kullanarak, @Provider Kendi tanımlamak org.apache.cxf.jaxrs.provider.JAXBElementProvider uzanan ve CXF içinde kaydettikten olacaktır.

Sizin sağlayıcı gibi görünecektir:

@Provider 
public class MyJAXBElementProvider<T> extends JAXBElementProvider<T> { 
    public MyJAXBElementProvider() { 
    super(); 
    setSingleJaxbContext(true); 
    setExtraClass(...); 
    } 
} 

ve sevdiği webapp WEB-INF/openejb-jar.xml dosyasında kayıtlı olması gerekir:

<?xml version="1.0"?> 
<openejb-jar> 
    <pojo-deployment class-name="jaxrs-application"> 
    <properties> 
    cxf.jaxrs.providers = mypackage.MyJAXBElementProvider 
    </properties> 
    </pojo-deployment> 
</openejb-jar> 
İlgili konular