作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想知道如何从 EJB 3 bean 访问文件系统?
我在互联网上搜索了这个主题,但没有找到好的答案。
有些人建议使用 java.io/java.nio,即使规范禁止这种用法。无论如何,大多数应用服务器似乎都允许访问此 API。
另一个想法是使用 JCA 连接器来访问文件系统或 LDAP 目录。
当一个简单的文件在性能和使用的资源方面是一个更好的解决方案时,我想要这样做以避免在数据库中使用 BLOB。
你会如何解决这个问题?
最佳答案
不允许您在 EJB 中访问文件系统的原因是您无法控制应用程序如何在 (Java EE)Container 中运行。例如,您的应用程序可能跨服务器集群运行,在这种情况下,将某些对象保存到一台服务器上的目录可能没什么用。 (当然你可能有一个网络文件系统,所以限制可能不适用)。
一种选择可能是使用您的Container附带的JNDI实现。您可能能够在某个 JNDI 位置保存原始 byte[]
数组,因此您始终可以保存对象的序列化形式:
ByteArrayOutputStream baos= new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(myObj);
//Now save into JNDI
new InitialContext().bind("path/to/myobject", baos.toByteArray());
这可以稍后查找并重新转换为您的对象:
byte[] bs = (byte[]) new InitialContext().lookup("path/to/myobject");
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bs));
MyObj myObj = (MyObj) ois.readObject();
或者,您可以使用 java.beans
persistent XML(即 XMLDecoder
、XMLEncoder
)对您的将实例作为 XML 字符串保存到 JNDI 中。
关于java - 如何从 EJB 3 访问文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1357667/
我是一名优秀的程序员,十分优秀!