2011-09-07 178 views
1

使用wsimport生成的WSDL和客户端代码非常大。因此,想要在jaxws中设置一个方法/设置,只加载必要的客户端类,而不是加载所有这些类,这需要大约10秒,而且消耗的堆也很大。 同样在使用不同的10个线程创建多个端口时,使用的内存很容易达到1.5G,并且出现内存不足错误。如何延迟加载jaxws客户端

如果我可以加载客户端存根对象,这将非常有帮助。

回答

0

您的问题无法以您期望的方式修复。 Java无论如何都会以懒惰的方式加载类,它不会与JAX-WS的行为不同,并且在您的特定情况下它不会有奇怪的表现。 JAX-WS中没有设置来改变某些内容并解决问题。

在我看来,你真正的问题是一个巨大的Web服务,无数的方法,参数,故障等,尽管我倾向于认为你的堆使用和内存不足的情况应归于其余的应用程序而不是JAX-WS客户端。

我认为你的解决方案是将你的一个巨大的Web服务分解为多个Web服务,按功能或其他概念进行分区。然后,你只会使用你真正需要的服务(和他们的客户)。

+0

感谢vagelis,这里的问题不是关于类加载,而是关于为每个线程完全加载的portType加起来的一大堆。是的,这是一个错误服务,当使用axis2时,我们没有遇到这个问题,因为它只在需要时加载portType对象。现在正在寻找一种不在JAXWS客户端中预先加载所有对象的方法。 – kiri

+0

这只是JAX-WS服务代理构造的方式:太多的相互关联的类。如果您比较JAX-WS和Axis的类数,该怎么办? – vagelis

+0

这两个类的计数可能相同,但这是一个问题,主要问题是需要多个portTypes(它们不是线程安全的),并且对于10个线程来说占用大量堆〜1gb。所以用50个线程运行需要〜5GB的堆,这是不可接受的:-( – kiri