Как поддерживать разные кодовые базы портлетов для Liferay 6.0 и 6.1 - PullRequest
3 голосов
/ 09 марта 2012

В Liferay 6.1 Класс ServletResponseUtil перемещен в пакет, отличный от Liferay 6.0:

//Liferay 6.0, 
// this class lives in util-java.jar in the default tomcat web app, /webapps/ROOT/lib. 
import com.liferay.util.servlet.ServletResponseUtil;

//Liferay 6.1
// class lives in portal-service.jar in  directory tomcat-7.../lib/ext/
//import com.liferay.portal.kernel.servlet.ServletResponseUtil;

Класс используется в нашем коде так:

    String result = personComponentImpl.process(request); 
    response.setContentType("text/xml");

    try {
        ServletResponseUtil.write(response, result);
    }
    catch (Exception e) {
        if (_log.isWarnEnabled()) {
          _log.warn(e, e);
        }
    }

Мне нужно поддерживать и улучшать портлет, написанный для выпуска Liferay 6.0. Сейчас мы рассматриваем возможность обновления до 6.1, но во время внутреннего тестирования портлета я обнаружил, что есть несколько строк кода, в которых вышеуказанная зависимость нарушена. Существуют ClassNotFoundException на 6.1 во время выполнения.

Мой проект Eclipse настроен на 6.0.

Что мне теперь делать?:

  • Ведение двух разных ветвей кода портлета. Это выполнимо, но в долгосрочной перспективе может потребоваться слишком много усилий

  • Поддерживать два разных проекта Eclipse с одной базой кода, но с разными путями сборки (это только общая стратегия, может не сработать)

  • Включите хитрый взлом в код Java, чтобы легко построить для 6.0, один раз для 6.1 (может быть, фабрика ... это только смутная идея)

  • Включите новую задачу ant, которая собирает + развертывает для 6.1, хотя Eclipse настроен на сборку для 6.0

  • Удалите зависимость от класса ServletResponseUtil в целом, используйте другой класс, который делает то же самое, что и ServletResponseUtil.

  • Сделай что-нибудь еще

1 Ответ

2 голосов
/ 09 марта 2012

Поскольку ServletResponseUtil не намного длиннее 350 строк, имеет очень многословную и даже ошибочную реализацию response.getOutputStream().write(data);, я бы выбрал «использовать другой класс, который делает то же самое».

Возможно, вам следует объединить это с небольшим "делай что-нибудь другое", и никогда не полагается на стабильность Liferay API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...