如何在 Apache Tomcat 启动中创建单例

2024-03-20

我需要在 Apache Tomcat 启动时创建一个单例,以便我可以使用 servlet 访问它们。单例定义 servlet 将给出什么响应。

我想知道 tomcat 是否有构造函数,以便我可以添加代码以便创建单例。

*编辑:经过一番搜索,我发现我可以尝试使用网络服务(JAX-WS)。 我不知道 jvm 如何处理 Web 服务中的实例。我可以通过与 WS 的不同连接访问同一对象吗?

我使用 bmargulies 解决方案将这些资源添加到web.xml描述符:

<resource-env-ref>
  <description>
     Factory for the Arduino Connection
  </description>
  <resource-env-ref-name>
     arduino/ArduinoConnectionFactory
  </resource-env-ref-name>
  <resource-env-ref-type>
     br.com.evans.jndi.basic.ArduinoConnection
  </resource-env-ref-type>
</resource-env-ref>

这对上下文.xml:

<Context>
  <Resource name="arduino/ArduinoConnectionFactory" auth="Container"
        type="br.com.evans.jndi.basic.ArduinoConnection"
        factory="br.com.evans.jndi.basic.ArduinoConnectionFactory"/>
</Context>

创建单例类:

public enum ArduinoConnection implements SerialPortEventListener {
    INSTANCE;
    public void initialize() {...}
}

创建了单例“工厂”:

public class ArduinoConnectionFactory implements ObjectFactory {

