我设法将 CommonJ - JSR 237 Timer & WorkManager API ( http://commonj.myfoo.de )的自定义实现配置为JNDI
Jetty 6 和 8 上的资源,但它只能在全局范围内工作。
使用这个JNDI
资源的解决方案名称是wm/WorkManager
,我需要它java:comp/env/wm/WorkManager
,但由于限制,我不能java:comp/env
在全局 JNDI 名称中使用,因为它保留给应用程序范围的资源。
我创建了一个名为{jetty.home}/etc/jetty-wtm.xml
并添加到{jetty.home}/start.ini
.
这是jetty-wtm.xml
Jetty 6 的内容,对于更大的版本,它有点不同,但也可以:
<!-- =============================================================== -->
<!-- Configure Server Time and Work Managers -->
<!-- =============================================================== -->
<Configure id="Server" class="org.mortbay.jetty.Server">
<New id="WorkManager" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>wm/WorkManager</Arg>
<Arg>
<New class="de.myfoo.commonj.work.FooWorkManager">
<Arg>
<New id="threadPool" class="de.myfoo.commonj.util.ThreadPool">
<Arg type="int">0</Arg>
<Arg type="int">10</Arg>
<Arg type="int">2</Arg>
</New>
</Arg>
</New>
</Arg>
</New>
<New id="TimeManager" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>tm/TimeManager</Arg>
<Arg>
<New class="de.myfoo.commonj.timers.FooTimerManager">
<Arg>
<New id="threadPool" class="de.myfoo.commonj.util.ThreadPool">
<Arg type="int">0</Arg>
<Arg type="int">10</Arg>
<Arg type="int">2</Arg>
</New>
</Arg>
</New>
</Arg>
</New>
</Configure>
我需要java:comp/env/{RESOURCE}
专门java:comp/env/wm/MyWorkManager
跨服务器维护标准 JNDI 命名,但标准WEB-INF\jetty-env.xml
配置文件不起作用。有任何想法吗?
更新:我已经jetty-env.xml
在 Jetty 9 中测试了本地配置文件,它按预期工作。似乎在低于 9JNDI
的版本中它不完全受支持。以下是配置文件内容:
<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="WorkManager" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg><Ref id="wac"/></Arg>
<Arg>wm/MyWorkManager</Arg>
<Arg>
<New class="de.myfoo.commonj.work.FooWorkManager">
<Arg>
<New id="threadPool" class="de.myfoo.commonj.util.ThreadPool">
<Arg type="int">0</Arg>
<Arg type="int">10</Arg>
<Arg type="int">2</Arg>
</New>
</Arg>
</New>
</Arg>
</New>
</Configure>