java - 在 JBoss 中的 JNDI 树上保留字节数组

标签 java jboss jakarta-ee jndi

作为我在 JBoss 上开发的 Java EE 应用程序的一部分,我需要将文件的内容保留在 JNDI 树上。我通过将文件内容读取到字节数组中,然后将其绑定(bind)到 JNDI 来实现此目的,如下所示。

getInitialContext().rebind("customers_datafile", byteArray);

这工作正常,但当 JBoss 服务器停止/重新启动时绑定(bind)会丢失。有没有办法让它在重新启动之间持续存在?理想情况下,我希望实现这一目标,而不必在每次重新启动时使用类似于上面的代码重新绑定(bind)它。

最佳答案

使用工厂代替:不要将文件加载到 byteArray 中,而是创建一个执行此操作的类并告诉 JBoss 创建一个实例。这样,您就可以在配置中传递文件名,并在 JBoss 运行 new 时加载它。

然后,您可以转到初始上下文并请求该类并调用它的方法。在您的情况下,该方法将返回字节数组。

See the docs for details .

[编辑] 因此,您真正的问题是如何使文件可供 JBoss 集群的所有节点使用。当您创建更多集群节点时,JBoss 不会复制实例。它所做的只是将 XML 配置的副本发送到节点。因此,实际上您唯一的选择是使用 Base64 等对文件进行编码,并将其作为值放入 XML 配置中。

如果你不希望这样,你必须找到一种方法将文件放在所有节点都可以“看到”它的地方。最简单的解决方案:将文件上传到 HTTP 服务器并将 URL 放入 config.json 中。 Java可以轻松地从URL读取数据,从而将文件分发到所有节点。

关于java - 在 JBoss 中的 JNDI 树上保留字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1486036/

相关文章:

java - 是否可以在不同的 Java 版本(JDK 1.8 和 JDK 12)上运行一个应用程序?

java - 主类在 JUnit 线程错误中运行异常

java - 为什么我会收到内部服务器错误?

java - Jboss java API 用于获取服务器中正在运行的应用程序及其状态

java - windows 7环境下如何用Nginx配置Jboss AS 7

java - 当 Web 应用程序没有太多请求时如何启动计划线程?

java - Spring mvc Autowiring RequestMappingHandlerMapping

java - 如何在JBoss 4中集成 'Bouncy CaSTLe'

java - Google App Engine 不支持英镑等特殊字符

java - 组织.apache.jasper.JasperException : PWC6033: Error in Javac compilation for JSP