Tomcat的资源名称为JNDI样式

时间:2019-01-21 15:22:43

标签: java spring tomcat websphere jndi

我正在将一个非常庞大的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"也不起作用。 这甚至有可能克服吗?名字应该是什么?

1 个答案:

答案 0 :(得分:0)

它对我有用!

  1. applicationContext.xml
<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>
  1. 在Context.xml中
<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