Создать новый миксин в слинге
У меня возникли проблемы при создании нового нестандартного типа для крольчонка в слинге 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, если этот объект представляет элемент, который был удален из рабочей области.
Вы уверены, что старые сеансы еще не запущены, возможно, это процесс-демон, который не был корректно завершен?