我正在将一个非常庞大的Websphere 9
应用程序移至Tomcat 9
。
除了一件事,应用程序中的所有内容都可以正常工作。
该应用通过有线bean使用了WorkManagerTaskExecutor
:
@Bean
public WorkManagerTaskExecutor taskExecutor() {
WorkManagerTaskExecutor pool = new WorkManagerTaskExecutor();
pool.setWorkManagerName("someName");
//pool.setResourceRef(true);
return pool;
}
在Websphere中,可能通过管理控制台配置了一些资源。
在Tomcat
中,我在Resource
中创建了一个server.xml
:
<Resource name = "someName"
auth = "Container"
type = "commonj.work.WorkManager"
factory = "de.myfoo.commonj.work.FooWorkManagerFactory"
minThreads = "1"
maxThreads = "25" />
和context.xml
中的链接:
<ResourceLink name="someName" global="someName" type="commonj.work.WorkManager" />
错误:
javax.naming.NameNotFoundException:名称[someName]未绑定 此上下文。
现在,如果我启用此行:
pool.setResourceRef(true);
它可以正常工作,但是我不想在代码中进行任何修改。
我已经尝试将两个.xml configs的变量重命名为JNDI风格,因为JndiLocatorSupport documentation表示:
If the name doesn't begin with "java:comp/env/", this prefix is added if "resourceRef" is set to "true".
但是name="java:comp/env/someName"
也不起作用。
这甚至有可能克服吗?名字应该是什么?
答案 0 :(得分:0)
它对我有用!
<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- Refer your trigger beans -->
<ref bean="cronDeleteSynchronizationTrigger" />
</list>
</property>
<property name="dataSource" ref="schedulerDataSource" />
<property name="configLocation" value="classpath:quartz.properties" />
<property name="taskExecutor" ref="taskExecutor" />
</bean>
<bean id="taskExecutor"
class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="java:comp/env/wm/someName" />
<property name="resourceRef" value="true" />
</bean>
<Context>
<Resource name = "wm/someName"
auth = "Container"
type = "commonj.work.WorkManager"
factory = "de.myfoo.commonj.work.FooWorkManagerFactory"
minThreads = "1"
maxThreads = "5"
/>
</Context>
3)我还添加了类似的罐子
commonj-1.1.0.jar
aktivecortex-foo-commonj-1.3.0.jar
slf4j-api-1.7.25.jar