null

Использование Liferay-сервисов из разных портлетов/Hook-плагинов

Иногда возникает необходимость использовать Liferay-сервис из нескольких различных портлетов. Приведу пример ситуации, где я с этим столкнулся, и решение проблемы. При работе с одним проектом, который состоит из портлета (для доступа в бд в портлете используется сервис) и хука (хук кастомизирует функционал некоторых стандартных портлетов Liferay), возникла необходимость сделать так, чтоб и в хуке можно было бы работать с базой через уже имеющийся сервис.

Это можно сделать следующим образом:

  • Файл сервисов ***service.jar переместить в папку tomcat-6.0.26/lib/ext/
  • Перезапустить сервер приложений
  • Развернуть портлет как обычно, но при этом из *war файла портлета нужно удалить файл с сервисами.

Неудобство заключается в том, что каждый раз при развертывании портлета прходится вручную удалять оттуда ***service.jar. Но этого можно избежать, внеся соответствующие изменения в ant скрипт build-common-plugin.xml (он находится в корне liferay pugins sdk), чтобы скорректировать процесс сборки как сервисов, так и портлета, и выполнять все эти действия автоматически:  

<target name="build-service">
...
...
    <zip
        basedir="docroot/WEB-INF/service-classes"
        destfile="docroot/WEB-INF/lib/${plugin.name}-service.jar"
    />
    <!-- нужно добавить копирование -->
    <copy file="docroot/WEB-INF/lib/${plugin.name}-service.jar" todir="${project.dir}/dist/" />   
                                                                  
    <delete dir="docroot/WEB-INF/service-classes" />
</target>

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

<target name="war" depends="compile">
...
...
    <if>
        <contains string="${app.server.dir}" substring="glassfish" />
        <then>
        <zip
            basedir="${docroot.dir}"
            destfile="${plugin.file}"    
            <!-- нужно ислючить jar из сборки -->        
            excludes="**/META-INF/context.xml,**/WEB-INF/lib/${plugin.name}-service.jar"
        />
        </then>
        <else>
        <zip
            basedir="${docroot.dir}"
            destfile="${plugin.file}"
            <!-- нужно ислючить jar из сборки -->        
            excludes="**/WEB-INF/lib/${plugin.name}-service.jar"
        />
        </else>
    </if>   
</target>

Приведенный выше фрагмент исключает из *.war файл с сервисами.