JBoss / EJB - расположение файла пользовательской конфигурации - PullRequest
4 голосов
/ 29 июля 2009

Я внедряю систему на основе EJB в JBoss.

Один из моих бинов, управляемых сообщениями, будет отвечать за отправку электронных писем. Я хочу, чтобы шаблон электронной почты хранился снаружи (возможно, в виде XML), чтобы его можно было легко изменить без изменения кода / повторного развертывания компонента и т. Д.

Где должен быть размещен этот файл и как мне на него ссылаться?

Ответы [ 3 ]

2 голосов
/ 06 августа 2009

В документации JBoss указано, что переменная среды jboss.server.data.dir является «местоположением, доступным для использования службами, которые хотят хранить контент в файловой системе». Смотрите здесь для более подробной информации. Вы можете получить значение переменной по

System.getProperty("jboss.server.data.dir");

И, как показано в ссылке, будет возвращено местоположение каталога сервера / [config] / data. Сохраните файл шаблона там, когда вы развернете свое приложение, и попросите своих администраторов изменить его там.

1 голос
/ 04 августа 2009

Этот вопрос и запись в блоге относятся к файлам свойств, но то, что обсуждается, применимо и к другим типам файлов. Одним из решений будет размещение XML-файла в стандартном месте и чтение его следующим образом (код взят по ссылке выше):

String path = System.getProperty("catalina.base")

                  + System.getProperty("file.seperator")

                  + "YOUR_FILE.properties";

FileInputStream fis = new FileInputStream(path);

Вместо catalina.base вы можете использовать user.dir или даже определить собственную переменную среды (mypath_to_xml_file) и читать ее с помощью System.getProperty.

Другим решением было бы использование JNDI для определения пути к файлу.

0 голосов
/ 05 августа 2009

Или поместите его в базу данных, где вы можете получить его через клиент SQL. Загрузите его при запуске или, возможно, опросите, чтобы проверить изменения метки времени и перезагрузите его.

Какой шаблон вы имеете в виду? Это шаблон Velocity, который вы заполняете способом слияния?
Одна вещь, которая мне нравится в дизайне базы данных, это то, что вы можете добавить гораздо больше информации в схему, которая находится над простым файлом. Вы можете включить метку времени, идентификатор пользователя, который обновил шаблон, версию, метаданные, системное имя, логическое значение для обозначения «живой» или «неактивный» и т. Д. Ваш EJB-компонент может быть действительно умным в отношении того, какой шаблон он выберет. Вы могли бы оказаться с еще большим количеством опций, чем у вас, если бы вы просто размещали файлы на диске сервера. Таким образом, они будут доступны и для других приложений. Может быть хороший дизайн, если вы немного поработаете с ним.

Если вы добавите его в каталог WEB-INF / classes развернутого развертывания, вы можете легко ссылаться на него с помощью «getResourceAsStream ()». Добавьте функцию опроса, если вы не хотите отказов сервера.

...