作为我在 JBoss 上开发的 Java EE 应用程序的一部分,我需要将文件的内容保留在 JNDI 树上。我通过将文件内容读取到字节数组中,然后将其绑定(bind)到 JNDI 来实现此目的,如下所示。
getInitialContext().rebind("customers_datafile", byteArray);
这工作正常,但当 JBoss 服务器停止/重新启动时绑定(bind)会丢失。有没有办法让它在重新启动之间持续存在?理想情况下,我希望实现这一目标,而不必在每次重新启动时使用类似于上面的代码重新绑定(bind)它。
最佳答案
使用工厂代替:不要将文件加载到 byteArray 中,而是创建一个执行此操作的类并告诉 JBoss 创建一个实例。这样,您就可以在配置中传递文件名,并在 JBoss 运行 new
时加载它。
然后,您可以转到初始上下文并请求该类并调用它的方法。在您的情况下,该方法将返回字节数组。
[编辑] 因此,您真正的问题是如何使文件可供 JBoss 集群的所有节点使用。当您创建更多集群节点时,JBoss 不会复制实例。它所做的只是将 XML 配置的副本发送到节点。因此,实际上您唯一的选择是使用 Base64 等对文件进行编码,并将其作为值放入 XML 配置中。
如果你不希望这样,你必须找到一种方法将文件放在所有节点都可以“看到”它的地方。最简单的解决方案:将文件上传到 HTTP 服务器并将 URL 放入 config.json 中。 Java可以轻松地从URL读取数据,从而将文件分发到所有节点。
关于java - 在 JBoss 中的 JNDI 树上保留字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1486036/