EJB和使用二进制文件 - 最佳实践

时间:2013-10-31 06:07:54

标签: java java-ee glassfish ejb jackrabbit

我们有两种保存文件的方法 - 数据库或文件系统。

所以我有EJB,可以从servlet连接到java应用程序。 问题是使用二进制文件。我发现here对EJB(不是其他JAVA EE容器)的限制是从文件系统写入/读取文件。他们说保留在数据库中。

确定。我说。但是herehere每个人都说这是一个非常糟糕的主意。我完全赞同。

另一个解决方案是Apache Jackrabbit实现中的JCR。但我认为这两种方式。 Here它说文件也保存在文件系统中。

那么最佳做法是什么?为什么我们不能在没有JCR的情况下将文件写入文件系统?

2 个答案:

答案 0 :(得分:2)

您可以使用JCA连接器从EJB访问文件系统。因此,文件系统将是用于基本文件系统访问的资源http://code.google.com/p/txfs/。 XADisk用于更完整和事务性的访问。 Nuxeo不再使用JCR了,你也将Infinispan上的Modeshape(JBoss / RedHat实现)作为数据网格。

答案 1 :(得分:1)

将二进制文件保留在文件系统上对整体性能影响最小,这是最合适的方式(管理大量二进制内容的应用程序,如Alfresco使用文件系统,并且可以正常工作)。如果您需要从多个服务器访问您的文件,您可以将它们存储在单个服务器上并共享网络上的目录,或者只使用NAS。但是,使用文件系统不是事务性的,但如果这很重要,您可以使用支持文件系统级别事务的XADisk等工具。

JCR也是一个很好的方法,但它并不仅仅意味着存储二进制文件,它意味着以分层方式存储“内容”(二进制数据+描述二进制数据的元数据)。但是,使用JCR,您正在添加另一个抽象级别,这可能会对性能产生影响。作为最受欢迎的JCR实现,如Apache Jackrabbit,Alfresco和Nuxeo使用场景背后的文件系统,您应该考虑是否真的需要JCR提供的其他功能,如元数据,版本控制,缩略图,文档预览等,但性能损失和集成成本,或者如果满足您的需求,您可以使用文件系统。