首页 > 解决方案 > Maven 设置为忽略 `wsdl2java` 这是否会导致 Wildfly 在部署时出现高内存和慢启动?

问题描述

我正在开发https://github.com/CONNECT-Solution/CONNECT的(目前是私有的)分支

我观察到它至少Xmx=2g需要启动,即便如此,它也需要 6-8GB 才能在任何合理的时间内启动。

我在启动过程中进行了堆转储,并在堆上观察了以下类,这JAXBContextImpl似乎很重要: CONNECT 的堆转储

当以低值运行时,XmxXmx=512m会收到如下错误:

23:28:42,607 INFO  [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] (MSC service thread 1-2) Loading XML bean definitions from class path resource [CONNECT-context.xml]
23:31:05,802 WARN  [org.springframework.web.context.support.XmlWebApplicationContext] (MSC service thread 1-3) Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'AdapterMpiService': Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: Java heap space
23:31:05,824 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./Adapter/PatientDiscovery/A_0: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./Adapter/PatientDiscovery/A_0: Failed to start service
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_191]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_191]
    at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_191]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'AdapterMpiService': Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: Java heap space
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1572)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.apache.cxf.transport.servlet.CXFServlet.createSpringContext(CXFServlet.java:151)
    at org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:74)
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(CXFNonSpringServlet.java:77)
    at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117)
    at org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:79)
    at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:103)
    at io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:220)
    at io.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:125)
    at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:509)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:88)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:72)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
    ... 3 more

我认为正在发生的是应用程序在部署时生成 web 服务。我想在编译时生成那些。

我看到这wsdl2java似乎在https://github.com/CONNECT-Solution/CONNECT/blob/CONNECT_integration/Product/Production/pom.xml被禁用:

<pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.apache.cxf</groupId>
                                        <artifactId>cxf-codegen-plugin</artifactId>
                                        <versionRange>[2.6.0,)</versionRange>
                                        <goals>
                                            <goal>wsdl2java</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore />
                                    </action>
                                </pluginExecution>

我还在https://github.com/CONNECT-Solution/CONNECT/blob/CONNECT_integration/Product/Production/Common/Properties/pom.xml中看到cxf-codegen-plugin跳过:

        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>

问题:

  1. 启动时的缓慢和高内存使用是由 web 服务生成引起的吗?
  2. 是否会在部署时重新启用wsdl2java和/或cxf-codegen-plugin提高速度或内存利用率?
  3. 通过在编译时而不是部署时构建这些 Web 服务,我是否会将任何动态特性置于风险之中?

标签: javamavenjaxbcxfwsdl2java

解决方案


推荐阅读