У меня есть довольно типичное приложение JavaEE, составленное с использованием EJB3, компонентов шва, бинов Spring и JSF, упакованных в несколько файлов jar и war внутри файла ear. Естественно, для JavaEE у нас есть много файлов XML как часть приложения. Некоторые из этих XML-файлов проверяются с использованием DTD (seam), а некоторые — с использованием схемы.
Поскольку большинство файлов были взяты из примеров и других проектов, все DTD и схемы ссылаются на сайт проекта, где находится DTD или схема по умолчанию. А вот и проблема: по какой-то причине сайт JBoss сегодня пропускает шовные DTD (проверьте http://www.jboss.com/products/seam/components-1.1.dtd, http://www.jboss.com/products/seam/components-1.2.dtd, http://www.jboss.com/products/seam/компоненты-2.0.dtd). Поскольку сервер JBoss проверяет XML при начальной загрузке, используя это расположение, развертывание приложения завершилось неудачно.
У меня такой вопрос: в данном случае куда мне поместить файлы DTD и определения? Я вижу три варианта:
- Используйте расположение по умолчанию, как я делал раньше. Поскольку это означает, что теперь я добавляю стабильность JBoss, Sun, Spring и любого другого поставщика в свою систему на случай, если мне понадобится повторно развернуть приложение, я предпочитаю этого не делать.
- Скопируйте все файлы DTD и схемы на мой сервер, чтобы URL-адреса указывали на сервер, находящийся под моим контролем.
- Скопируйте все файлы DTD и схемы в мое приложение или сервер приложений и используйте их локально.
Я предпочитаю вариант №3, так как он обеспечивает полный контроль над файлами без сетевых зависимостей. В проведенном нами тесте это даже значительно сократило время начальной загрузки сервера — по-видимому, синтаксический анализатор XML не кэширует определения. Есть ли что-то, что я упускаю, выбирая этот путь?