如何在REST服务中编写Web应用程序初始化代码?

3

你好,我正在使用Java中的JAX-RS Rest服务。我想要一段代码,在应用程序启动时只执行一次。该代码不应在每个请求上执行。我该如何做?

@Path("/xyz")
class RestService{
//do anything here will be executed on each request.
}

我正在使用Tomcat服务器。非常感谢您的帮助。
2个回答

3
这是使用上下文监听器的确切用例。请参见此文章,了解一个好的servlet上下文监听器示例。该文章展示了如何定义监听器以及如何将其连接到您的Web应用程序中。

我跟着那个链接,但遇到了一个问题。我正在使用Jersey,所以我该如何导入javax.servlet.ServletContextEvent和javax.servlet.ServletContextListener这些接口呢?因为它会报错说我无法导入ServletContextListener接口,因为它在那里不存在。 - Mr37037

1
你可以编写以下类来注册你的资源。在你的类的构造函数中,你可以调用任何初始化代码,并将该内容传递给你注册的每个资源的构造函数。
如果你想要针对每个资源都有不同的初始化代码,那么你可以在你的资源的构造函数中实现。在下面的示例中,我正在初始化 Hibernate 配置并将其传递给资源。
@ApplicationPath("/")
public class AppNameApplication extends Application{

private Set<Object> singletons=new HashSet<Object>();
private Set<Class<?>> empty=new HashSet<Class<?>>();
private final SessionFactory sessionFactory;

public AppNameApplication(){

    try{
        Configuration configuration=new Configuration();
        configuration.configure("hibernate.cfg.xml");
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
        this.sessionFactory=configuration.buildSessionFactory(serviceRegistry);

    }
    catch(Throwable ex){
        System.err.println("Initial SessionFactory creation failed."+ ex);
        throw new ExceptionInInitializerError(ex);
    }

    singletons.add(new Resource1(sessionFactory));
    singletons.add(new Resource2(sessionFactory));
    singletons.add(new Resource3(sessionFactory));

}

@Override
public Set<Class<?>> getClasses(){
    return empty;
}

@Override
public Set<Object> getSingletons(){
    return singletons;
}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接