代码之家  ›  专栏  ›  技术社区  ›  Rafael Guillen

使用WorkManager在Jetty上实现编程并发

  •  6
  • Rafael Guillen  · 技术社区  · 8 年前

    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>
    

    我需要维护标准JNDI命名 java:comp/env/{RESOURCE} 明确地 java:comp/env/wm/MyWorkManager WEB-INF\jetty-env.xml 配置文件不工作。 有什么想法吗?

    更新: 我已经测试了 jetty-env.xml Jetty 9中的本地配置文件,并按预期工作。9以下版本 它没有得到充分支持。以下是配置文件内容:

    <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>
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Antho Christen    8 年前

    你查过了吗 this ,

    有时,在运行时将配置信息传递给您无法或无法方便地编码的web应用程序很有用 一张网。xml。在这种情况下,您可以使用 在web中使用相同的名称。xml。

    <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的虚拟env条目,其中包含 值4000,在整个JVM中是唯一的。在JNDI中输入 java:comp/env/mySpecialValue for 每一个 布尔参数表示该值覆盖env条目 在web中同名。xml。如果不想重写,请忽略 或将其设置为false。

    用于内部自定义文件中的资源 etc ,文件说明:

    假设以下命名条目位于 $JETTY_HOME/etc/jetty-myjndi.xml :

     <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 进入你的webapp的命名空间 java:comp/env/jdbc/myfoo 通过使用 WEB-INF/jetty-env.xml 文件:

       <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环境。调用 “bindToENC”方法和 上下文xml文件,后者不是 在webapp部署的正确阶段解释为 创建了java:comp/env命名空间。