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

时间:2014-09-07 17:09:46

标签: java rest tomcat java-ee jax-rs

您好我在java中使用JAX-RS的Rest服务。我想要一段代码,应该在应用程序启动时只执行一次。不应该在每个请求上执行该代码。我怎么能这样做?

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

我正在使用tomcat服务器。任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:3)

这是上下文侦听器的确切用例。有关servlet上下文侦听器的一个很好的示例,请参阅this article。本文将介绍如何定义侦听器以及如何将其连接到Web应用程序中。

答案 1 :(得分: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;
}
}