2017-01-05 12 views
0

Кто-нибудь знает, важны ли они вообще? Я пытаюсь создать приложение WebLogic 12c. Для файла web.xml, это XML-декларация в порядке:Какова важность объявлений xml в дескрипторах развертывания?

<?xml version="1.0" encoding="windows-1252"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 

И это моя application.xml декларация:

<?xml version = '1.0' encoding="UTF-8"?> 
<application xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  
http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd" version="7"> 

Если вместо версии = "7", у меня была версия =» 5 «вот так, будет ли это важно? это говорит ли это использовать Java EE 5 спецификации или с тех пор я использую 12с, это будет Java EE 7 независимо от того, что:

<?xml version = '1.0' encoding = 'windows-1252'?> 
<application 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/application_5.xsd" version="5"> 
+0

Отличные ответы, но никто не ответил на этот конкретный вопрос: если вместо version = "7", я имел объявление version = "5", использует ли WebLogic спецификации Java EE 5 или, поскольку я использую 12c, будет ли он все еще быть Java EE 7 независимо от того, что? Предположим, что код не использует никаких функций Java EE 5. Некоторые ответы, похоже, указывают на него с использованием спецификации Java EE 5, но я просто хочу быть уверенным. – wlaem

ответ

2

Перед JavaEE 7, все общие аннотации, как @Path или @WebListener было вместо этого указывается в дескрипторе развертывания. С введением этих аннотаций вы не можете оставить их для них, чтобы выполнять привязки к классам.

Но ... Они не устаревшее, web.xml имеет приоритет и будет отменять аннотации. Это упрощает кодеру устанавливать некоторые параметры для целей разработки и тестирования и позволяет развертывателю установить его в нечто более «разворачиваемое», не касаясь кода.

1

Существует хороший принцип, который называется «сбой раньше». Это означает, что чем раньше вы сможете обнаружить ошибку, тем лучше. А также, как только обнаружена ошибка, сообщите об этом, не продолжайте. Это связано с тем, что если вы продолжаете использовать плохие данные или работаете в плохом состоянии, урон будет выше, чем если бы вы не сразу.

Пример: Подумайте о системе, которая переводит деньги со счета A в B. Окончательная сумма рассчитывается. Ошибка в расчете вызвала отрицательную величину. Что лучше, если вы обнаружите это: не продолжить и фактически добавить некоторую сумму денег на счет A и удалить со счета B, хотя требуется противоположная операция?

То же самое касается схемы в XML. Если приложение (в вашем случае контейнер Java EE не может проверить XML, он лучше, чем если он неправильно развертывает ваше приложение. Неправильное развертывание может впоследствии привести к ошибке, подобной описанной выше.

1

Да, если вы используете Java EE 7 -.. использовать новые дескрипторы развертывания Пространства имен изменили

Вы можете сравнить различия между http://java.sun.com/xml/ns/javaee/application_5.xsd и http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd

Сводка изменений документирована здесь - https://antoniogoncalves.org/2013/06/04/java-ee-7-deployment-descriptors/

сервер приложений может принять ваше приложение даже со старыми дескрипторами, но это может быть просто для обратной совместимости. Если вы уверены, что ваше приложение основано на Java EE 7, настоятельно рекомендуется использовать новые пространства имен дескрипторов.

1

Конечно, это важно. Различные схемы будут иметь разные возможности. Мой ответ относится к схемам в целом.

Существует много переменных, но возможно, что определенная схема несовместима с определенной зависимостью. Например (полностью вымышленная ситуация), допустим, вы используете Java EE версии 5, и вы импортируете схему версии 7.

Версия 5 имеет элемент под названием foo. foo принимает id. Версия 7 добавила новую функцию в foo, и теперь у нее есть новый параметр name.

Вы используете Java EE 5, которая имеет только foo(id), но в вашем XML вы определяете

<foo id="bar" name="bar"/> 

, который отлично действует XML, в соответствии со схемой. Однако это приведет к сбою во время выполнения, потому что в Java EE 5 foo не может иметь name.

Я не знаю о вашей конкретной ситуации, но во всех случаях ваша версия схемы должна соответствовать версии вашей зависимости. Самый лучший случай - ничего плохого не происходит. Худший случай - это что-то не удается, и неясно, почему.