繁体   English   中英

如何将文件加载到会话bean中

[英]How to load files into session bean

我有一个java EE应用程序EE5 EJB3。 我使用NetBeans 6.7和GlassFish 2.x开发我需要一个部署/客户端特定的配置文件(* .xsl,* .xml)。

我的问题是:

1)我在哪里放置ear文件外部的文件?

2)如何将文件加载到会话bean中? 我可以使用注射吗?

我设法使用ejb-jar.xml为文件名注入@Resource。

提前谢谢了。 G。

我想这不是你所期待的,但正确的答案是你不应该这样做! 根据EJB规范 ,更确切地说是编程限制

企业bean不得使用java.io包来尝试访问文件系统中的文件和目录。

这句话之后是这样的解释:

文件系统API不适合业务组件访问数据。 业务组件应使用资源管理器API(如JDBC)来存储数据。

这句话背后的原因是:

  1. 访问文件系统不是事务性的,会损害组件的可分发性。
  2. 从EJB访问文件系统会损害其可部署性(资源不在EJB容器的控制之下,并且EJB无法在集群中轻松移动)。
  3. 访问文件系统是一个潜在的安全漏洞。

既然你知道这一点,如果你仍然想要做你的想法,如果你的EJB容器不限制使用java.io包中的类,那么我会在类路径上放一个只读文件,最好是一个JAR,并使用java.lang.ClassgetResource()getResourceAsStream()方法访问它。 但实际上,您应该牢记规范,它可以帮助您构建可移植的应用程序。

如果您可以为每个目标部署组装一个EAR(也许maven profile可以在此区域中提供帮助),那么您可以像资源一样加载它。

另一种选择是查看J2EE应用程序部署规范 (JSR-88),使每个环境具有一个具有N部署计划的EAR。

您还可以决定将文件存储在文件系统上(即使它是禁止的)。 如果您希望路径位于ejb.xml那么您需要再次以不同方式组装或部署EAR - 那么没有大的收益。 然后,另一个选项是使用Glassfish Custom JNDI Resource来从管理控制台直接配置路径。 你的应用程序。 可以根据配置的路径加载文件。

请参阅此问题: Java EE中的流程文件

该规范禁止使用java.io进行文件访问,它一般不禁止文件访问。

文件在企业应用程序中导致问题的主要原因之一是它们在多用户环境中难以安全有效地使用。 特别是,文件锁会严重限制可伸缩性。

按照Pascal的建议,每个会话使用类加载器读取一次配置文件不太可能在大多数应用程序服务器上造成问题,除非可能是热部署。

JNDI属性可用作配置文件的替代。 JNDI属性在部署描述符中定义,并在部署时将值绑定到JNDI名称。 应用程序可以使用JNDI名称从应用程序内部查找值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM