понедельник, 9 июля 2012 г.

Включение фрагментов html-страниц в php и twig, использование Spring Bean DSL для определения сервисов, исключение классов из обработки загрузчиками классов groovy


  • включение фрагментов страницы в php осуществляется функцией include: например:
 <?php include 'footer.php' ?>
  • но в шаблонах twig php'ая функция include не работает, вместо нее следует использовать собственную функцию include, например:
{% include '::commons/analytics.html.twig' %}
указанный фрагмент должен находиться в каталоге app/Resources/views, в содержащемся в нем каталоге commons, начальные двойные двоеточия говорят о том, что не указано имя контроллера и действия (пример взят из сайта, разработанного на Symfony2), если указать имя контроллера и действия фрагмент должен находиться в привычном в этом случае для Symfony2 месте
  • сервисы и другие объекты, определяемые в spring-приложении средствами файлов *-context.xml, в grails-приложении определяются с помощью Spring Bean DSL, определение должно располагаться в файле resources.groovy в каталоге conf/spring grails-приложения или grails-плагина (так же существует возможность определения объектов с помощью xml, при этом файл называется resources.xml), ниже пара примеров определения объектов:
import org.apache.chemistry.opencmis.client.api.SessionFactory;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;

import biz.pokrovskoe.cmis.gclient.services.Repository;
import biz.pokrovskoe.cmis.gclient.services.RepositoryConnectionService;

beans = {
    // Здесь создается фабрика сессий с интерфейсом SessionFactory, используя
    // статический метод newInstance() класса SessionFactoryImpl
    repositorySessionFactory(SessionFactoryImpl) {bean ->
         bean.factoryMethod = "newInstance"
    }

    // Создается соединение класса RepositoryConnectionService с конструктором по умолчанию
    // и устанавливается свойства sessionFactory ссылкой на предыдущий определенный объект
    repositoryConnection(RepositoryConnectionService) {
        sessionFactory = ref("repositorySessionFactory")
    }

    // Объект класса Map, содержит свойства соединения с репозиторием
    def repositoryParameters = [
        'username': '******',
        'password': '******',
        'url': 'http://localhost:18080/alfresco/cmisatom ,
        repositoryId : '72549849-e033-4a8b-806f-7a377522ef76'
    ]

    // Объект класса Repository создается с помощью метода createSession, которому передается в качестве
    // параметров объект со свойствами соединения, определен выше
    repository(repositoryConnection: "createSession") {bean ->
        bean.constructorArgs = [repositoryParameters]
    }
}
каждая конструкция, определяющая объект начинается с его имени, используемом в дальнейшем для привязки объектов к контроллерам. Объект со свойствами соединения определен как def и не может быть использован для установки в качестве значений свойств сервисов или контроллеров grails-приложения, предназначен исключительно для инициализации других объектов в файле resources.groovy.
  • приведенный выше пример, к сожалению, все равно не работает, но уже на этапе исполнения приложения, причина, видимо, кроется в приведении с помощью загрузчиков классов groovy классов, используемых opencmis, к виду привычному groovy. Ошибка времени выполнения возникает из-за несоответствия типов класса Date. Решение проблемы я подсмотрел в open-cmis-plugin, что-то подобное я и пытаюсь сделать, только в отличии от open-cmis-plugin, собираюсь упростить взаимодействие с репозиторием, используя динамическую природу groovy. Итак, решение заключается в исключении из обработки библиотек при определении зависимостей от opencmis, обратите внимание на конструкции exludes:
compile (
    'org.apache.chemistry.opencmis:chemistry-opencmis-client-api:0.7.0',
    'org.apache.chemistry.opencmis:chemistry-opencmis-client-impl:0.7.0',
    'org.apache.chemistry.opencmis:chemistry-opencmis-commons-api:0.7.0'
) {
     excludes "jaxws-rt"
}

runtime (
     'org.apache.chemistry.opencmis:chemistry-opencmis-client-api:0.7.0',
     'org.apache.chemistry.opencmis:chemistry-opencmis-client-bindings:0.7.0',
     'org.apache.chemistry.opencmis:chemistry-opencmis-client-impl:0.7.0',
     'org.apache.chemistry.opencmis:chemistry-opencmis-commons-api:0.7.0'
) {
     excludes "jaxws-rt"
}

Комментариев нет:

Отправить комментарий