2015-01-14 92 views
0

目前我們的應用程序沒有利用spring集成提供的xml變換器。相反,它將創建一個JaxbContext,然後從該JaxbContext創建一個JAXB unmarshallers/marshallers池並將其連接到服務激活器中。我們創建了游泳池,以避免爲每個操作創建marshallers和unmarshallers的成本。Spring Integration unmarshalling變換器Jaxb2Marshaller性能問題

作爲重新分解努力的一部分,我們決定我們應該使用xml變換器。在嘗試實現時,我們發現org.spring.oxm.Marshaller實現不支持彙集marshalers/unmarshallers,因爲Spring集成的UnmarshallingTransformer期望和實現org.spring.oxm.Marshaller。當調用解組方法時,org.spring.oxm.Marshaller的每個實現都會創建一個新的javax.xml.bind.Unmarshaller。

最後,我已經爲我的問題提供了足夠的背景。是否爲每個解組操作創建一個新的Unmarshaller而不是性能問題?根據jaxb ri documentation它確實會影響性能。作爲一個相反的觀點上JAXB項目states,他們是輕量級的鉛

+0

似乎你已經回答了你自己的問題 - YMMV。謹防過早優化。 –

+0

@closer這不是基於意見的。 – lexicore

回答

0

您可以放心地重用JAXBContext,但我從來沒有見過保證MarshallerUnmarshaller實例是線程安全的和/或可重複使用。

這實際上意味着您無法保證彙集marshallers/unmarshallers是安全的。這將是一個充分的理由而不是來彙集它們。

我也懷疑這是一個很大的性能增益。 Marshalers/unmarshallers擁有當前的編組/解組狀態,因此通過重複使用marshallers/unmarshallers可以節省很多。

1

也許,一個好主意是將marshallers移動到java。對不同的對象和驗證處理程序使用Marshaller非常沉重,並且是吃怪物的頂級記憶之一。