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

Java 如何将文件加载到会话bean中,java,jakarta-ee,ejb-3.0,Java,Jakarta Ee,Ejb 3.0,我有一个JavaEE应用程序EE5EJB3。我使用NetBeans 6.7和GlassFish 2.x进行开发 我需要一个特定于部署/客户端的配置文件(*.xsl,*.xml) 我的问题是: 1) 我应该将ear文件外部的文件放在哪里 2) 如何将文件加载到会话bean中?我可以打针吗 我设法使用ejb-jar.xml为文件名注入@Resource 非常感谢。 G.我想这不是你所期望的,但正确的答案是你不应该这样做!根据更精确的编程限制: 企业bean不能使用java.io包试图访问文件系统中的

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

我的问题是:

1) 我应该将ear文件外部的文件放在哪里

2) 如何将文件加载到会话bean中?我可以打针吗

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

非常感谢。
G.

我想这不是你所期望的,但正确的答案是你不应该这样做!根据更精确的编程限制:

企业bean不能使用
java.io
包试图访问文件系统中的文件和目录

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

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

这一说法背后的原因是:

  • 访问文件系统不是事务性的,会损害组件的可分发性
  • 从EJB访问文件系统会损害其可部署性(资源不在EJB容器的控制之下,EJB不能在集群中轻松移动)
  • 访问文件系统是一个潜在的安全漏洞
  • 现在您已经知道了这一点,如果您仍然想做您想做的事情,并且如果您的EJB容器不限制使用
    java.io
    包中的类,那么我会在类路径上放置一个只读文件,最好是在一个JAR中,并使用
    getResource()
    getResourceAsStream()访问它
    java.lang.Class的方法。但实际上,您应该记住该规范,它可以帮助您构建可移植应用程序。

    请参见以下问题:

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

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

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


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

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

    另一个选择是查看一下(JSR-88),在每个环境中有一个EAR和N个部署计划


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

    谢谢你的回答。如果我接受上述建议,不使用文件系统,您能解释一下什么是替代策略吗?我可以将文件打包到lib中,并将其作为主纪元的外部库进行lint吗?这样,我可以只在每次部署时预打包库。非常感谢。不确定你的确切意思,但通常情况下,如果你将特定于客户端的文件打包在一个.jar中,并将.jar放在.ear中,那么你应该能够像加载资源一样加载该文件。嗨,是的,这就是我的意思。我假设我可以有一个包含默认文件的默认jar文件,然后对于每个客户机,我只能替换ear中的那个jar?非常感谢。谢谢你,帕斯卡。你能提出一个替代方法来解决这个问题吗?非常感谢。我们在这个页面中已经给了你一些提示(JDBC,JNDI属性),但是我会让ewernli在你接受他的答案时回答这个问题。嗨,Pascal。我需要更具体一些:)。我需要加载一个xsl文件来翻译通过web服务或http post提交的xml。每个客户端都需要文件有点不同。我使用了JNDI和@Resource注入,但我看不出如何以这种方式加载xsl文件。非常感谢。G.澄清一下:你如何区分客户?你准备部署几个耳朵吗?您是否使用Metro?所有部署的主EAR都是相同的(jar和war),不同之处在于xsl文件。什么是地铁?谢谢你的帮助。