0

我正在使用Apache Geronimo应用程序服务器,我想在 Geronimo 中自定义队列,例如,所有请求都存储在应用程序服务器队列中,并一一释放。这意味着,应用程序服务器一次只处理一个请求。一旦前一个完成,下一个请求将被释放。我想这样设置。

我希望,你明白我在尝试什么。如果有人有任何疑问,请告诉我。

如果有人研究这个概念,建议我。

谢谢

4

1 回答 1

0

您需要将数据库线程池大小设置为 1(id it let's you),并将 Servlet 设置为单线程,但对队列没有任何保证,可能队列中的第二个在第一个之前,您为什么需要这样做吗?

另一种方式是每个请求都由一个 servlet 过滤器过滤,该过滤器从开始到结束响应锁定一个同步对象,这确保您没有任何其他线程会获取锁定并执行相同操作(至少对于 http 请求)

servlet单线程模式:

public class AloneServlet extends HttpServlet implements SingleThreadModel {
//....
}

the servlet filter approach
public final class HitCounterFilter implements Filter {
   private Object lock=new Object();
   //...
   public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)
      synchronized(lock){
      chain.doFilter(request, wrapper);
      }
   }
}

上面的两个示例是针对 http 请求的,您需要对 web 服务执行相同的操作,等等。

请告诉你为什么你想让你的服务器变成单线程,也许有更多更好的方法可用,我从不建议这些方法:)

方法二:
先编码过滤器代码

package com.stackoverflow.supportbuddy
import javax.servlet.*;
import javax.servlet.http.*;

// Implements Filter class
@ServletFilter(urlPatterns={"/pages/myJSP.jsp"})// for Java EE 6+
public class SyncFilter implements Filter  {
   public void  init(FilterConfig config)throws ServletException{}
   @Override
   private static Object lock=new Lock();
   @Override
   public void  doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws java.io.IOException, ServletException {
      //each thread needs to lock the "lock" object and this ensures you only one thread will be forwarded.
      synchronized(lock){
      chain.doFilter(request,response);
      }
   }
   @Override
   public void destroy( ){}
}

然后将过滤器映射到所需的 jsp 文件,例如,如果jsp文件位于/pages文件夹下,那么您需要将过滤器映射为 thisweb.xml或在较新版本的 Java EE 中使用注释

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
.....
    <filter>
       <filter-name>SycnFilter</filter-name>
       <filter-class>com.stackoverflow.supportbuddy.SyncFilter</filter-class>
    </filter>
    <filter-mapping>
       <filter-name>SycnFilter</filter-name>
       <url-pattern>/pages/myJSP.jsp</url-pattern>
    </filter-mapping>
.....
</web-app>

终于试一试了:)

于 2013-07-16T06:02:12.103 回答