Raf*_*len 6 java jndi jetty commonj workmanagers
我设法将CommonJ-JSR 237 Timer&WorkManager API(http://commonj.myfoo.de)的自定义实现配置为JNDIJetty 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.xmlJetty 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>
Run Code Online (Sandbox Code Playgroud)
我需要java:comp/env/{RESOURCE}专门针对java:comp/env/wm/MyWorkManager服务器标准的JNDI命名,但标准WEB-INF\jetty-env.xml配置文件不起作用.有任何想法吗?
更新:我已经测试了jetty-env.xmlJetty 9中的本地配置文件,它按预期工作.它似乎在9以下JNDI的版本中并不完全支持.这是配置文件内容:
<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>
Run Code Online (Sandbox Code Playgroud)
你检查过这个吗?
有时,在运行时将配置信息传递给您无法或无法方便地编码到 web.xml 中的 Web 应用程序很有用。在这种情况下,您可以使用 org.eclipse.jetty.plus.jndi.EnvEntry,甚至可以覆盖 web.xml 中的同名条目。
Run Code Online (Sandbox Code Playgroud)<New class="org.eclipse.jetty.plus.jndi.EnvEntry"> <Arg></Arg> <Arg>mySpecialValue</Arg> <Arg type="java.lang.Integer">4000</Arg> <Arg type="boolean">true</Arg> </New>此示例定义了一个名为 mySpecialValue 的虚拟环境条目,其值为 4000,该条目在整个 JVM 中是唯一的。对于部署的每个Web 应用程序,它都会放入位于 java:comp/env/mySpecialValue 的 JNDI 中。此外,布尔参数指示该值覆盖 web.xml 中同名的 env-entry。如果您不想覆盖,请忽略此参数,或将其设置为 false。
对于内部自定义文件中的资源etc,文档指出
假设以下命名条目位于
$JETTY_HOME/etc/jetty-myjndi.xml:Run Code Online (Sandbox Code Playgroud)<New id="jdbc/myds" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg></Arg> <Arg>jdbc/myds</Arg> <Arg> <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"> <Set name="Url">jdbc:mysql://localhost:3306/chat</Set> <Set name="User">root</Set> <Set name="Password">sillyness</Set> </New> </Arg> </New>然后你可以像使用文件一样链接
jdbc/myds到你的 web 应用程序的命名空间 :java:comp/env/jdbc/myfooWEB-INF/jetty-env.xmlRun Code Online (Sandbox Code Playgroud)<Call class="org.eclipse.jetty.plus.jndi.NamingEntryUtil" name="bindToENC"> <Arg></Arg> <!-- scope of naming entry, ie same as first argument to your naming entry definition, in this case, null --> <Arg>jdbc/myfoo</Arg> <Arg>jdbc/myds</Arg> </Call>请注意,您必须使用 WEB-INF/jetty-env.xml 文件来调用“bindToENC”方法,而不是上下文xml 文件,因为后者不会在 web 应用程序部署的正确阶段被解释为具有 java:comp /env 命名空间已创建。
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |