Что делает портлет JSR-286 совместимым? - PullRequest
6 голосов
/ 27 января 2012

Есть ли у кого-нибудь ссылка на краткое описание того, что делает портлет «JSR-286-совместимым», а не только «JSR-168-совместимым».У меня есть копия спецификации, и это совсем не лаконично, поэтому связывание спецификации не является полезным ответом.Я искал в Интернете в течение часа и не нашел ничего ясного (кроме спецификации, которая, конечно, требует, чтобы вы прочитали и предыдущую спецификацию, а затем отсеяли «новые функции» от «требуемых»соответствие ".

В частности, я обнаружил, что существует некоторая путаница в необходимости web.xml, который, похоже, исходит от людей, использующих Liferay и не осознающих, что Liferay падает в сети.xml для них.

Требуется ли портлетам JSR-286 файл web.xml в их файлах WAR?

Что мне действительно нужно, это то, что содержит один илиследующие списки:

  • То, что вы должны сделать с JSR-168, чтобы он стал совместимым с JSR-286
  • То, что вы не должны делать, иначеПортлет, совместимый с JSR-286, должен рассматриваться только как JSR-168.

Вы можете оставить «использовать portlet-app_2_0.xsd» вне списка, так как я считаю эту часть очевидной.

Я открыт для ответа, которыйОба списка пусты, кроме DTD / xsd для portlet.xml, и разница заключается только в том, что поддерживает портал, но, пожалуйста, подтвердите это утверждение ссылкой или другой ссылкой.

Причина, по которой я забочусья вижу сообщения о портлетах Vaadin в Liferay, которые подразумевают, что некоторые функции недоступны для портлетов JSR-168 ... Может также быть, что некоторая логика в коммутаторах Liferay основана на том, какую версию portlet.xml он видит, но у меня нетЯ подтвердил, что это тоже будет интересная информация, но не ответ на мой вопрос.

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Согласно этому документу , но также упоминается в jsr286 :

Спецификация JSR 286 (портлет 2.0) не нарушает бинарную совместимость с JSR168 (портлет 1.0). Это означает, что все портлеты, написанные в соответствии со спецификацией Portlet 1.0, могут работать без изменений. Единственными исключениями из этого правила являются:

renderResponse.setContentType больше не требуется перед вызовом getWriter или getOutputstream. В JSR168 вызов getWriter или getOutputstream без предварительной установки типа контента привел к исключению IllegalStateException.

getProtocol для включенных сервлетов / JSP возвращает «HTTP / 1.1», в JSR168 он возвращает ноль.

Таким образом, если ваш портлет jsr168 не зависит от значения, возвращаемого getProtocol(), вы в безопасности (т. Е. Каждый портлет jsr168 является портлетом jsr286).

Посты, которые вы видите, кажутся логичными, поскольку jsr286 - более новая спецификация, и есть некоторые функции, которые делают портлет jsr268 не портлетом jsr168.

1 голос
/ 30 января 2012

Хорошо, поскольку я не нашел ничего нового, отличающего портлет 2.0 от портлета 1.0 (кроме использования дополнительных служб и), я начну списки для своего ответа здесь.

Должен делать:

  1. Соответствует XSD 2.0 для portlet.xml (xmlns = "http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd")

не должен делать:

  1. Полагайтесь, что getWriter выдает исключение, если renderResponse.setContentType еще не был вызван. (В любом случае кажется маловероятным)
  2. Положитесь на getProtocol (), возвращающий ноль

В результате, если вы просто конвертируете свой portlet.xml, вы теперь «286-совместимы», если только вы не полагались на два элемента во втором списке для выполнения программы. Больше ничего не могу найти, но если кто-то найдет другой элемент для этих списков, отредактируйте.

...