2011-11-22 77 views
2

创建/部署war文件,我用我的web.xml中定义要使用的属性文件:动态获取属性文件名在EJB JAR(部署在耳)

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
    <context-param> 
     <param-name>PropertiesFile</param-name> 
     <param-value>/path/to/my.properties</param-value> 
    </context-param> 
    <display-name>MyServlet</display-name> 
    <servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>com.my.company.MyServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MyServlet</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

和使用,在我的servlet的init()方法,这样我就不必硬编码的文件名在我的代码:

public void init(ServletConfig config) throws ServletException 
{ 
    super.init(config); 

    log.debug("Enter init()"); 

    // get the properties location from web.xml 
    String propertiesFile = config.getServletContext() 
      .getInitParameter("PropertiesFile"); 

    log.info("Using properties file: " + propertiesFile); 

    // Finish intiliazing... 
} 

是否有类似的(或完全不同)的东西,设置/获取属性文件包含EJB JAR没有耳朵在我的课上对它进行硬编码?属性文件不会包含在jar或ear中,而是位于应用程序服务器之外的服务器上。

回答

1

您可以使用环境条目并使用@Resource注入它们以实现您想要的效果。

看看这个OpenEJB example

但是,如果你说喜欢的东西:

属性文件将不包括在任一罐子或耳朵,但 位于服务器上的应用程序服务器之外。

这对企业应用程序听起来不太合适。您不应该依赖容器以外的资源,也不要对您(或容器)无法控制的资源做出任何假设。
对文件的操作也是不鼓励的(如果不禁止的话 - 不记得准确。)

+0

感谢您的链接;我会研究它。属性文件未包含在jar/ear中的原因是因为它们根据我们部署到的系统(例如实验室,产品)而不同。首先使用属性文件的原因是因为它们可以更改。您包含哪些版本的属性,实验室还是产品?如果由于应用程序的重新部署而意外地用实验室覆盖了产品属性会怎么样? – sdoca

+0

@sdoca只是认为它是“你已被警告过”post :-)顺便说一下,你的实验室/产品属性是否被你的应用程序以外的其他过程改变了,这就是为什么你不能将它包含在你的应用程序中? –

+0

所以,基于你提供的链接,我已经开始工作了。谢谢!我的jar中已经有了一个Singleton类,它包含了所使用的不同属性键的常量,所以将'@ Resource'放在文件路径中是非常合适的。我创建了加载属性的方法,并使用'@ PostConstruct'注释对其进行了注释,并用'@ Startup'注释对类进行了注释,以确保它已加载。 – sdoca