file - Java EE、EJB 文件处理

标签 file jakarta-ee ejb storage

我正在开发一个允许用户上传图片的网络应用程序,然后系统将为他们生成拇指。

我的问题依赖于这样一个事实,即 EJB 可以分布在多个服务器上,因此不允许直接处理文件。我可以将图像存储在数据库中,但我希望将它们作为文件存储在其中一台服务器中。我怎样才能做到这一点?有没有办法集中存储文件?或者使用 EJB 处理 Java EE 中的文件的任何方法?

目前,我将文件存储在数据库中。所以我有集中访问,我不需要专用的文件服务器。我这样做是因为我不知道如何集成 ftp 服务器和 EJB。然而,这是一个很好的选择吗?

我想要的是:使用无状态 EJB,将上传的图像存储为文件,并将它们的路径存储在数据库中。所以我可以使用

<h:graphicImage ... />

最佳答案

你这里其实有四个方面,

  • 收发文件
  • 创建缩略图
  • 将文件存储在每个节点都可以访问的地方
  • 将原始 + 缩略图实体存储在公共(public)数据库中

  • 由于您已经拥有 Java EE 服务器,因此您可能也已经拥有了一个 (HTTP) servlet 服务器,其中有许多方法可以进行负载平衡和 caching ,更不用说基于网络的交互的巨大潜力了。如果有的话,支持带有目录观察器的 FTP 传输作为奖励。

    您不应该使用无状态 session bean 创建缩略图,这意味着您的服务器将在高峰时间出现问题 - 服务器将优先考虑业务逻辑而不是建立新连接。相反,首先接收文件+原始实体并将其存储在数据库中,然后使用服务 bean 将缩略图创建排队(如果需要,可以使用 n 个工作线程或消息队列)。在某些情况下,您还可以使用 native 工具,我们在 linux 中这样做。

    您应该使用共享文件系统 SAN,它是在多台机器之间共享文件的正确工具。并根据文件系统的限制构建文件 - 例如每个目录的文件数和读/写容量。

    一个数据库至少对于一个小型集群来说已经足够了,只要你没有用大的二进制 blob 杀死它。

    如果有疑问,请购买更多内存 ;) 特别是缩略图非常可缓存,并且在 Tomcat 中也会提供良好的性能 - 如果您不熟悉多线程,请在 google 上查找缓存。还可以自然地缓存实体,而不仅仅是文件。

    关于file - Java EE、EJB 文件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5286974/

    相关文章:

    java - EJB 与 JPA Controller ?

    Emacs 打开最近的文件很慢!

    c# - 用 C# 编写一个二进制文件以供 C 程序读取,并带有指针?

    java - hibernate中获取sessionFactory

    java - 我需要在 jboss 运行后保留一个值。我需要在tomcat启动之前使用

    jakarta-ee - 传统 Java EE 服务器内的 OSGI 运行时

    c++ - 将 vector 结构写入文件

    c++ - FILE* 在不同函数 c++ 中的初始化

    java - 使用JDK 10时找不到javax.annotation.Resource的lookup()方法

    java - EJBTransactionRolledbackException : No entity found for query