Мой вопрос касается приложения EAR. Я хотел бы знать, как класс в одном модуле может прочитать файл свойств, который находится в другом модуле.
Я работаю с Eclipse Luna и Wildfly 8.2.1.
В Eclipse:
* У меня есть «Проект корпоративного приложения» с именем MyEar.
* У меня есть «Динамический веб-проект» с именем MyWeb, и он является частью MyEar.
* У меня есть «Утилитарный проект» с именем MySrc, который является частью MyEar.
В проекте MyWeb у меня есть файл свойств с именем app.properties, который находится в папке WEB-INF\classes:
DefaultMaximumBatchSize=1000
В проекте MySrc у меня есть класс с именем AppProperties, который при запуске считывает файл app.properties в объект Properties:
package com.srh.config;
import java.io.InputStream;
import java.util.Properties;
public class AppProperties {
private static final Properties APP_PROPERTIES;
static {
InputStream inputStream = null;
APP_PROPERTIES = new Properties();
try {
inputStream = AppProperties.class.getResourceAsStream("/app.properties");
System.out.println("AppProperties: inputStream=" + inputStream);
if (inputStream != null) {
APP_PROPERTIES.load(inputStream);
}
} catch (Exception e) {
System.out.println("AppProperties: Exception occured; e=" + e);
}
}
public static String getValue(String propertyName) {
if (propertyName == null || propertyName.equalsIgnoreCase(""))
return null;
else
return APP_PROPERTIES.getProperty(propertyName);
}
}
В проекте MyWeb у меня есть прослушиватель с именем AppContextListener, где я тестирую поиск значения из AppProperties:
package com.srh.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import com.srh.config.AppProperties;
@WebListener
public class AppContextListener implements ServletContextListener {
public AppContextListener() {
}
public void contextInitialized(ServletContextEvent arg0) {
String defaultMaxBatchSize = AppProperties.getValue("DefaultMaximumBatchSize");
System.out.println("AppContextListener: contextInitialized(ServletContextEvent): defaultMaxBatchSize=" + defaultMaxBatchSize);
}
public void contextDestroyed(ServletContextEvent arg0) {
}
}
Когда я развернул приложение EAR в Wildfly, Eclipse развернул его как MyEar.ear со следующими файлами внутри:
lib\MySrc.jarMETA-INF\application.xmlMyWeb.war\META-INF\MANIFEST.MFMyWeb.war\WEB-INF\web.xmlMyWeb.war\WEB-INF\classes\app.propertiesMyWeb.war\WEB-INF\classes\com\srh\listener\AppContextListener.class
Внутри MySrc.jar есть следующие файлы:
com\srh\config\AppProperties.classMETA-INF\MANIFEST.MF
Когда я запускаю Wildfly, я получаю этот вывод в server.log:
AppProperties: inputStream=null
AppContextListener:contextInitialized(ServletContextEvent): defaultMaxBatchSize=null
Так как же модуль MySrc может прочитать файл свойств, который находится в модуле MyWeb?
Спасибо
@Singleton. Затем укажите свойства, необходимые для инициализации, через конструктор синглтона. - person Ian McLaird   schedule 09.09.2015