2012-09-14 17 views
9

Tôi đã đọc rằng việc chia sẻ một đối tượng JAXBContext duy nhất trên nhiều luồng có thể làm giảm đáng kể việc sử dụng CPU của một ứng dụng sử dụng JAXB. Bằng chứng về điều này là here. Chúng tôi hiện đang sử dụng Apache CXF để phát triển các dịch vụ web. Apache CXF bị ràng buộc sử dụng JAXB theo mặc định.Cách định cấu hình Apache CXF để sử dụng một JAXBContext duy nhất thông qua tệp cấu hình không phải mùa xuân?

  • Theo this, Apache CXF có thể được định cấu hình để sử dụng một phiên bản JAXBContext thông qua tệp cấu hình.
  • Theo số this, chúng tôi có thể cung cấp tệp cấu hình cho CXF. Tệp cấu hình này là tệp cấu hình Spring.
  • Theo this, Apache CXF có thể được sử dụng mà không cần Spring.

Với thông tin trên, làm cách nào để định cấu hình Apache CXF để sử dụng JAXBContext duy nhất mà không sử dụng tệp cấu hình dựa trên Spring vì tôi đang xem cơ sở mã sử dụng giao thức servlet không có Spring? Có bất kỳ thông số cấu hình nào khác có thể được thêm vào cho JAXBContext để cải thiện hiệu suất hơn nữa không?

+0

Bạn đã tìm thấy câu trả lời cho câu hỏi của bạn? – BST

Trả lời

0

Bạn có thể thử giải pháp được đề xuất here, dựa trên định nghĩa của Global JAXBContext, nhưng tôi không chắc chắn nó sẽ hoạt động tốt với jax-rs.

Một giải pháp đơn giản mà không mùa xuân sẽ được xác định riêng bạn @Provider, mở rộng org.apache.cxf.jaxrs.provider.JAXBElementProvider, và đăng ký nó trong CXF, sử dụng file openejb-jar.xml ví dụ, nếu bạn đang làm việc với tomee.

cung cấp dịch vụ của bạn sẽ trông giống như:

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

và nó sẽ cần phải được đăng ký trong file WEB-INF/openejb-jar.xml trong webapp của bạn như:

<?xml version="1.0"?> 
<openejb-jar> 
    <pojo-deployment class-name="jaxrs-application"> 
    <properties> 
    cxf.jaxrs.providers = mypackage.MyJAXBElementProvider 
    </properties> 
    </pojo-deployment> 
</openejb-jar> 
Các vấn đề liên quan