Web服务JAX-RS多线程:传递信息

时间:2015-10-15 09:38:07

标签: java multithreading web-services jersey stateless

我使用这些配置构建基于JAX-RS的Web服务:

  • IDE: Eclipse
  • 构建: Maven
  • 部署: Tomcat
  • 使用 Jersey 1.8
  • 的Jax-RS注释
  • DB: mongoDB 3.0 ,带有java驱动程序(localhost)
  • 客户端:具有处理GET和POST方法的多个表单的HTML页面

实际上,该程序是使用jax-rs注释在java中围绕一个主servlet开发的。这是"切入点"为我的应用程序,以处理来自服务器的响应/请求。总体目标是实现一个包含多个html页面的Web项目,只能使用JAX-RS控制器。

由于用户以html格式发布的信息,我面临需求问题,但这些输入需要在同一主servlet的@GET方法中检索。 但是,应用程序不应使用静态参数检索用户的输入:它应该是STATELESS(要求),但仍然在多个线程之间共享信息。

如何在不使用静态内容(变量 userParamList )的情况下完成,如下所示?我想知道这个字段是否可以使用简单的get / set,但我知道Jax-RS线程是单独处理的,所以...... :(

@Path("/rest")
public class BackendApp 
{

    private static String[] defaultParamList = {"timestamp","plcVersion","udmVersion","iotVersion","deviceName","manufacturer","model","sdk","primitiveName","result","status"};
    private static String[] userParamList = {};
    private static ArrayList<Document> container;
    private static java.nio.file.Path javaNIOPath;
    private static MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
    private final MongoClient mongoClient;

    public BackendApp()
    {
         this(new MongoClient(connectionString));
    }

    @POST
    @Path("/postList") // FIRST pot that occurs at the beginning of this context (index.html at the root)
    @Produces("text/html")
    public Viewable getParamList(@FormParam("textarea") String textarea) throws IOException
    {
        userParamList = textarea.replaceAll("\\s*\\n\\s*","").split(","); //   REGEX expression filtering all the (multiple) blank spaces and carriage return
        return new Viewable("/query.html");
    } 

    @GET 
    @Path("/result")
    @Produces("text/html")
    public Response getHTML(@Context UriInfo uriInfo) throws IOException
    {
          MongoDatabase mongoDB = mongoClient.getDatabase("JSONRepository");
          MongoCollection<Document> coll = mongoDB.getCollection("TestColl");
          container = mongo.getParameters(userParamList, coll, queryParams);
          // userParamList is here static...

          // GET STUFF.....

    }
}

感谢您的所有答案。

PS:静态内容工作得很好......所以问题更多地集中在与泽西的 mulitple线程的问题上。

0 个答案:

没有答案