    public ArduinoConnectionFactory() {
        ArduinoConnection.INSTANCE.initialize();
        try {
            Thread.sleep(1800);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public Object getObjectInstance(Object obj, Name name, 
        Context nameCtx,Hashtable environment) throws NamingException {
            // Return the customized instance
            return (ArduinoConnection.INSTANCE);
        }
    }

最后是 servlet 中的 get 函数:

    Context initCtx;
    try {
        initCtx = new InitialContext();
        Context envCtx = (Context) initCtx.lookup("java:comp/env");
        ArduinoConnection arduino = (ArduinoConnection) envCtx.lookup("arduino/ArduinoConnectionFactory");
        arduino.doSomething();
    } catch (NamingException e) {
        System.out.println("Something went wrong!");
        e.printStackTrace();
    }

我现在的问题是知道如何从另一个 servlet 调用这些方法而不创建新的 InitialContext()

Edit:由于 new InitialContext() 并不是很昂贵,所以我这样做,它对我来说非常有效


阅读 Tomcat 中的 JNDI 配置。文档是here http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html。您可以定义一个在查找时创建的对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Apache Tomcat 启动中创建单例 的相关文章

随机推荐

  • 如何折叠区域中的空白?

    假设我有这个列表文本文件 field1 variable length field variable length field aaaaaa aaaa aaaaaaaaa bbbbbb bbbbbbbbbbbbbbbbbbbb bbbb 我
  • 如何按顺序执行多个方法?

    强制方法按顺序执行的最佳方法是什么 我有三个方法 但我希望方法1在方法2之前完成 然后当方法2完成时 执行方法3 Example void Method1 void Method2 void Method3 self Method1 sel
  • 通话中状态栏如何影响 ViewController 视图大小?

    我试图理解如何view关联到一个UITabBarController UINavigationController or UIViewController当通话状态栏切换时做出反应 我的问题是它们的行为似乎不同 这会给我带来副作用 我制作了
  • 错误:无法启动新线程

    我有一个使用以下配置运行的网站 Django mod wsgi 阿帕奇 在一个用户的请求中 我向另一个服务发送另一个HTTP请求 并通过python的httplib库解决了这个问题 但有时此服务得不到答复的时间太长 并且 httplib 的
  • 通过 URL 自动登录用户

    我每周向网站的注册会员发送一封邮件 其中包含该网站上私人页面的 URL 出于可用性目的 我不希望用户在单击 URL 后必须提供凭据 我正在使用 ASP NET 会员提供程序模型 Question 我如何实现这一点 以便用户可以通过单击专门的
  • 使用传递的参数附加方法后分离事件处理程序

    我需要将参数 在 C 中 传递给事件处理程序 然后能够分离事件处理程序 我附加事件处理程序并传递参数 map MouseLeftButtonUp sender e gt map MouseLeftButtonUp2 sender e sho
  • Python 导入机制

    我有两个相关的 Python 导入 问题 它们很容易测试 但我想要语言定义的答案而不是特定于实现的答案 而且我也对样式 约定感兴趣 所以我在这里问 1 如果模块 A 导入模块 B 模块 B 导入模块 C 模块 A 中的代码是否可以在不显式导
  • 如何获取 Binder 事务缓冲区的内容以进行故障排除

    有没有办法以编程方式或通过调试工具来了解 Binder 事务缓冲区中保存的当前事务 有时 通常在运行数小时 数天后 我的应用程序会崩溃并出现如下错误跟踪 08 30 09 49 57 459 1879 1904 E JavaBinder F
  • 具有行为奇怪的多值参数的存储过程

    我在 SQL Server 中创建了一个存储过程来为 SSRS 提供数据 以使其能够接受多个值 我已经创建了它 当我在报告中使用它或在 SQL Server 中执行它时 我收到以下错误消息 消息 207 第 16 层 状态 1 第 35 行
  • 如何避免电子邮件自动化的 Outlook 安全警告?

    我正在尝试使用 VBA 从 Excel 2010 发送 Outlook 电子邮件 Stack Overflow 上的大多数答案似乎都没有使用 VBA 来避免 Outlook 安全警告的方法 对于 Outlook Excel 2010 也没有
  • Swift - 从地图注释执行 Segue

    我的地图上有 1 个图钉 我需要将注释标题传递给另一个 UIView 在这种情况下是 ikinci Ekran swift 但我无法这样做 这是我的代码的segue部分 我不知道如何segue所选注释的标题 我只粘贴了相关部分的代码 cla
  • 从数据库中检索mp3文件

    我有一个关于如何从数据库中检索存储为 byte 数组的 mp3 文件并将其显示在表单中并让用户下载 播放的问题 唔 这确实可以做到 但如果它是 RDBMS 您确实应该重新考虑解决方案 通常 数据库不是为使用大型二进制对象而设计或优化的 并且
  • 首次打开时 Colorbox 无法以正确的高度打开

    所以我正在使用colorbox http colorpowered com colorbox 联系表单插件 我只是默认的 colorbox 属性 所以它应该自动调整到它包含的 div 对吗 首次加载时 此颜色框内容上有一个小的垂直滚动条 我
  • Android 虚拟键盘监听器

    虽然我之前问过这个问题 但没有得到任何正确的答案 当编辑文本聚焦时 我有一个 EditText android 虚拟键盘弹出 我已使用属性窗口中的 ime 选项将 完成 按钮添加到键盘 现在我想通过按 完成 按钮来执行一些操作 这个怎么做
  • 使用 Html 链接将 PHP GET 数据发送到服务器

    我有一段时间没有写 PHP GET 请求了 所以我有点生锈了 但是如何使用 Html 链接发送 GET 数据 如果我使用 jQuery 的 get 方法 我知道该怎么做 但我只是想知道是否有更简单的方法使用 Html 中的 href 或类似
  • Java中如何使图像从左向右移动

    到目前为止 我已经创建了下面的类 但是 现在我想插入一个代码以使图像从左到右和从右到左滑动 我通常会使用滑动平台 但是当我尝试实现它时它不起作用 我还是一个java初学者 所以我很感谢你的帮助 这是我的 Java 类的代码 package
  • 升级Java后找不到Sun.security

    我有一个使用 Play 2 0 创建的应用程序 我实现了 scribe java 库来使用一些 OAuth 服务 直到今天一切都很好 但是当我升级 jdk 并重新启动服务器时 我无法使用 scribe java 库 似乎它使用了一些类 例如
  • 在 ES6 中创建多个构造函数

    在 ES5 中 可以为一个类创建多个构造函数 同时使用原型保留两个类的公共部分 如下所示 function Book just creates an empty book function Book title length author
  • 无法从本地环境将 Blob 存储上传/下载到容器

    我有一个现有的函数应用程序 它具有从 sftp 下载文件 处理文件并将文件上传到 blob 存储的功能 该功能应用程序已部署在azure中并且运行正常 但是 当我从 Visual Studio 本地 运行相同的操作时 我在将文件上传到 Bl
  • 如何在 Apache Tomcat 启动中创建单例

    我需要在 Apache Tomcat 启动时创建一个单例 以便我可以使用 servlet 访问它们 单例定义 servlet 将给出什么响应 我想知道 tomcat 是否有构造函数 以便我可以添加代码以便创建单例 编辑 经过一番搜索 我发现