我正在将一个非常庞大的Websphere 9应用程序转移到Tomcat 9。
应用程序中的一切都很好,除了一件事。
该应用程序通过有线bean使用了一个WorkManagerTaskExecutor:
@Bean
public WorkManagerTaskExecutor taskExecutor() {
WorkManagerTaskExecutor pool = new WorkManagerTaskExecutor();
pool.setWorkManagerName("someName");
//pool.setResourceRef(true);
return pool;
}在Websphere中,可能有一些资源是通过管理控制台配置的。
在Tomcat中,我在server.xml中创建了一个Resource
<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的变量重命名为JNDI风格,因为JndiLocatorSupport文档说:
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"也不起作用。这能克服吗?应该叫什么名字?
发布于 2020-09-14 14:42:06
它是为我工作的!
<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.jarhttps://stackoverflow.com/questions/54292971
复制相似问题