Jersey Web服务中的单例变量

时间:2016-10-03 15:32:31

标签: rest jersey singleton jax-rs

我有一个基于 JAX-RS Jersey 的RESTful Web服务。我有一堆GET和POST方法,其中我需要" global"变量

我有一个使用 ServletContextListener 的初始化方法,它有一个contextInitialized-Method用于编写一些日志文件并执行其他操作。在这个方法中,我想声明我可以从我的应用程序中的任何地方访问的变量。

这是我的代码:

    @WebListener
    public class MyServletContextListener implements ServletContextListener {
//these are the variables I need in my other methods
        public String imagePath;
        public int entryCount;
        public int registeredUsers;
        public Connection connection;

        @Override
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            System.out.println("initialization of service stared");
            System.out.println("reading config...");

            Configuration config = ConfigManager.readConfig("../service_config.xml");
            this.imagePath = config.getImagePath();

            System.out.println("try to get databse connection");
            connection = ConnectionHelper.getConnection(config.getDbName(),
                                                        config.getDbPassword(),
                                                        config.getDbUser());

            System.out.println("database connection successful established");
            // here are some db actions...
        }

        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
            System.out.println("shutdown service");
        }
    }

例如: 在init,我读取一个配置文件,从数据库中计算一些统计数据,并从我的配置文件中读取一个目录的图像路径字符串。

当调用GET方法时,我想读取图像路径的String变量并将计数器增加1.

@Path("/entries")
public class EntryService {
@GET
    @Path("/images/{imageId}")
    @Produces({"image/png"})
    public Response getEntryImage(@PathParam("imageId") long imageId) {
        String filePath = <* HERE I NEED THE IMAGE PATH FROM INIT *>;
        File file = new File(filePath + imageId + ".png");

        if (file.exists()) {
            Response.ResponseBuilder response = Response.ok((Object) file);
            response.header("Content-Disposition", "attachment; filename=image_from_server.png");

            return response.build();
        } else {
            Response.ResponseBuilder response = Response.status(204);
            return response.build();
        }
    }
}

我怎么意识到这一点? (我读了一些关于EJB和Singleton-Annotation的内容,但没有让它工作)。

如果库或组件在我的pom.xml文件中需要一些额外的依赖项,请告诉我如何实现它。

0 个答案:

没有答案