Spring Integration解组变压器Jaxb2Marshaller性能值得关注

时间:2015-01-14 15:16:27

标签: java spring jaxb marshalling spring-integration

目前我们的应用程序没有利用spring集成提供的xml转换器。相反,它正在创建一个JaxbContext然后从该JaxbContext创建一个JAXB unmarshallers / marshallers池并将这些连接到服务激活器。我们创建游泳池,以免为每次操作产生编组和解散者的费用。

作为重新保理工作的一部分,我们决定应该使用xml变换器。在尝试实现时,我们发现org.spring.oxm.Marshaller实现不支持marshallers / unmarshallers的汇集,因为Spring集成的UnmarshallingTransformer期望并实现org.spring.oxm.Marshaller。当调用unmarshal方法时,org.spring.oxm.Marshaller的每个实现都会创建一个新的javax.xml.bind.Unmarshaller

最后,我已经为我的问题提供了足够的背景知识。是否为每个解组操作创建一个新的Unmarshaller而不是性能问题?根据{{​​3}},它确实会影响性能。作为一个反驳论点,jaxb项目jaxb ri documentation的领导者认为他们是轻量级的

2 个答案:

答案 0 :(得分:1)

可能一个好主意是将marshallers转移到java。使用Marshaller用于不同的对象和验证处理程序非常重,并且是吃怪物的最佳记忆之一。

答案 1 :(得分:0)

您可以安全地重用JAXBContext,但我从未见过保证MarshallerUnmarshaller实例是线程安全的和/或可重用的。

这实际上意味着您无法保证汇集marshallers / unmarshallers是安全的。这是汇集它们的充分理由。

我也怀疑这是一个很大的性能提升。 Marshallers / unmarshallers持有当前的编组/解组状态,因此通过重新使用marshallers / unmarshallers来节省很多钱。