Создать новый миксин в слинге

У меня возникли проблемы при создании нового нестандартного типа для крольчонка в слинге apache с использованием приведенного ниже кода. Это отлично работало прямо на Jackrabbit, но не на Apache Sling. Я делаю это правильно для слинга? Спасибо

Следующий код дает мне "javax.jcr.InvalidItemStateException: Conflict". Я использую автономную стропу и являюсь единственным пользователем, поэтому здесь нет никаких конфликтов.

Repository repository = JcrUtils.getRepository("http://localhost:8080/server");

Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));

NamespaceRegistry registry = session.getWorkspace().getNamespaceRegistry();
registry.registerNamespace("my", "http://my.com/v1.0");

CndImporter.registerNodeTypes(new FileReader("C:\\test.cnd"), session);

2 ответа

Решение

Если вы используете Sling, вы можете избежать всего этого, поместив свой CND-файл в комплект OSGi (где все равно должен находиться ваш Java-код) с заголовком, который сообщает Sling, где его найти.

Типы вашего узла будут автоматически зарегистрированы при активации вашего пакета. Для примера посмотрите файл event.cnd, который объявлен в заголовке пакета Sling-Nodetypes, который установлен в pom.xml этого модуля (или любым другим способом, если вы не используете Maven).

Обратите также внимание, что в любом случае вам не нужен JcrUtils.getRepository в Sling, правильный способ получить хранилище - это сервис OSGi SlingRepository, который обеспечивает согласованный вход в систему и настройку хранилища для всех ваших компонентов Sling. Вы можете получить репозиторий через @Reference к SlingRepository в Java-коде или получить сеанс JCR из ресурса, который Sling предоставляет для запроса обработчиков, таких как сервлеты и скрипты. Образец Slingbucks использует оба механизма.

JavaDocs для InvalidItemStateException предлагают эту подсказку:

Исключение, создаваемое методами записи Node и Property и сохранением и обновлением, если попытка изменения вступит в конфликт с изменением постоянного рабочего пространства, выполненного в другом сеансе. Также генерируется методами Node и Property, если этот объект представляет элемент, который был удален из рабочей области.

Вы уверены, что старые сеансы еще не запущены, возможно, это процесс-демон, который не был корректно завершен?

Другие вопросы по тегам