java - jax-rs(rest api)和 websockets 的组合 - 在哪里放置公共(public)初始化

标签 java tomcat websocket initialization jax-rs

我正在开发一个涉及 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)完美地拾取。

然而,在这两个类中,我都需要一个命令实例的引用(在本例中是数据库连接,但它可以是任何东西)。我无法在上面两个类之一中实例化它(并在另一个类中使用它),因为无法保证这两个类的初始化顺序。

执行此操作的最佳方法是什么?

最佳答案

初始化

(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;
    }
}

关于java - jax-rs(rest api)和 websockets 的组合 - 在哪里放置公共(public)初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33109707/

相关文章:

java - tomcat 应用程序服务器中的内存缓存?

node.js - io.emit 和 io.sockets.emit 有什么区别?

Nginx TCP (WebSockets) 超时/保持连接配置

java - 如何使用 System.currentTimeMillis() 在某个时间执行一个方法?

java - 避免 Java 正则表达式灾难性回溯

java - SQL 语句应该返回 2 行,但只返回 1 行

java - Tomcat JMX - 连接到服务器但找不到我想要的 MBean

java - 在 Quartz 调度程序中触发失火

java - 无法将 Drools 6.x Workbench 部署到 Windows 中的 tomcat - 没有使用 uniqueName 'jdbc/jbpm' 注册的资源

java - WebSocket握手时出错: Unexpected response code: 404 WrappedWebSocket @ VM222:161