Pie*_*ult 23 java file-io ejb-3.0
我想知道如何从EJB 3 bean访问文件系统?
我在互联网上搜索了这个主题,并没有找到一个好的答案.
有人建议使用java.io/java.nio,即使规范禁止这种用法.大多数应用程序服务器似乎都允许访问此API.
另一个想法是使用JCA连接器来访问文件系统或LDAP目录.
我想要做的就是避免在数据库中使用BLOB,因为在性能和使用的资源方面,简单文件是一个更好的解决方案.
你会如何解决这个问题?
您不允许在EJB中访问文件系统的原因是您无法控制应用程序在(Java EE)容器中的运行方式.例如,您的应用程序可能跨服务器集群运行,在这种情况下,将某个对象保存到一台服务器上的目录可能没什么用处.(当然,您可能拥有网络文件系统,因此限制可能不适用).
一种选择可能是使用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());
Run Code Online (Sandbox Code Playgroud)
这可以在以后查找并重新转换为您的对象:
byte[] bs = (byte[]) new InitialContext().lookup("path/to/myobject");
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bs));
MyObj myObj = (MyObj) ois.readObject();
Run Code Online (Sandbox Code Playgroud)
另外,您可以使用java.beans 永久XML(即XMLDecoder,XMLEncoder)到您的实例编码为XML字符串的保存到JNDI.
如果您知道永远不会集中应用程序(或者您将能够对驱动器进行网络映射),那么只需使用java.io.*即可.
请务必引入有关文件存储的根位置的正确配置.
封装您对文件数据的访问权限.然后你可以使用上面列出的任何方法.甚至使用数据库.衡量系统的性能.如果它符合要求那么你就完成了.如果不是,您的文件访问权限已在一个位置本地化,您可以替换其他解决方案.如果必须将软件移植到另一个容器和/或必须由其他人维护,则具有相同的好处.
| 归档时间: |
|
| 查看次数: |
13379 次 |
| 最近记录: |