目前我们的应用程序没有利用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的领导者认为他们是轻量级的
答案 0 :(得分:1)
可能一个好主意是将marshallers转移到java。使用Marshaller用于不同的对象和验证处理程序非常重,并且是吃怪物的最佳记忆之一。
答案 1 :(得分:0)
您可以安全地重用JAXBContext
,但我从未见过保证Marshaller
和Unmarshaller
实例是线程安全的和/或可重用的。
这实际上意味着您无法保证汇集marshallers / unmarshallers是安全的。这是不汇集它们的充分理由。
我也怀疑这是一个很大的性能提升。 Marshallers / unmarshallers持有当前的编组/解组状态,因此通过重新使用marshallers / unmarshallers来节省很多钱。