Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring4/Java 8/Weblogic 12-WorkManagerTaskExecutor.schedule导致StackOverflower错误的递归调用_Java_Spring_Weblogic_Workmanagertaskexecutor - Fatal编程技术网

Spring4/Java 8/Weblogic 12-WorkManagerTaskExecutor.schedule导致StackOverflower错误的递归调用

Spring4/Java 8/Weblogic 12-WorkManagerTaskExecutor.schedule导致StackOverflower错误的递归调用,java,spring,weblogic,workmanagertaskexecutor,Java,Spring,Weblogic,Workmanagertaskexecutor,我们已经将我们的企业软件从Java7迁移到Java8,并将Spring更新为4.3.4版。由于StackOverflower错误,其中一个bean无法初始化,因此部署失败: Caused By: java.lang.StackOverflowError at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204) at org

我们已经将我们的企业软件从Java7迁移到Java8,并将Spring更新为4.3.4版。由于StackOverflower错误,其中一个bean无法初始化,因此部署失败:

Caused By: java.lang.StackOverflowError
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.schedule(WorkManagerTaskExecutor.java:204)
如您所见,方法schedule()被递归调用,导致堆栈溢出。 该应用程序部署在Weblogic版本12.1.3上;以下是WorkManagerTaskExecutor.schedule()中的代码片段:

因此,这应该将调度调用委托给目标WorkManager对象。但是,根据我们的调试分析,WorkManagerTaskExecutor中的私有成员workManager已使用WorkManagerTaskExecutor类型的实例进行初始化,即当此.workManager.schedule(work)时;执行时,它将调用WorkManagerTaskExecutor.schedule(),导致递归调用

Weblogic的目标WorkManager在部署描述符中设置如下:


wm/MyWorkManager
公共工作经理
容器
可分享


wm/ODSCA工作经理
MaxThreads
1.
真的

在Spring应用程序上下文中:

<bean autowire="byType" id="taskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
            <property name="workManagerName" value="java:comp/env/wm/MyWorkManager"/>
            <property name="resourceRef" value="true"/>
        </bean> 

为什么WorkManagerTaskExecutor中的workManager再次使用WorkManagerTaskExecutor进行初始化,从而导致递归,我们已经完全没有想法了。社区能提供帮助吗

<resource-ref>
            <res-ref-name>wm/MyWorkManager</res-ref-name>
            <res-type>commonj.work.WorkManager</res-type>
            <res-auth>Container</res-auth>
            <res-sharing-scope>Shareable</res-sharing-scope>
        </resource-ref>
<work-manager>
    <name>wm/ODSCacheWorkManager</name>
    <max-threads-constraint>
        <name>MaxThreads</name>
        <count>1</count>
    </max-threads-constraint>
    <ignore-stuck-threads>true</ignore-stuck-threads>
</work-manager>
<bean autowire="byType" id="taskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
            <property name="workManagerName" value="java:comp/env/wm/MyWorkManager"/>
            <property name="resourceRef" value="true"/>
        </bean>