如何配置实现SingleThreadModel的servlet的最大池大小?

时间:2011-07-27 20:53:54

标签: java tomcat servlets tomcat5.5

我遇到的问题是SingleThreadModel servlet的最大池大小在Tomcat 5.5上,限制为20个实例。我不知道在Tomcat 5.5中配置它的位置。

我的HTTP连接器声明如下:

<Connector port="8090" maxHttpHeaderSize="8192"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="100"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" />

你知道我可以在哪里配置吗?

1 个答案:

答案 0 :(得分:4)

据我所知,这不是由XML配置的。

然而,StandardWrapper#setMaxInstances()可以通过编程方式进行配置。您可以在实现init()的servlet的SingleThreadModel方法中执行此操作。我在Tomcat 7上测试了它,它工作正常。

@Override
public void init() throws ServletException {
    try {
        Field wrappedConfig = StandardWrapperFacade.class.getDeclaredField("config");
        wrappedConfig.setAccessible(true);
        StandardWrapper standardWrapper = (StandardWrapper) wrappedConfig.get(getServletConfig());
        standardWrapper.setMaxInstances(100);
    } catch (Exception e) {
        throw new ServletException("Failed to increment max instances", e);
    }
}

理论上,这只适用于您无法控制的Tomcat实例,并且可能对特定类具有一些限制性访问策略。