Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBoss中JNDI树上的持久化字节数组_Java_Jboss_Jakarta Ee_Jndi - Fatal编程技术网

Java JBoss中JNDI树上的持久化字节数组

Java JBoss中JNDI树上的持久化字节数组,java,jboss,jakarta-ee,jndi,Java,Jboss,Jakarta Ee,Jndi,作为我在JBoss上开发的JavaEE应用程序的一部分,我需要在JNDI树上持久保存文件的内容。我通过将文件的内容读入一个字节数组,然后将其绑定到JNDI,如下所示 getInitialContext().rebind("customers_datafile", byteArray); 这可以正常工作,但是当JBoss服务器停止/重新启动时,绑定将丢失。有没有办法让它在重启之间保持最长时间?理想情况下,我希望实现这一点,而不必在每次重新启动时使用类似于上述的代码重新绑定它。使用工厂:与其将文件

作为我在JBoss上开发的JavaEE应用程序的一部分,我需要在JNDI树上持久保存文件的内容。我通过将文件的内容读入一个字节数组,然后将其绑定到JNDI,如下所示

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

这可以正常工作,但是当JBoss服务器停止/重新启动时,绑定将丢失。有没有办法让它在重启之间保持最长时间?理想情况下,我希望实现这一点,而不必在每次重新启动时使用类似于上述的代码重新绑定它。

使用工厂:与其将文件加载到byteArray中,不如创建一个这样做的类,并告诉JBoss创建一个实例。这样,您可以在配置中传递文件名,并在JBoss运行
new
时加载它

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

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


如果您不想这样做,那么必须找到一种方法,将文件放在所有节点都可以“看到”它的位置。最简单的解决方案是:将文件上载到HTTP服务器,并将URL放入配置文件中。Java可以很容易地从URL读取数据,这样就可以将文件分发到所有节点。

我的问题是,这样的类需要引用文件系统-我猜如果我们最终使用集群JBoss服务器(即它将引用哪个文件系统),这可能会导致问题。这就是为什么理想情况下,我希望使用我的实用程序(JBoss之外)部署它,然后将它保存在JNDI上。JBoss将如何在集群中分发您的byteArray?我假设JNDI树将在集群中共享?诚然,我在这方面的知识相当有限,所以如果我说的任何话都没有意义,我非常乐意被纠正:)是的,可能。但正如您已经注意到的,在JNDI树中放置字节数组很难使其在JBoss重新启动后存活。非常感谢您的输入,非常感谢。看起来你上面建议的一个选项将是一个更好的解决方案。这是一个非常特殊的要求,这实际上不是JNDI的目的。这真的是你想要做的,还是你正在努力实现其他目标,而这就是你试图解决它的方式?见下文-看起来我需要重新考虑我的想法:)