似乎 Java EE 规范不允许从 EJB 读取文件,如下一个链接中所述:
http://java.sun.com/blueprints/qanda/ejb_tier/restrictions.html#file_access
它说:
不允许企业 bean 访问文件主要是因为文件不是事务性资源。允许 EJB 访问文件系统中的文件或目录,或者使用文件描述符,会损害组件的可分发性,并且会带来安全隐患。
那么我应该如何从应用程序服务器中的文件中读取呢?
似乎 Java EE 规范不允许从 EJB 读取文件,如下一个链接中所述:
http://java.sun.com/blueprints/qanda/ejb_tier/restrictions.html#file_access
它说:
不允许企业 bean 访问文件主要是因为文件不是事务性资源。允许 EJB 访问文件系统中的文件或目录,或者使用文件描述符,会损害组件的可分发性,并且会带来安全隐患。
那么我应该如何从应用程序服务器中的文件中读取呢?
我同意所有反对这种操作的观点,在你引用的链接中得到了很好的解释。该链接还建议了访问业务数据的首选方式,即通过 JDBC 接口。
但是,使用 GlassFish,我可以@Stateless
@EJB
从@ApplicationScoped
CDI
Bean 和 Bean 中打开和读取驻留在 web 文件夹中的文件。我ClassLoader
为此目的使用:
@Stateless
@LocalBean
public class MyBean {
@PostConstruct
public void init() {
ClassLoader loader = LicenseMessage.class.getClassLoader();
InputStream in = loader.getResourceAsStream("../../resources/myFile.txt");
}
}