Настройка диспетчера таймера CommonJ в Websphere
В Web.xml у меня есть:
<resource-ref>
<res-ref-name>java:/comp/env/tm/TimerManager</res-ref-name>
<res-type>commonj.timers.TimerManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>
В коде Java у меня есть:
TimerManager tm = (TimerManager) ic.lookup("tm/TimerManager");
tm.schedule(new CleanupListener(), 0, 10*1000); // CleanupListener class is my TimerListener
Поэтому, когда я запускаю код, таймер срабатывает успешно, но сразу после сбоя кода со следующим исключением:
javax.naming.ConfigurationException: NamingManager.getURLContext не может найти фабрику для этой схемы: java
Понятия не имею почему. когда я изменяю поиск с этим: TimerManager tm = (TimerManager) ic.lookup("java:/comp/env/tm/TimerManager");
Это еще хуже, таймер никогда не срабатывает, и у меня есть следующее исключение: db.common.util.ServiceLocatorException: javax.naming.ConfigurationException: NamingManager.getURLContext не может найти фабрику для этой схемы: java
Пожалуйста, помогите, очень важно. Спасибо
3 ответа
Вы вернули правильный синтаксис.
Внутри web.xml:
<res-ref-name>tm/TimerManager</res-ref-name>
В исходном коде:
ic.lookup("java:comp/env/tm/TimerManager")
Попробуйте использовать
java:comp/env/tm/TimerManager
на месте
java:/comp/env/tm/TimerManager
Если это не поможет пожалуйста, опубликуйте полный дескриптор развертывания и файл привязок (web.xml и ibm-web-bnd.xml или ibm-web-bnd.xmi), чтобы убедиться в правильности конфигурации в этих файлах.
Спасибо за размещение файлов. Я думаю, что проблема в том, что web.xml версии 3.0 не совместим с ibm-web-bnd.xmi. Попробуйте использовать web.xml версии 3.0 с ibm-web-bnd.xml или использовать более раннюю версию web.xml с ibm-web-bnd.xmi.
Вот файл web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>testApp</display-name>
<welcome-file-list>
<welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
</servlet>
<listener>
<listener-class>
or.tc.pack.context.listener.TestWebContextListener
</listener-class>
</listener>
<!-- The master configuration file for this Spring web application -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/context/testway/webApplication-config-local.xml
</param-value>
</context-param>
<!-- Loads the Spring web application context -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/services/eng/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/services/fra/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>480</session-timeout>
</session-config>
<resource-ref id="ResourceRef_1288099140976">
<description>
Business Update queue</description>
<res-ref-name>jms/ZZZZ_ZZ_ZZZZ_BUS_UPD</res-ref-name>
<res-type>javax.jms.Queue</res-type>
<res-auth>Application</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref>
<description>
</description>
<res-ref-name>java:comp/env/tm/TimerManager</res-ref-name>
<res-type>commonj.timers.TimerManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>
</web-app>
Вот ibm-web-bnd.xmi:
<?xml version="1.0" encoding="UTF-8"?>
<webappbnd:WebAppBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:webappbnd="webappbnd.xmi" xmi:id="WebAppBinding_1263831088044">
<webapp href="WEB-INF/web.xml#WebApp_ID"/>
<resRefBindings xmi:id="ResourceRefBinding_1288099140976" jndiName="customs/commercial/tal/jms/ZZZZ_ZZ_ZZZZ_BUS_UPD">
<bindingResourceRef href="WEB-INF/web.xml#ResourceRef_1288099140976"/>
</resRefBindings>
</webappbnd:WebAppBinding>