我正在开发一个涉及JAX-RS(用于REST API)和Websocket(用于通知)的项目。该项目将作为WAR部署到应用程序服务器中。
对于JAX-RS,我执行以下操作:
@ApplicationPath("/")
public class MyApplicationREST extends ResourceConfig {
public MyApplicationREST() {
... initialization here ...
}
}
对于Websockets,我执行以下操作:
public class MyApplicationWebsockets implements ServerApplicationConfig {
... callbacks for discovery of endpoints here ...
}
部署WAR时,应用程序服务器(在我的情况下为Tomcat)可以完美地拾取这两个类,并在真空中正常工作。
但是,在这两个类中,我需要一个命令实例的引用(在这种情况下是数据库连接,但它可以是任何东西)。我无法在上面的两个类之一中实例化它(并在另一个类中使用它),因为不能保证两个类的初始化顺序。
这样做的最佳方式是什么?
答案 0 :(得分:1)
(1)创建一个实现ServletContextListener的类。
(2)用contextInitialized(ServletContextEvent)方法编写初始化代码。
public class MyContextListener implements ServletContextListener
{
@Override
public void contextInitialized(ServletContextEvent context)
{
// Your initialization code here.
}
@Override
public void contextDestroyed(ServletContextEvent context)
{
// Your finalization code here.
}
}
(3)在web.xml
注册班级作为听众。
<listener>
<listener-class>com.example.MyContextListener</listener-class>
</listener>
关于共享实例,单例模式是实现它的可能方法之一。
public class DB
{
private static final DB sInstance = new DB();
// Private constructor to prevent DB instances from being created by others.
private DB()
{
}
// Get the singleton instance.
public static DB getInstance()
{
return sInstance;
}
}